foxBMS  1.1.1
The foxBMS Battery Management System API Documentation
sbc_fs8x_communication.c File Reference

Implementation of communication logic for NXP SBC FS8x. More...

#include <stdint.h>
#include <stddef.h>
#include "sbc_fs8x_map.h"
#include "sbc_fs8x_assert.h"
#include "sbc_fs8x_common.h"
#include "sbc_fs8x_communication.h"
Include dependency graph for sbc_fs8x_communication.c:

Go to the source code of this file.

Macros

#define FS8x_REG_ADDR_MASK   0x3FU
 
#define FS8x_REG_ADDR_SHIFT   0x01U
 
#define FS8x_I2C_READ_FRAME_LENGTH   1U
 
#define FS8x_I2C_ADDRESS_BASE   0x20U
 
#define FS8x_I2C_FRAME_SIZE   0x05U
 
#define FS8x_I2C_RX_SIZE   0x03U
 
#define FS8x_CRC_TBL_SIZE   256U
 
#define FS8x_COM_CRC_POLYNOM   0x1DU
 
#define FS8x_COM_CRC_INIT   0xFFU
 

Functions

static uint8_t FS8x_CalcCRC (const uint8_t *data, uint8_t dataLen)
 This function calculates CRC value of passed data array. Takes bytes in inverted order due to frame format. More...
 
static fs8x_status_t FS8x_CheckCRC (const uint8_t *data, uint8_t dataLen)
 Performs CRC check of the data array. More...
 
static fs8x_status_t FS8x_SPI_TransferData (SPI_INTERFACE_CONFIG_s *pSpiInterface, fs8x_tx_frame_t *txData, fs8x_rx_frame_t *rxData)
 Performs SPI transfer of the txData. Received frame is saved into rxData structure. More...
 
static void FS8x_SPI_CreateSendFrame (fs8x_tx_frame_t *txData, uint8_t *txFrame)
 Creates a raw frame for SPI transfer. More...
 
fs8x_status_t FS8x_ReadRegister (SPI_INTERFACE_CONFIG_s *pSpiInterface, fs8x_drv_data_t *drvData, bool isFailSafe, uint8_t address, fs8x_rx_frame_t *rxData)
 Performs a read from a single FS8x register. More...
 
fs8x_status_t FS8x_WriteRegister (SPI_INTERFACE_CONFIG_s *pSpiInterface, fs8x_drv_data_t *drvData, bool isFailSafe, uint8_t address, uint16_t writeData)
 Sends write command to the FS8x. More...
 
fs8x_status_t FS8x_WriteRegisterInit (SPI_INTERFACE_CONFIG_s *pSpiInterface, fs8x_drv_data_t *drvData, uint8_t address, uint16_t writeData)
 Performs a write to a single FS8x FS init register (during the INIT_FS phase only). More...
 
fs8x_status_t FS8x_UpdateRegister (SPI_INTERFACE_CONFIG_s *pSpiInterface, fs8x_drv_data_t *drvData, bool isFailSafe, uint8_t address, int16_t mask, uint16_t writeData)
 Performs update of a single register. It affects bits specified by a bit mask. More...
 

Variables

static const uint8_t FS8x_CRC_TABLE [FS8x_CRC_TBL_SIZE]
 CRC lookup table. More...
 

Detailed Description

Implementation of communication logic for NXP SBC FS8x.

Author
nxf44615
Version
1.1
Date
9-Oct-2018
Updated
2020-03-18 (date of last update) Adapted driver to pass interface configuration as parameter into the functions to enable the usage of multiple ICs in the system.

Definition in file sbc_fs8x_communication.c.

Macro Definition Documentation

◆ FS8x_COM_CRC_INIT

#define FS8x_COM_CRC_INIT   0xFFU

CRC initial value.

Definition at line 73 of file sbc_fs8x_communication.c.

◆ FS8x_COM_CRC_POLYNOM

#define FS8x_COM_CRC_POLYNOM   0x1DU

CRC polynom.

