Linduino  1.3.0
Linear Technology Arduino-Compatible Demonstration Board
LTC681x.cpp File Reference

General BMS Library. More...

Detailed Description

General BMS Library.

Library for LTC681x Multi-cell Battery Monitor.

Author
BMS (bms.s.nosp@m.uppo.nosp@m.rt@an.nosp@m.alog.nosp@m..com)

Copyright 2019(c) Analog Devices, Inc.

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of Analog Devices, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
  • The use of this software may or may not infringe the patent rights of one or more patent holders. This license does not release you from the requirement that you obtain separate licenses from these patent holders to use this software.
  • Use of the software either in source or binary form, must be run on or directly connected to an Analog Devices Inc. component.

THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition in file LTC681x.cpp.

Go to the source code of this file.

Functions

void wakeup_idle (uint8_t total_ic)
 Wake isoSPI up from IDlE state and enters the READY state. More...
 
void wakeup_sleep (uint8_t total_ic)
 Wake the LTC681x from the sleep state. More...
 
void cmd_68 (uint8_t tx_cmd[2])
 Sends a command to the BMS IC. More...
 
void write_68 (uint8_t total_ic, uint8_t tx_cmd[2], uint8_t data[])
 Writes an array of data to the daisy chain. More...
 
int8_t read_68 (uint8_t total_ic, uint8_t tx_cmd[2], uint8_t *rx_data)
 Issues a command onto the daisy chain and reads back 6*total_ic data in the rx_data array. More...
 
uint16_t pec15_calc (uint8_t len, uint8_t *data)
 
More...
 
