62 #include "HL_system.h"
64 #pragma diag_suppress 232
112 .pMuxSequenceStart = {0},
161 uint16_t iterator = 0;
163 for (uint8_t stringNumber = 0u; stringNumber <
BS_NR_OF_STRINGS; stringNumber++) {
199 n775_state->
n775Data.
uid[stringNumber][iterator] = 0;
268 FAS_ASSERT((dataLength > 0u) && (dataLength <= 13u));
272 transactionData.
module = module;
276 for (uint8_t i = 0u; i < dataLength; i++) {
297 uint8_t deviceAddress,
299 uint8_t writeDataLength,
301 uint8_t readDataLength) {
306 FAS_ASSERT((uint16_t)(writeDataLength + readDataLength) <= 12u);
310 transactionData.
module = module;
315 for (uint8_t i = 0u; i < writeDataLength; i++) {
316 transactionData.
writeData[i] = pDataWrite[i];
324 for (uint8_t i = 0u; i < readDataLength; i++) {
325 pDataRead[i] = transactionData.readData[i];
339 FAS_ASSERT((dataLength > 0u) && (dataLength <= 13u));
343 transactionData.
module = module;
353 for (uint8_t i = 0u; i < dataLength; i++) {
354 pData[i] = transactionData.readData[i];
444 switch (returnedValue) {
490 uint16_t readValue = 0u;
491 uint16_t uid[3u] = {0};
500 MC33775_SYS_MODE_OFFSET,
501 (MC33775_SYS_MODE_TARGETMODE_DEEPSLEEP_ENUM_VAL << MC33775_SYS_MODE_TARGETMODE_POS),
518 MC33775_SYS_COM_CFG_OFFSET,
520 (MC33775_SYS_COM_CFG_BUSFW_ENABLED_ENUM_VAL << MC33775_SYS_COM_CFG_BUSFW_POS),
539 MC33775_SYS_COM_TO_CFG_OFFSET,
548 for (uint8_t j = 0u; j <= 3u; j++) {
571 MC33775_I2C_CFG_OFFSET,
572 (MC33775_I2C_CFG_EN_ENABLED_ENUM_VAL << MC33775_I2C_CFG_EN_POS) +
573 (MC33775_I2C_CFG_CLKSEL_F_400K_ENUM_VAL << MC33775_I2C_CFG_CLKSEL_POS),
598 MC33775_ALLM_CFG_OFFSET,
617 uint16_t primaryRawValues[20] = {0u};
618 uint16_t secondaryRawValues[4] = {0u};
619 uint16_t currentRawValue = 0u;
620 int16_t primaryValues[20] = {0u};
621 int16_t secondaryValues[4] = {0u};
622 int16_t currentValue = 0u;
627 bool gpio03Error =
false;
628 bool gpio47Error =
false;
633 MC33775_ALLM_APP_CTRL_OFFSET,
634 (1u << MC33775_ALLM_APP_CTRL_PAUSEBAL_POS) | (0x3FFu << MC33775_PRMM_APP_CTRL_CAPVC_POS) |
635 (MC33775_PRMM_APP_CTRL_VCOLNUM_DISABLED_ENUM_VAL << MC33775_PRMM_APP_CTRL_VCOLNUM_POS),
642 MC33775_ALLM_APP_CTRL_OFFSET,
643 (0u << MC33775_ALLM_APP_CTRL_PAUSEBAL_POS) | (0x3FFu << MC33775_PRMM_APP_CTRL_CAPVC_POS) |
644 (MC33775_PRMM_APP_CTRL_VCOLNUM_DISABLED_ENUM_VAL << MC33775_PRMM_APP_CTRL_VCOLNUM_POS),
650 uint8_t deviceAddress = m + 1u;
652 deviceAddress, 20, 4u, MC33775_PRMM_APP_VC_CNT_OFFSET, primaryRawValues, n775_state);
654 deviceAddress, 4, 4u, MC33775_SECM_APP_AIN4_OFFSET, secondaryRawValues, n775_state);
656 retValSupplyCurrent =
665 primaryValues[c + 1u] = (int16_t)primaryRawValues[c + 1u];
668 (((float_t)primaryValues[c + 1u]) * 154.0e-6f * 1000.0f);
673 for (uint8_t g = 0u; g < 4u; g++) {
676 primaryValues[g + 16u] = (int16_t)primaryRawValues[g + 16u];
679 (((float_t)primaryValues[g + 16u]) * 154.0e-6f * 1000.0f);
687 primaryValues[15u] = (int16_t)primaryRawValues[15u];
689 (((float_t)primaryValues[15u]) * 2.58e-3f * 1000.0f);
697 for (uint8_t g = 4u; g < 8u; g++) {
699 secondaryValues[g - 4u] = (int16_t)secondaryRawValues[g - 4u];
702 (((float_t)secondaryValues[g - 4u]) * 154.0e-6f * 1000.0f);
713 if (gpio03Error ==
false) {
725 if ((gpio03Error ==
false) && (gpio47Error ==
false)) {
743 currentValue = (int16_t)currentRawValue;
745 (((float_t)currentValue) * 7.69e-6f * 1000.0f);
765 uint8_t i2cAddressByte = 0u;
766 uint16_t readValue = 0u;
775 i2cAddressByte = (transactionData.deviceAddress << 1u) & 0xFEu;
777 uint8_t registerIncrement = 0u;
778 uint16_t registerStartAddress = 0u;
779 uint16_t dataToWrite = 0u;
780 uint8_t byteIndex = 0u;
781 uint8_t bytesWritten = 0u;
782 uint8_t msbIndex = 1u;
783 uint8_t lsbIndex = 1u;
785 switch (transactionData.transferType) {
792 transactionData.module + 1u,
793 MC33775_I2C_DATA0_OFFSET,
794 (i2cAddressByte << MC33775_I2C_DATA0_BYTE0_POS) |
795 (transactionData.writeData[0u] << MC33775_I2C_DATA0_BYTE1_POS),
798 if (transactionData.writeDataLength > 1u) {
800 registerStartAddress = MC33775_I2C_DATA1_OFFSET;
801 registerIncrement = 0u;
804 while (byteIndex < transactionData.writeDataLength) {
807 if ((byteIndex % 2u) != 0u) {
808 dataToWrite |= (uint16_t)(transactionData.writeData[byteIndex]) & 0xFFu;
811 dataToWrite |= ((uint16_t)(transactionData.writeData[byteIndex]) << 8u) & 0xFF00u;
815 if ((bytesWritten == 2u) || (byteIndex == transactionData.writeDataLength)) {
817 transactionData.module + 1u,
818 registerStartAddress + registerIncrement,
830 transactionData.module + 1u,
831 MC33775_I2C_CTRL_OFFSET,
833 ((transactionData.writeDataLength + 1u) << MC33775_I2C_CTRL_START_POS) |
834 ((MC33775_I2C_CTRL_STPAFTER_STOP_ENUM_VAL << MC33775_I2C_CTRL_STPAFTER_POS) +
835 (0u << MC33775_I2C_CTRL_RDAFTER_POS)),
841 transactionData.module + 1u, MC33775_I2C_STAT_OFFSET, &readValue, n775_state);
864 transactionData.module + 1u,
865 MC33775_I2C_DATA0_OFFSET,
866 i2cAddressByte << MC33775_I2C_DATA0_BYTE0_POS,
871 transactionData.module + 1u,
872 MC33775_I2C_CTRL_OFFSET,
874 ((transactionData.readDataLength + 1u) << MC33775_I2C_CTRL_START_POS) |
875 ((1u << MC33775_I2C_CTRL_STPAFTER_POS) + (0u << MC33775_I2C_CTRL_RDAFTER_POS)),
881 transactionData.module + 1u, MC33775_I2C_STAT_OFFSET, &readValue, n775_state);
887 nack = readValue & MC33775_I2C_STAT_NACKRCV_MSK;
889 uint16_t readData[13u] = {0u};
892 uint16_t nrOfRegisterToRead = (transactionData.readDataLength / 2u) + 1u;
894 transactionData.module + 1u,
897 MC33775_I2C_DATA0_OFFSET,
902 transactionData.readData[0u] = (uint8_t)((readData[0u] & 0xFF00) >> 8u);
906 while (byteIndex < transactionData.readDataLength) {
908 if ((byteIndex % 2u) != 0u) {
909 transactionData.readData[byteIndex] = (uint8_t)(readData[lsbIndex] & 0xFFu);
912 transactionData.readData[byteIndex] = (uint8_t)((readData[msbIndex] & 0xFF00u) >> 8u);
932 transactionData.module + 1u,
933 MC33775_I2C_DATA0_OFFSET,
934 ((i2cAddressByte |
N775_I2C_WRITE) << MC33775_I2C_DATA0_BYTE0_POS) |
935 (transactionData.writeData[0u] << MC33775_I2C_DATA0_BYTE1_POS),
938 if (transactionData.writeDataLength > 1u) {
940 registerStartAddress = MC33775_I2C_DATA1_OFFSET;
941 registerIncrement = 0u;
944 transactionData.writeData[transactionData.writeDataLength] = i2cAddressByte |
N775_I2C_READ;
945 while (byteIndex < (transactionData.writeDataLength + 1)) {
948 if ((byteIndex % 2u) != 0u) {
949 dataToWrite |= (uint16_t)(transactionData.writeData[byteIndex]) & 0xFFu;
952 dataToWrite |= ((uint16_t)(transactionData.writeData[byteIndex]) << 8u) & 0xFF00u;
956 if ((bytesWritten == 2u) || (byteIndex == (transactionData.writeDataLength + 1))) {
958 transactionData.module + 1u,
959 registerStartAddress + registerIncrement,
969 transactionData.module + 1u,
970 MC33775_I2C_DATA1_OFFSET,
971 ((i2cAddressByte |
N775_I2C_READ) << MC33775_I2C_DATA1_BYTE2_POS),
978 transactionData.module + 1u,
979 MC33775_I2C_CTRL_OFFSET,
982 ((transactionData.writeDataLength + transactionData.readDataLength + 2u)
983 << MC33775_I2C_CTRL_START_POS) |
984 ((1u << MC33775_I2C_CTRL_STPAFTER_POS) +
985 ((1u + transactionData.writeDataLength) << MC33775_I2C_CTRL_RDAFTER_POS)),
991 transactionData.module + 1u, MC33775_I2C_STAT_OFFSET, &readValue, n775_state);
997 nack = readValue & MC33775_I2C_STAT_NACKRCV_MSK;
999 uint16_t readData[13u] = {0u};
1001 uint16_t registerOffset = MC33775_I2C_DATA0_OFFSET;
1003 registerOffset += (transactionData.writeDataLength + 2u) / 2u;
1006 uint16_t nrOfRegisterToRead = 0u;
1007 if ((transactionData.writeDataLength % 2u) == 0u) {
1008 nrOfRegisterToRead = (transactionData.readDataLength + 1u) / 2u;
1010 nrOfRegisterToRead = (transactionData.readDataLength / 2u) + 1u;
1014 transactionData.module + 1u, nrOfRegisterToRead, 4u, registerOffset, readData, n775_state);
1022 if (((transactionData.writeDataLength + 1) % 2u) != 0u) {
1026 while (byteIndex < transactionData.readDataLength) {
1028 if ((byteIndex % 2u) == 0u) {
1029 transactionData.readData[byteIndex] = (uint8_t)(readData[lsbIndex] & 0xFFu);
1032 transactionData.readData[byteIndex] =
1033 (uint8_t)((readData[msbIndex] & 0xFF00u) >> 8u);
1042 while (byteIndex < transactionData.readDataLength) {
1044 if ((byteIndex % 2u) != 0u) {
1045 transactionData.readData[byteIndex] = (uint8_t)(readData[lsbIndex] & 0xFFu);
1048 transactionData.readData[byteIndex] =
1049 (uint8_t)((readData[msbIndex] & 0xFF00u) >> 8u);
1090 uint16_t readValue = 0u;
1091 uint8_t dataI2c = 0u;
1094 uint16_t tries = 0u;
1119 MC33775_I2C_DATA0_OFFSET,
1120 (addressI2c_write << MC33775_I2C_DATA0_BYTE0_POS) | (dataI2c << MC33775_I2C_DATA0_BYTE1_POS),
1126 MC33775_I2C_DATA1_OFFSET,
1127 (addressI2c_read << MC33775_I2C_DATA1_BYTE2_POS) | (
N775_I2C_DUMMY_BYTE << MC33775_I2C_DATA1_BYTE3_POS),
1133 MC33775_I2C_CTRL_OFFSET,
1135 ((MC33775_I2C_CTRL_STPAFTER_STOP_ENUM_VAL << MC33775_I2C_CTRL_STPAFTER_POS) +
1149 }
while ((readValue & MC33775_I2C_STAT_PENDING_MSK) && (returnedValue ==
N775_COMMUNICATION_OK) && (tries > 0u));
1159 readValue = readValue >> MC33775_I2C_DATA1_BYTE3_POS;
1163 if (readValue == dataI2c) {
1199 MC33775_BAL_GLOB_TO_TMR_OFFSET,
1210 MC33775_BAL_TMR_CH_ALL_OFFSET,
1211 (MC33775_BAL_TMR_CH_ALL_PWM_PWM100_ENUM_VAL << MC33775_BAL_TMR_CH_ALL_PWM_POS) |
1218 MC33775_BAL_GLOB_CFG_OFFSET,
1219 (MC33775_BAL_GLOB_CFG_BALEN_ENABLED_ENUM_VAL << MC33775_BAL_GLOB_CFG_BALEN_POS) |
1220 (MC33775_BAL_GLOB_CFG_TMRBALEN_STOP_ENUM_VAL << MC33775_BAL_GLOB_CFG_TMRBALEN_POS),
1240 uint8_t deviceAddress = m + 1u;
1241 uint16_t balancingState = 0u;
1245 balancingState |= 1u << c;
1257 bool retval =
false;
1300 #ifdef UNITY_UNIT_TEST
@ AFE_I2C_TRANSFER_TYPE_WRITE
@ AFE_I2C_TRANSFER_TYPE_WRITEREAD
@ AFE_I2C_TRANSFER_TYPE_READ_SUCCESS
@ AFE_I2C_TRANSFER_TYPE_WRITE_FAIL
@ AFE_I2C_TRANSFER_TYPE_READ
@ AFE_I2C_TRANSFER_TYPE_WRITE_SUCCESS
@ AFE_I2C_TRANSFER_TYPE_READ_FAIL
Headers for the driver for the general DMA module of monitoring ICs.
#define BS_NR_OF_CELL_BLOCKS_PER_MODULE
number of cells per module
#define BS_NR_OF_STRINGS
Number of parallel strings in the battery pack.
#define BS_NR_OF_TEMP_SENSORS_PER_MODULE
number of temperature sensors per battery module
#define BS_NR_OF_GPIOS_PER_MODULE
Defines the number of GPIOs.
#define BS_NR_OF_CELL_BLOCKS_PER_STRING
#define BS_NR_OF_MODULES_PER_STRING
number of modules in a string
#define BS_NR_OF_TEMP_SENSORS_PER_STRING
#define DATA_READ_DATA(...)
#define DATA_WRITE_DATA(...)
@ DATA_BLOCK_ID_BALANCING_CONTROL
@ DATA_BLOCK_ID_CELL_TEMPERATURE_BASE
@ DATA_BLOCK_ID_OPEN_WIRE_BASE
@ DATA_BLOCK_ID_SLAVE_CONTROL
@ DATA_BLOCK_ID_CELL_VOLTAGE_BASE
@ DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE
@ DATA_BLOCK_ID_BALANCING_FEEDBACK_BASE
Assert macro implementation.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
Definition of foxBMS standard types.
#define NULL_PTR
Null pointer.
Header of task driver implementation.
OS_QUEUE ftsk_afeFromI2cQueue
volatile bool ftsk_allQueuesCreated
OS_QUEUE ftsk_afeToI2cQueue
Header for the driver for the IO module.
Headers for the driver for the MCU module.
N775_COMMUNICATION_STATUS_e N775_CommunicationReadMultiple(uint16_t deviceAddress, uint16_t numberOfItems, uint16_t responseLength, uint16_t registerAddress, uint16_t *pValues, N775_STATE_s *n775_state)
Read multiple values from specific registers in a specific device.
void N775_ResetMessageCounter(uint16_t deviceAddress, uint8_t string)
Reset the message counter for one or all devices.
void N775_CommunicationWrite(uint16_t deviceAddress, uint16_t registerAddress, uint16_t value, SPI_INTERFACE_CONFIG_s *pSpiInterface)
Write a value into a specific register in a specific device.
N775_COMMUNICATION_STATUS_e N775_CommunicationRead(uint16_t deviceAddress, uint16_t registerAddress, uint16_t *pValue, N775_STATE_s *n775_state)
Read a value from a specific register in a specific device.
enum N775_COMMUNICATION_STATUS N775_COMMUNICATION_STATUS_e
@ N775_COMMUNICATION_ERROR_WRONG_CRC
@ N775_COMMUNICATION_ERROR_TIMEOUT
static STD_RETURN_TYPE_e N775_Enumerate(N775_STATE_s *n775_state)
enumerates the N775 slaves.
static DATA_BLOCK_SLAVE_CONTROL_s n775_slaveControl
STD_RETURN_TYPE_e N775_I2cWriteRead(uint8_t module, uint8_t deviceAddress, uint8_t *pDataWrite, uint8_t writeDataLength, uint8_t *pDataRead, uint8_t readDataLength)
trigger a read on the I2C bus of the slave, first write address of register to read.
void TEST_N775_SetFirstMeasurementCycleFinished(N775_STATE_s *n775_state)
static N775_ERRORTABLE_s n775_errorTable
static void N775_Init(N775_STATE_s *n775_state)
initializes the N775 driver.
static void N775_I2cInit(N775_STATE_s *n775_state)
init I2C for the N775 slaves.
void N775_Meas(N775_STATE_s *n775_state)
trigger function for the N775 driver state machine.
N775_STATE_s n775_stateBase
static DATA_BLOCK_ALL_GPIO_VOLTAGES_s n775_allGpioVoltage
static DATA_BLOCK_MIN_MAX_s n775_minMax
static DATA_BLOCK_CELL_TEMPERATURE_s n775_cellTemperature
static STD_RETURN_TYPE_e N775_SetMuxChannel(N775_STATE_s *n775_state)
sets mux channel.
static void N775_StartMeasurement(N775_STATE_s *n775_state)
starts the measurement.
static void N775_SetFirstMeasurementCycleFinished(N775_STATE_s *n775_state)
sets the measurement initialization status.
static DATA_BLOCK_CELL_VOLTAGE_s n775_cellVoltage
static void N775_IncrementMuxIndex(N775_STATE_s *n775_state)
updates index in mux sequence.
static void N775_BalanceSetup(N775_STATE_s *n775_state)
setups balancing.
static STD_RETURN_TYPE_e N775_TransmitI2c(N775_STATE_s *n775_state)
tranmit over I2C on NXP slave.
static DATA_BLOCK_BALANCING_CONTROL_s n775_balancingControl
static DATA_BLOCK_OPEN_WIRE_s n775_openWire
static void N775_ResetMuxIndex(N775_STATE_s *n775_state)
resets index in mux sequence.
static N775_SUPPLY_CURRENT_s n775_supplyCurrent
static void N775_BalanceControl(N775_STATE_s *n775_state)
manages balancing.
STD_RETURN_TYPE_e N775_I2cRead(uint8_t module, uint8_t deviceAddress, uint8_t *pData, uint8_t dataLength)
trigger a read on the I2C bus of the slave.
static void N775_InitializeDatabase(N775_STATE_s *n775_state)
in the database, initializes the fields related to the N775 driver.
static void N775_ErrorHandling(N775_STATE_s *n775_state, N775_COMMUNICATION_STATUS_e returnedValue, uint8_t module)
handles error when doing measurements.
STD_RETURN_TYPE_e N775_I2cWrite(uint8_t module, uint8_t deviceAddress, uint8_t *pData, uint8_t dataLength)
trigger a write on the I2C bus of the slave.
static void N775_ResetStringSequence(N775_STATE_s *n775_state)
reset index in string sequence.
static void N775_IncrementStringSequence(N775_STATE_s *n775_state)
updates index in string sequence.
static DATA_BLOCK_BALANCING_FEEDBACK_s n775_balancingFeedback
static void N775_waitTime(uint32_t milliseconds)
waits for a definite amount of time in ms.
static void N775_CaptureMeasurement(N775_STATE_s *n775_state)
captures the measurement.
bool N775_IsFirstMeasurementCycleFinished(N775_STATE_s *n775_state)
gets the measurement initialization status.
Headers for the driver for the MC33775A analog front-end.
N775_MUX_CH_CFG_s n775_muxSequence[N775_MUX_SEQUENCE_LENGTH]
int16_t N775_ConvertVoltagesToTemperatures(uint16_t adcVoltage_mV)
converts a raw voltage from multiplexer to a temperature value in deci °C.
#define N775_I2C_NR_BYTES_FOR_MUX_WRITE
#define N775_I2C_NR_BYTES_TO_SWITCH_TO_READ_FOR_UX_READ
#define N775_MEASUREMENT_CAPTURE_TIME_MS
#define N775_INVALID_REGISTER_VALUE
#define N775_I2C_DUMMY_BYTE
#define N775_CHECK_SUPPLY_CURRENT
#define N775_TIMEOUT_SWITCH
#define N775_TIMEOUT_TO_SLEEP_10MS
#define N775_CHECK_MUX_STATE
#define N775_DEFAULT_CHAIN_ADDRESS
#define N775_MUXED_TEMP_GPIO_POSITION
#define N775_MEASUREMENT_READY_TIME_MS
#define N775_MUX_SEQUENCE_LENGTH
#define N775_I2C_FINISHED_TIMEOUT_ms
#define N775_ADG728_ADDRESS_UPPERBITS
#define N775_BROADCAST_ADDRESS
#define N775_USE_MUX_FOR_TEMP
#define N775_PRE_BALANCING_TIMER
#define N775_BALPAUSELEN_10US
#define N775_GLOBAL_BALANCING_TIMER
#define N775_WAKEUP_TIME_MS
#define N775_TIME_AFTER_MEASUREMENT_START_MS
#define N775_ALL_CHANNEL_BALANCING_TIMER
#define N775_FLAG_READY_TRIES
Declaration of the OS wrapper interface.
OS_STD_RETURN_e OS_ReceiveFromQueue(OS_QUEUE xQueue, void *const pvBuffer, uint32_t ticksToWait)
Receive an item from a queue.
void OS_DelayTaskUntil(uint32_t *pPreviousWakeTime, uint32_t milliseconds)
Delay a task until a specified time.
void OS_ExitTaskCritical(void)
Exit Critical interface function for use in FreeRTOS-Tasks and FreeRTOS-ISR.
void OS_EnterTaskCritical(void)
Enter Critical interface function for use in FreeRTOS-Tasks and FreeRTOS-ISR.
OS_STD_RETURN_e OS_SendToBackOfQueue(OS_QUEUE xQueue, const void *const pvItemToQueue, uint32_t ticksToWait)
Post an item to the back the provided queue.
uint32_t OS_GetTickCount(void)
Returns OS based system tick value.
Headers for the driver for the SPI module.
SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceTx[BS_NR_OF_STRINGS]
SPI_INTERFACE_CONFIG_s spi_nxp775InterfaceRx[BS_NR_OF_STRINGS]
AFE_I2C_TRANSFER_TYPE_e transferType
int16_t gpioVoltages_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING *BS_NR_OF_GPIOS_PER_MODULE]
DATA_BLOCK_HEADER_s header
DATA_BLOCK_HEADER_s header
uint8_t balancingState[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]
DATA_BLOCK_HEADER_s header
DATA_BLOCK_HEADER_s header
int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_TEMP_SENSORS_PER_STRING]
DATA_BLOCK_HEADER_s header
uint32_t moduleVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]
int16_t minimumTemperature_ddegC[BS_NR_OF_STRINGS]
uint16_t nrSensorMinimumTemperature[BS_NR_OF_STRINGS]
uint16_t nrModuleMinimumTemperature[BS_NR_OF_STRINGS]
uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]
int16_t maximumTemperature_ddegC[BS_NR_OF_STRINGS]
uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]
uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrCellMinimumCellVoltage[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
uint16_t nrModuleMinimumCellVoltage[BS_NR_OF_STRINGS]
uint16_t nrModuleMaximumCellVoltage[BS_NR_OF_STRINGS]
int16_t maximumCellVoltage_mV[BS_NR_OF_STRINGS]
int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]
DATA_BLOCK_HEADER_s header
DATA_BLOCK_HEADER_s header
N775_ERRORTABLE_s * errorTable
DATA_BLOCK_BALANCING_CONTROL_s * balancingControl
uint64_t uid[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
DATA_BLOCK_CELL_TEMPERATURE_s * cellTemperature
DATA_BLOCK_ALL_GPIO_VOLTAGES_s * allGpioVoltage
N775_SUPPLY_CURRENT_s * supplyCurrent
DATA_BLOCK_MIN_MAX_s * minMax
DATA_BLOCK_CELL_VOLTAGE_s * cellVoltage
bool mux3IsOK[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool communicationOk[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool noCommunicationTimeout[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool mux2IsOK[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool mux0IsOk[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool mux1IsOK[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
bool crcIsValid[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]
SPI_INTERFACE_CONFIG_s * pSpiRxSequenceStart
SPI_INTERFACE_CONFIG_s * pSpiTxSequenceStart
N775_MUX_CH_CFG_s * pMuxSequence[BS_NR_OF_STRINGS]
bool firstMeasurementMade
SPI_INTERFACE_CONFIG_s * pSpiTxSequence
SPI_INTERFACE_CONFIG_s * pSpiRxSequence
uint8_t currentMux[BS_NR_OF_STRINGS]
N775_MUX_CH_CFG_s * pMuxSequenceStart[BS_NR_OF_STRINGS]
uint16_t current[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]