Definition at line 72 of file sbc_fs8x_communication.c.

◆ FS8x_CRC_TBL_SIZE

#define FS8x_CRC_TBL_SIZE   256U

Size of CRC table.

Definition at line 71 of file sbc_fs8x_communication.c.

◆ FS8x_I2C_ADDRESS_BASE

#define FS8x_I2C_ADDRESS_BASE   0x20U

I2C device base address

Definition at line 66 of file sbc_fs8x_communication.c.

◆ FS8x_I2C_FRAME_SIZE

#define FS8x_I2C_FRAME_SIZE   0x05U

Length of the complete I2C frame

Definition at line 67 of file sbc_fs8x_communication.c.

◆ FS8x_I2C_READ_FRAME_LENGTH

#define FS8x_I2C_READ_FRAME_LENGTH   1U

Length of the data frame for I2C read command.

Definition at line 65 of file sbc_fs8x_communication.c.

◆ FS8x_I2C_RX_SIZE

#define FS8x_I2C_RX_SIZE   0x03U

Length of the received I2C data frame

Definition at line 68 of file sbc_fs8x_communication.c.

◆ FS8x_REG_ADDR_MASK

#define FS8x_REG_ADDR_MASK   0x3FU

< Length of the communication frame Register address mask

Definition at line 61 of file sbc_fs8x_communication.c.

◆ FS8x_REG_ADDR_SHIFT

#define FS8x_REG_ADDR_SHIFT   0x01U

SPI register address shift

Definition at line 62 of file sbc_fs8x_communication.c.

Function Documentation

◆ FS8x_CalcCRC()

static uint8_t FS8x_CalcCRC ( const uint8_t *  data,
uint8_t  dataLen 
)
static

This function calculates CRC value of passed data array. Takes bytes in inverted order due to frame format.

Parameters
[in]dataData array.
[in]dataLenLength of the data array.
Returns
CRC8

Definition at line 344 of file sbc_fs8x_communication.c.

◆ FS8x_CheckCRC()

static fs8x_status_t FS8x_CheckCRC ( const uint8_t *  data,
uint8_t  dataLen 
)
static

Performs CRC check of the data array.

CRC is expected in the first array item (index 0).

Parameters
[in]dataData array.
[in]dataLenLength of the data array.
Returns
Returns fs8xStatusOk if CRC is correct.

Definition at line 365 of file sbc_fs8x_communication.c.

Here is the call graph for this function:

◆ FS8x_SPI_CreateSendFrame()

static void FS8x_SPI_CreateSendFrame ( fs8x_tx_frame_t txData,
uint8_t *  txFrame 
)
static

Creates a raw frame for SPI transfer.

Parameters
[in]txDataTX data.
[out]txFrameTX frame for SPI transfer.

Definition at line 211 of file sbc_fs8x_communication.c.

Here is the call graph for this function:

◆ FS8x_SPI_TransferData()

static fs8x_status_t FS8x_SPI_TransferData ( SPI_INTERFACE_CONFIG_s pSpiInterface,
fs8x_tx_frame_t txData,
fs8x_rx_frame_t rxData 
)
static

Performs SPI transfer of the txData. Received frame is saved into rxData structure.

Parameters
[in,out]pSpiInterfaceSPI communication interface config
[in]txDataTX data.
[out]rxDataRX data. Can be NULL in case of write-only command.
Returns
Status return code.

Definition at line 180 of file sbc_fs8x_communication.c.

Here is the call graph for this function:

Variable Documentation

◆ FS8x_CRC_TABLE