void LTC681x_wrcfg (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_wrcfgb (uint8_t total_ic, cell_asic ic[])
 
int8_t LTC681x_rdcfg (uint8_t total_ic, cell_asic ic[])
 
int8_t LTC681x_rdcfgb (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_adcv (uint8_t MD, uint8_t DCP, uint8_t CH)
 Starts cell voltage conversion Starts ADC conversions of the LTC681x Cpin inputs. More...
 
void LTC681x_adax (uint8_t MD, uint8_t CHG)
 Start a GPIO and Vref2 Conversion. More...
 
void LTC681x_adstat (uint8_t MD, uint8_t CHST)
 Start a Status ADC Conversion. More...
 
void LTC681x_adcvsc (uint8_t MD, uint8_t DCP)
 Starts cell voltage and SOC conversion. More...
 
void LTC681x_adcvax (uint8_t MD, uint8_t DCP)
 Starts cell voltage and GPIO 1&2 conversion. More...
 
uint8_t LTC681x_rdcv (uint8_t reg, uint8_t total_ic, cell_asic *ic)
 Reads and parses the LTC681x cell voltage registers. More...
 
int8_t LTC681x_rdaux (uint8_t reg, uint8_t total_ic, cell_asic *ic)
 Reads and parses the LTC681x auxiliary registers. More...
 
int8_t LTC681x_rdstat (uint8_t reg, uint8_t total_ic, cell_asic *ic)
 Reads and parses the LTC681x stat registers. More...
 
void LTC681x_rdcv_reg (uint8_t reg, uint8_t total_ic, uint8_t *data)
 Reads the raw cell voltage register data. More...
 
void LTC681x_rdaux_reg (uint8_t reg, uint8_t total_ic, uint8_t *data)
 Read the raw data from the LTC681x auxiliary register The function reads a single GPIO voltage register and stores the read data in the *data point as a byte array. More...
 
void LTC681x_rdstat_reg (uint8_t reg, uint8_t total_ic, uint8_t *data)
 Read the raw data from the LTC681x stat register The function reads a single Status register and stores the read data in the *data point as a byte array. More...
 
int8_t parse_cells (uint8_t current_ic, uint8_t cell_reg, uint8_t cell_data[], uint16_t *cell_codes, uint8_t *ic_pec)
 Helper function that parses voltage measurement registers. More...
 
uint8_t LTC681x_pladc ()
 Sends the poll ADC command. More...
 
uint32_t LTC681x_pollAdc ()
 This function will block operation until the ADC has finished it's conversion. More...
 
void LTC681x_clrcell ()
 Clears the LTC681x Cell voltage registers The command clears the cell voltage registers and initializes all values to 1. More...
 
void LTC681x_clraux ()
 Clears the LTC681x Auxiliary registers The command clears the Auxiliary registers and initializes all values to 1. More...
 
void LTC681x_clrstat ()
 Clears the LTC681x Stat registers The command clears the Stat registers and initializes all values to 1. More...
 
void LTC681x_diagn ()
 Starts the Mux Decoder diagnostic self test Running this command will start the Mux Decoder Diagnostic Self Test This test takes roughly 1ms to complete. More...
 
void LTC681x_cvst (uint8_t MD, uint8_t ST)
 Starts cell voltage self test conversion. More...
 
void LTC681x_axst (uint8_t MD, uint8_t ST)
 Start an Auxiliary Register Self Test Conversion. More...
 
void LTC681x_statst (uint8_t MD, uint8_t ST)
 Start a Status Register Self Test Conversion. More...
 
void LTC681x_adol (uint8_t MD, uint8_t DCP)
 Starts cell voltage overlap conversion. More...
 
void LTC681x_adaxd (uint8_t MD, uint8_t CHG)
 Start an GPIO Redundancy test. More...
 
void LTC681x_adstatd (uint8_t MD, uint8_t CHST)
 Start a Status register redundancy test Conversion. More...
 
int16_t LTC681x_run_cell_adc_st (uint8_t adc_reg, uint8_t total_ic, cell_asic *ic, uint8_t md, bool adcopt)
 Helper function that runs the ADC Self Tests. More...
 
uint16_t LTC681x_run_adc_overlap (uint8_t total_ic, cell_asic *ic)
 Helper Function that runs the ADC Overlap test. More...
 
int16_t LTC681x_run_adc_redundancy_st (uint8_t adc_mode, uint8_t adc_reg, uint8_t total_ic, cell_asic *ic)
 Helper function that runs the ADC Digital Redundancy commands and checks output for errors. More...
 
uint16_t LTC681x_st_lookup (uint8_t MD, uint8_t ST, bool adcopt)
 Self Test Helper Function. More...
 
void LTC681x_adow (uint8_t MD, uint8_t PUP, uint8_t CH, uint8_t DCP)
 Start an open wire Conversion. More...
 
void LTC681x_axow (uint8_t MD, uint8_t PUP)
 Start GPIOs open wire ADC conversion. More...
 
void LTC681x_run_openwire_single (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_run_openwire_multi (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_run_gpio_openwire (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_clear_discharge (uint8_t total_ic, cell_asic *ic)
 Helper Function to clear DCC bits in the CFGR Registers. More...
 
void LTC681x_wrpwm (uint8_t total_ic, uint8_t pwmReg, cell_asic ic[])
 
int8_t LTC681x_rdpwm (uint8_t total_ic, uint8_t pwmReg, cell_asic ic[])
 
void LTC681x_wrsctrl (uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
 Write the LTC681x Sctrl register. More...
 
int8_t LTC681x_rdsctrl (uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
 Reads sctrl registers of a LTC681x daisy chain. More...
 
void LTC681x_stsctrl ()
 Start Sctrl data communication This command will start the sctrl pulse communication over the spins. More...
 
void LTC681x_clrsctrl ()
 Clears the LTC681x SCTRL registers The command clears the SCTRL registers and initializes all values to 0. More...
 
void LTC681x_wrcomm (uint8_t total_ic, cell_asic ic[])
 
int8_t LTC681x_rdcomm (uint8_t total_ic, cell_asic ic[])
 
void LTC681x_stcomm (uint8_t len)
 Issues a stcomm command and clocks data out of the COMM register. More...
 
void LTC681x_check_pec (uint8_t total_ic, uint8_t reg, cell_asic *ic)
 Helper Function that counts overall PEC errors and register/IC PEC errors. More...
 
void LTC681x_reset_crc_count (uint8_t total_ic, cell_asic *ic)
 Helper Function that resets the PEC error counters. More...
 
void LTC681x_init_cfg (uint8_t total_ic, cell_asic *ic)
 Helper Function to initialize the CFGR data structures. More...
 
void LTC681x_set_cfgr (uint8_t nIC, cell_asic *ic, bool refon, bool adcopt, bool gpio[5], bool dcc[12], bool dcto[4], uint16_t uv, uint16_t ov)
 Helper function to set appropriate bits in CFGR register based on bit function. More...
 
void LTC681x_set_cfgr_refon (uint8_t nIC, cell_asic *ic, bool refon)
 Helper function to turn the REFON bit HIGH or LOW. More...
 
void LTC681x_set_cfgr_adcopt (uint8_t nIC, cell_asic *ic, bool adcopt)
 Helper function to turn the ADCOPT bit HIGH or LOW. More...
 
void LTC681x_set_cfgr_gpio (uint8_t nIC, cell_asic *ic, bool gpio[5])
 
void LTC681x_set_cfgr_dis (uint8_t nIC, cell_asic *ic, bool dcc[12])
 
void LTC681x_set_cfgr_dcto (uint8_t nIC, cell_asic *ic, bool dcto[4])
 
void LTC681x_set_cfgr_uv (uint8_t nIC, cell_asic *ic, uint16_t uv)
 Helper function to set uv field in CFGRA register. More...
 
void LTC681x_set_cfgr_ov (uint8_t nIC, cell_asic *ic, uint16_t ov)
 Helper function to set ov field in CFGRA register. More...
 

Function Documentation

◆ cmd_68()

void cmd_68 ( uint8_t  tx_cmd[2])

Sends a command to the BMS IC.

This code will calculate the PEC code for the transmitted command

Returns
void 2 byte array containing the BMS command to be sent

Definition at line 77 of file LTC681x.cpp.

◆ LTC681x_adax()

void LTC681x_adax ( uint8_t  MD,
uint8_t  CHG 
)

Start a GPIO and Vref2 Conversion.

Returns
void
Parameters
MDADC Conversion Mode
CHGSets which GPIO channels are converted

Definition at line 367 of file LTC681x.cpp.

◆ LTC681x_adaxd()

void LTC681x_adaxd ( uint8_t  MD,
uint8_t  CHG 
)

Start an GPIO Redundancy test.

Returns
void
Parameters
MDADC Conversion Mode
CHGSets which GPIO channels are converted

Definition at line 1038 of file LTC681x.cpp.

◆ LTC681x_adcv()

void LTC681x_adcv ( uint8_t  MD,
uint8_t  DCP,
uint8_t  CH 
)

Starts cell voltage conversion Starts ADC conversions of the LTC681x Cpin inputs.

The type of ADC conversion executed can be changed by setting the following parameters:

Returns
void
Parameters
MDADC conversion Mode
DCPControls if Discharge is permitted during conversion
CHSets which Cell channels are converted

Definition at line 350 of file LTC681x.cpp.

◆ LTC681x_adcvax()

void LTC681x_adcvax ( uint8_t  MD,
uint8_t  DCP 
)

Starts cell voltage and GPIO 1&2 conversion.

Returns
void
Parameters
MDADC Conversion Mode
DCPControls if Discharge is permitted during conversion

Definition at line 415 of file LTC681x.cpp.

◆ LTC681x_adcvsc()

void LTC681x_adcvsc ( uint8_t  MD,
uint8_t  DCP 
)

Starts cell voltage and SOC conversion.

Returns
void
Parameters
MDADC Conversion Mode
DCPControls if Discharge is permitted during conversion

Definition at line 399 of file LTC681x.cpp.

◆ LTC681x_adol()

void LTC681x_adol ( uint8_t  MD,
uint8_t  DCP 
)

Starts cell voltage overlap conversion.

Returns
void
Parameters
MDADC Conversion Mode
DCPDischarge permitted during conversion

Definition at line 1022 of file LTC681x.cpp.

◆ LTC681x_adow()

void LTC681x_adow ( uint8_t  MD,
uint8_t  PUP,
uint8_t  CH,
uint8_t  DCP 
)

Start an open wire Conversion.

Returns
void
Parameters
MDADC Conversion Mode
PUPPull up/Pull down current
CHChannels
DCPDischarge Permit

Definition at line 1292 of file LTC681x.cpp.

◆ LTC681x_adstat()

void LTC681x_adstat ( uint8_t  MD,
uint8_t  CHST 
)

Start a Status ADC Conversion.

Returns
void
Parameters
MDADC Conversion Mode
CHSTSets which Stat channels are converted

Definition at line 383 of file LTC681x.cpp.

◆ LTC681x_adstatd()

void LTC681x_adstatd ( uint8_t  MD,
uint8_t  CHST 
)

Start a Status register redundancy test Conversion.

Returns
void
Parameters
MDADC Mode
CHSTSets which Status channels are converted

Definition at line 1054 of file LTC681x.cpp.

◆ LTC681x_axow()

void LTC681x_axow ( uint8_t  MD,
uint8_t  PUP 
)

Start GPIOs open wire ADC conversion.

Returns
void
Parameters
MDADC Mode
PUPPull up/Pull down current

Definition at line 1310 of file LTC681x.cpp.

◆ LTC681x_axst()

void LTC681x_axst ( uint8_t  MD,
uint8_t  ST 
)

Start an Auxiliary Register Self Test Conversion.

Returns
void
Parameters
MDADC Conversion Mode
STSets if self test 1 or 2 is run

Definition at line 990 of file LTC681x.cpp.

◆ LTC681x_check_pec()

void LTC681x_check_pec ( uint8_t  total_ic,
uint8_t  reg,
cell_asic ic 
)

Helper Function that counts overall PEC errors and register/IC PEC errors.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
regType of register
icA two dimensional array that will store the data

Definition at line 1999 of file LTC681x.cpp.

◆ LTC681x_clear_discharge()

void LTC681x_clear_discharge ( uint8_t  total_ic,
cell_asic ic 
)

Helper Function to clear DCC bits in the CFGR Registers.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data

Definition at line 1682 of file LTC681x.cpp.

◆ LTC681x_clraux()

void LTC681x_clraux ( )

Clears the LTC681x Auxiliary registers The command clears the Auxiliary registers and initializes all values to 1.

The register will read back hexadecimal 0xFF after the command is sent.

Returns
void

Definition at line 948 of file LTC681x.cpp.

◆ LTC681x_clrcell()

void LTC681x_clrcell ( )

Clears the LTC681x Cell voltage registers The command clears the cell voltage registers and initializes all values to 1.

The register will read back hexadecimal 0xFF after the command is sent.

Returns
void

Definition at line 937 of file LTC681x.cpp.

◆ LTC681x_clrsctrl()

void LTC681x_clrsctrl ( )

Clears the LTC681x SCTRL registers The command clears the SCTRL registers and initializes all values to 0.

The register will read back hexadecimal 0x00 after the command is sent.

Returns
void

Definition at line 1900 of file LTC681x.cpp.

◆ LTC681x_clrstat()

void LTC681x_clrstat ( )

Clears the LTC681x Stat registers The command clears the Stat registers and initializes all values to 1.

The register will read back hexadecimal 0xFF after the command is sent.

Returns
void

Definition at line 960 of file LTC681x.cpp.

◆ LTC681x_cvst()

void LTC681x_cvst ( uint8_t  MD,
uint8_t  ST 
)

Starts cell voltage self test conversion.

Returns
void
Parameters
MDADC Conversion Mode
STSets if self test 1 or 2 is run

Definition at line 974 of file LTC681x.cpp.

◆ LTC681x_diagn()

void LTC681x_diagn ( )

Starts the Mux Decoder diagnostic self test Running this command will start the Mux Decoder Diagnostic Self Test This test takes roughly 1ms to complete.

The MUXFAIL bit will be updated, the bit will be set to 1 for a failure and 0 if the test has been passed.

Returns
void

Definition at line 967 of file LTC681x.cpp.

◆ LTC681x_init_cfg()

void LTC681x_init_cfg ( uint8_t  total_ic,
cell_asic ic 
)

Helper Function to initialize the CFGR data structures.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data

Definition at line 2084 of file LTC681x.cpp.

◆ LTC681x_pladc()

uint8_t LTC681x_pladc ( )

Sends the poll ADC command.

Returns
uint8_t adc_state 1 byte read back after a pladc command. If the byte is not 0xFF ADC conversion has completed

Definition at line 878 of file LTC681x.cpp.

◆ LTC681x_pollAdc()

uint32_t LTC681x_pollAdc ( )

This function will block operation until the ADC has finished it's conversion.

Returns
uint32_t counter The approximate time it took for the ADC function to complete.

Definition at line 899 of file LTC681x.cpp.

◆ LTC681x_rdaux()

int8_t LTC681x_rdaux ( uint8_t  reg,
uint8_t  total_ic,
cell_asic ic 
)

Reads and parses the LTC681x auxiliary registers.

The function is used to read the parsed GPIO codes of the LTC681x. This function will send the requested read commands parse the data and store the gpio voltages in the cell_asic structure.

Returns
int8_t, PEC Status 0: No PEC error detected -1: PEC error detected, retry read
Parameters
regDetermines which GPIO voltage register is read back.
total_icthe number of ICs in the system
icArray of the parsed aux codes

Definition at line 498 of file LTC681x.cpp.

◆ LTC681x_rdaux_reg()

void LTC681x_rdaux_reg ( uint8_t  reg,
uint8_t  total_ic,
uint8_t *  data 
)

Read the raw data from the LTC681x auxiliary register The function reads a single GPIO voltage register and stores the read data in the *data point as a byte array.

This function is rarely used outside of the LTC681x_rdaux() command.

Returns
void
Parameters
regDetermines which GPIO voltage register is read back
total_icThe number of ICs in the system
dataArray of the unparsed auxiliary codes

Definition at line 748 of file LTC681x.cpp.

◆ LTC681x_rdcfg()

int8_t LTC681x_rdcfg ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 264 of file LTC681x.cpp.

◆ LTC681x_rdcfgb()

int8_t LTC681x_rdcfgb ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 307 of file LTC681x.cpp.

◆ LTC681x_rdcomm()

int8_t LTC681x_rdcomm ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 1936 of file LTC681x.cpp.

◆ LTC681x_rdcv()

uint8_t LTC681x_rdcv ( uint8_t  reg,
uint8_t  total_ic,
cell_asic ic 
)

Reads and parses the LTC681x cell voltage registers.

The function is used to read the cell codes of the LTC681x. This function will send the requested read commands parse the data and store the cell voltages in the cell_asic structure.

Returns
uint8_t, PEC Status. 0: No PEC error detected -1: PEC error detected, retry read
Parameters
regControls which cell voltage register is read back.
total_icThe number of ICs in the system
icArray of the parsed cell codes

Definition at line 436 of file LTC681x.cpp.

◆ LTC681x_rdcv_reg()

void LTC681x_rdcv_reg ( uint8_t  reg,
uint8_t  total_ic,
uint8_t *  data 
)

Reads the raw cell voltage register data.

Returns
void
Parameters
regDetermines which cell voltage register is read back
total_icThe number of ICs in the
dataAn array of the unparsed cell codes

Definition at line 694 of file LTC681x.cpp.

◆ LTC681x_rdpwm()

int8_t LTC681x_rdpwm ( uint8_t  total_ic,
uint8_t  pwmReg,
cell_asic  ic[] 
)

Definition at line 1738 of file LTC681x.cpp.

◆ LTC681x_rdsctrl()

int8_t LTC681x_rdsctrl ( uint8_t  total_ic,
uint8_t  sctrl_reg,
cell_asic ic 
)

Reads sctrl registers of a LTC681x daisy chain.

Returns
int8_t, pec_error PEC Status. 0: Data read back has matching PEC -1: Data read back has incorrect PEC
Parameters
total_icNumber of ICs in the daisy chain
sctrl_regThe Sctrl Register to be written A or B
icA two dimensional array that the function stores the read data

Definition at line 1827 of file LTC681x.cpp.

◆ LTC681x_rdstat()

int8_t LTC681x_rdstat ( uint8_t  reg,
uint8_t  total_ic,
cell_asic ic 
)

Reads and parses the LTC681x stat registers.

The function is used to read the parsed status codes of the LTC681x. This function will send the requested read commands parse the data and store the status voltages in the cell_asic structure

Returns
int8_t, PEC Status 0: No PEC error detected -1: PEC error detected, retry read
Parameters
regDetermines which Stat register is read back.
total_icThe number of ICs in the system
icArray of the parsed stat codes

Definition at line 560 of file LTC681x.cpp.

◆ LTC681x_rdstat_reg()

void LTC681x_rdstat_reg ( uint8_t  reg,
uint8_t  total_ic,
uint8_t *  data 
)

Read the raw data from the LTC681x stat register The function reads a single Status register and stores the read data in the *data point as a byte array.

This function is rarely used outside of the LTC681x_rdstat() command.

Returns
void
Parameters
regDetermines which stat register is read back
total_icThe number of ICs in the system
dataArray of the unparsed stat codes

Definition at line 797 of file LTC681x.cpp.

◆ LTC681x_reset_crc_count()

void LTC681x_reset_crc_count ( uint8_t  total_ic,
cell_asic ic 
)

Helper Function that resets the PEC error counters.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data

Definition at line 2059 of file LTC681x.cpp.

◆ LTC681x_run_adc_overlap()

uint16_t LTC681x_run_adc_overlap ( uint8_t  total_ic,
cell_asic ic 
)

Helper Function that runs the ADC Overlap test.

Returns
uint16_t, error 0: Pass -1: False, Error detected
Parameters
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data

Definition at line 1158 of file LTC681x.cpp.

◆ LTC681x_run_adc_redundancy_st()

int16_t LTC681x_run_adc_redundancy_st ( uint8_t  adc_mode,
uint8_t  adc_reg,
uint8_t  total_ic,
cell_asic ic 
)

Helper function that runs the ADC Digital Redundancy commands and checks output for errors.

Returns
int16_t, error Number of errors detected.
Parameters
adc_modeADC Mode
adc_regType of register
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data

Definition at line 1188 of file LTC681x.cpp.

◆ LTC681x_run_cell_adc_st()

int16_t LTC681x_run_cell_adc_st ( uint8_t  adc_reg,
uint8_t  total_ic,
cell_asic ic,
uint8_t  md,
bool  adcopt 
)

Helper function that runs the ADC Self Tests.

Returns
int16_t, error Number of errors detected.
Parameters
adc_regType of register
total_icNumber of ICs in the daisy chain
icA two dimensional array that will store the data
mdADC Mode
adcoptADCOPT bit in the configuration register

Definition at line 1070 of file LTC681x.cpp.

◆ LTC681x_run_gpio_openwire()

void LTC681x_run_gpio_openwire ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 1590 of file LTC681x.cpp.

◆ LTC681x_run_openwire_multi()

void LTC681x_run_openwire_multi ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 1416 of file LTC681x.cpp.

◆ LTC681x_run_openwire_single()

void LTC681x_run_openwire_single ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 1326 of file LTC681x.cpp.

◆ LTC681x_set_cfgr()

void LTC681x_set_cfgr ( uint8_t  nIC,
cell_asic ic,
bool  refon,
bool  adcopt,
bool  gpio[5],
bool  dcc[12],
bool  dcto[4],
uint16_t  uv,
uint16_t  ov 
)

Helper function to set appropriate bits in CFGR register based on bit function.

Returns
void
Parameters
nICCurrent IC
icA two dimensional array that will store the data
refonThe REFON bit
adcoptThe ADCOPT bit
gpioThe GPIO bits
dccThe DCC bits
dctoThe Dcto bits
uvThe UV value
ovThe OV value

Definition at line 2098 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_adcopt()

void LTC681x_set_cfgr_adcopt ( uint8_t  nIC,
cell_asic ic,
bool  adcopt 
)

Helper function to turn the ADCOPT bit HIGH or LOW.

Returns
void
Parameters
nICCurrent IC
icA two dimensional array that will store the data
adcoptThe ADCOPT bit

Definition at line 2126 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_dcto()

void LTC681x_set_cfgr_dcto ( uint8_t  nIC,
cell_asic ic,
bool  dcto[4] 
)

Definition at line 2158 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_dis()

void LTC681x_set_cfgr_dis ( uint8_t  nIC,
cell_asic ic,
bool  dcc[12] 
)

Definition at line 2143 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_gpio()

void LTC681x_set_cfgr_gpio ( uint8_t  nIC,
cell_asic ic,
bool  gpio[5] 
)

Definition at line 2133 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_ov()

void LTC681x_set_cfgr_ov ( uint8_t  nIC,
cell_asic ic,
uint16_t  ov 
)

Helper function to set ov field in CFGRA register.

Returns
void
Parameters
nICCurrent IC
icA two dimensional array that will store the data
ovThe OV value

Definition at line 2177 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_refon()

void LTC681x_set_cfgr_refon ( uint8_t  nIC,
cell_asic ic,
bool  refon 
)

Helper function to turn the REFON bit HIGH or LOW.

Returns
void
Parameters
nICCurrent IC
icA two dimensional array that will store the data
refonThe REFON bit

Definition at line 2119 of file LTC681x.cpp.

◆ LTC681x_set_cfgr_uv()

void LTC681x_set_cfgr_uv ( uint8_t  nIC,
cell_asic ic,
uint16_t  uv 
)

Helper function to set uv field in CFGRA register.

Returns
void
Parameters
nICCurrent IC
icA two dimensional array that will store the data
uvThe UV value

Definition at line 2168 of file LTC681x.cpp.

◆ LTC681x_st_lookup()

uint16_t LTC681x_st_lookup ( uint8_t  MD,
uint8_t  ST,
bool  adcopt 
)

Self Test Helper Function.

Returns
uint16_t test_pattern returns the register data pattern for a given ADC MD and Self test
Parameters
MDADC Mode
STSelf Test
adcoptADCOPT bit in the configuration register

Definition at line 1245 of file LTC681x.cpp.

◆ LTC681x_statst()

void LTC681x_statst ( uint8_t  MD,
uint8_t  ST 
)

Start a Status Register Self Test Conversion.

Returns
void
Parameters
MDADC Conversion Mode
STSets if self test 1 or 2 is run

Definition at line 1006 of file LTC681x.cpp.

◆ LTC681x_stcomm()

void LTC681x_stcomm ( uint8_t  len)

Issues a stcomm command and clocks data out of the COMM register.

Returns
void
Parameters
lenLength of data to be transmitted

Definition at line 1978 of file LTC681x.cpp.

◆ LTC681x_stsctrl()

void LTC681x_stsctrl ( )

Start Sctrl data communication This command will start the sctrl pulse communication over the spins.

Returns
void

Definition at line 1879 of file LTC681x.cpp.

◆ LTC681x_wrcfg()

void LTC681x_wrcfg ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 204 of file LTC681x.cpp.

◆ LTC681x_wrcfgb()

void LTC681x_wrcfgb ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 234 of file LTC681x.cpp.

◆ LTC681x_wrcomm()

void LTC681x_wrcomm ( uint8_t  total_ic,
cell_asic  ic[] 
)

Definition at line 1907 of file LTC681x.cpp.

◆ LTC681x_wrpwm()

void LTC681x_wrpwm ( uint8_t  total_ic,
uint8_t  pwmReg,
cell_asic  ic[] 
)

Definition at line 1696 of file LTC681x.cpp.

◆ LTC681x_wrsctrl()

void LTC681x_wrsctrl ( uint8_t  total_ic,
uint8_t  sctrl_reg,
cell_asic ic 
)

Write the LTC681x Sctrl register.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
sctrl_regThe Sctrl Register to be written A or B
icA two dimensional array that will store the data to be written

Definition at line 1791 of file LTC681x.cpp.

◆ parse_cells()

int8_t parse_cells ( uint8_t  current_ic,
uint8_t  cell_reg,
uint8_t  cell_data[],
uint16_t *  cell_codes,
uint8_t *  ic_pec 
)

Helper function that parses voltage measurement registers.

Returns
int8_t, pec_error PEC Status. 0: Data read back has matching PEC -1: Data read back has incorrect PEC
Parameters
current_icCurrent IC
cell_regType of register
cell_dataUnparsed data
cell_codesParsed data
ic_pecPEC error

Definition at line 833 of file LTC681x.cpp.

◆ pec15_calc()

uint16_t pec15_calc ( uint8_t  len,
uint8_t *  data 
)


Calculates and returns the CRC15.

calaculates and returns the CRC15

Parameters
[in]uint8_tlen: the length of the data array being passed to the function
[in]uint8_tdata[] : the array of data that the PEC will be generated from
Returns
The calculated pec15 as an unsigned int

calaculates and returns the CRC15

Parameters
[in]uint8_tlen: the length of the data array being passed to the function
[in]uint8_tdata[] : the array of data that the PEC will be generated from
Returns
The calculated pec15 as an unsigned int16_t
Parameters
lenThe length of the data array being passed to the function
dataThe array of data that the PEC will be generated from

Definition at line 183 of file LTC681x.cpp.

◆ read_68()

int8_t read_68 ( uint8_t  total_ic,
uint8_t  tx_cmd[2],
uint8_t *  rx_data 
)

Issues a command onto the daisy chain and reads back 6*total_ic data in the rx_data array.

Returns
int8_t, PEC Status. 0: Data read back has matching PEC -1: Data read back has incorrect PEC Array that the read back data will be stored in.
Parameters
total_icNumber of ICs in the daisy chain
tx_cmd2 byte array containing the BMS command to be sent

Definition at line 140 of file LTC681x.cpp.

◆ wakeup_idle()

void wakeup_idle ( uint8_t  total_ic)

Wake isoSPI up from IDlE state and enters the READY state.

Returns
voidNumber of ICs in the daisy chain

Definition at line 54 of file LTC681x.cpp.

◆ wakeup_sleep()

void wakeup_sleep ( uint8_t  total_ic)

Wake the LTC681x from the sleep state.

Returns
void Number of ICs in the daisy chain

Definition at line 65 of file LTC681x.cpp.

◆ write_68()

void write_68 ( uint8_t  total_ic,
uint8_t  tx_cmd[2],
uint8_t  data[] 
)

Writes an array of data to the daisy chain.

Returns
void
Parameters
total_icNumber of ICs in the daisy chain
tx_cmd2 byte array containing the BMS command to be sent
dataArray containing the data to be written to the BMS ICs

Definition at line 98 of file LTC681x.cpp.