const uint8_t FS8x_CRC_TABLE[FS8x_CRC_TBL_SIZE]
static
Initial value:
= {
0x00U, 0x1DU, 0x3AU, 0x27U, 0x74U, 0x69U, 0x4EU, 0x53U, 0xE8U, 0xF5U, 0xD2U, 0xCFU, 0x9CU,
0x81U, 0xA6U, 0xBBU, 0xCDU, 0xD0U, 0xF7U, 0xEAU, 0xB9U, 0xA4U, 0x83U, 0x9EU, 0x25U, 0x38U,
0x1FU, 0x02U, 0x51U, 0x4CU, 0x6BU, 0x76U, 0x87U, 0x9AU, 0xBDU, 0xA0U, 0xF3U, 0xEEU, 0xC9U,
0xD4U, 0x6FU, 0x72U, 0x55U, 0x48U, 0x1BU, 0x06U, 0x21U, 0x3CU, 0x4AU, 0x57U, 0x70U, 0x6DU,
0x3EU, 0x23U, 0x04U, 0x19U, 0xA2U, 0xBFU, 0x98U, 0x85U, 0xD6U, 0xCBU, 0xECU, 0xF1U, 0x13U,
0x0EU, 0x29U, 0x34U, 0x67U, 0x7AU, 0x5DU, 0x40U, 0xFBU, 0xE6U, 0xC1U, 0xDCU, 0x8FU, 0x92U,
0xB5U, 0xA8U, 0xDEU, 0xC3U, 0xE4U, 0xF9U, 0xAAU, 0xB7U, 0x90U, 0x8DU, 0x36U, 0x2BU, 0x0CU,
0x11U, 0x42U, 0x5FU, 0x78U, 0x65U, 0x94U, 0x89U, 0xAEU, 0xB3U, 0xE0U, 0xFDU, 0xDAU, 0xC7U,
0x7CU, 0x61U, 0x46U, 0x5BU, 0x08U, 0x15U, 0x32U, 0x2FU, 0x59U, 0x44U, 0x63U, 0x7EU, 0x2DU,
0x30U, 0x17U, 0x0AU, 0xB1U, 0xACU, 0x8BU, 0x96U, 0xC5U, 0xD8U, 0xFFU, 0xE2U, 0x26U, 0x3BU,
0x1CU, 0x01U, 0x52U, 0x4FU, 0x68U, 0x75U, 0xCEU, 0xD3U, 0xF4U, 0xE9U, 0xBAU, 0xA7U, 0x80U,
0x9DU, 0xEBU, 0xF6U, 0xD1U, 0xCCU, 0x9FU, 0x82U, 0xA5U, 0xB8U, 0x03U, 0x1EU, 0x39U, 0x24U,
0x77U, 0x6AU, 0x4DU, 0x50U, 0xA1U, 0xBCU, 0x9BU, 0x86U, 0xD5U, 0xC8U, 0xEFU, 0xF2U, 0x49U,
0x54U, 0x73U, 0x6EU, 0x3DU, 0x20U, 0x07U, 0x1AU, 0x6CU, 0x71U, 0x56U, 0x4BU, 0x18U, 0x05U,
0x22U, 0x3FU, 0x84U, 0x99U, 0xBEU, 0xA3U, 0xF0U, 0xEDU, 0xCAU, 0xD7U, 0x35U, 0x28U, 0x0FU,
0x12U, 0x41U, 0x5CU, 0x7BU, 0x66U, 0xDDU, 0xC0U, 0xE7U, 0xFAU, 0xA9U, 0xB4U, 0x93U, 0x8EU,
0xF8U, 0xE5U, 0xC2U, 0xDFU, 0x8CU, 0x91U, 0xB6U, 0xABU, 0x10U, 0x0DU, 0x2AU, 0x37U, 0x64U,
0x79U, 0x5EU, 0x43U, 0xB2U, 0xAFU, 0x88U, 0x95U, 0xC6U, 0xDBU, 0xFCU, 0xE1U, 0x5AU, 0x47U,
0x60U, 0x7DU, 0x2EU, 0x33U, 0x14U, 0x09U, 0x7FU, 0x62U, 0x45U, 0x58U, 0x0BU, 0x16U, 0x31U,
0x2CU, 0x97U, 0x8AU, 0xADU, 0xB0U, 0xE3U, 0xFEU, 0xD9U, 0xC4U
}

CRC lookup table.

Definition at line 80 of file sbc_fs8x_communication.c.