您好!
我 有 疑问。 我们通过 SPI 读取 或 Wite afe 发现 存在 许多 CRC 错误。
SPI 正常。
function() 写 afe 如下所示:
静态 uint8_t SPI_WriteReg (uint8_t reg_addr、uint8_t * reg_data、uint8_t count)
{
uint8_t addr = 0u;
uint8_t TX_Buffer[MAX_BUFFER_SIZE]={0x0U、0x0U、0x0U};
uint8_t i = 0u;
uint8_t match = 0u;
uint8_t 重试次数= 5u;
uint8_t reg_value = 0u;
uint8_t 结果= SPI_ACCESS_OK;
uint8_t crc_ret = 0u;
uint8_t rxdata[3U]={0x0U、0x0U、0x0U};
uint8_t TxRxResult = SPI_ACCESS_OK;
addr =(uint8_t)(0x80U | reg_addr);
对于(I = 0U;I < count;I++)
{
重试= 5u;
匹配= SPI_ACCESS_FAIL;
TX_Buffer[0U]= addr;
TX_Buffer[1U]=*(reg_data + I);
TX_Buffer[2U]= CRC8 (TX_Buffer、2U);
/*确认发送成功,如果不成功,重发,重发10次不成功退出*/
while ((match == spi_access_fail)&&(重试> 0U))
{
TxRxResult = SPI_ACCESS_OK;
DELAY_US (300u);
SPI_BQ76952_CS_LOW;
DELAY_US (100u);
rxdata[0U]=TX_Buffer[0],&TxRxResult,Ix_Read e52字节;
如果(TxRxResult == SPI_ACCESS_OK)
{
rxdata[1U ]= Ix_Read e52字节(TX_Buffer[1],&TxRxResult );
}
如果(TxRxResult == SPI_ACCESS_OK)
{
rxdata[2U]=TX_Buffer[2],&TxRxResult 的 Ix_Read e惊 悚字节(TX_Buffer[2],&TxRxResult);
}
SPI_BQ76952_CS_HIGH;
REG_VALUE =*(REG_DATA + I);
crc_ret = CRC8 (rxdata、2U);
if ((rxdata[0U]== addr)&&(rxdata[1U]== reg_value)&&(rxdata[2U]== crc_ret)&&(TxRxResult == spi_access_OK))
{
匹配= SPI_ACCESS_OK;
}
if (rxdata[2U]!= crc_ret)
{
G_afe_crc_fail_times++;
}
if (TxRxResult!= SPI_ACCESS_OK)
{
G_SPI_FAIL_TIMES++;
}
重试次数--;
}
如果(匹配= SPI_ACCESS_FAIL)
{
结果= SPI_ACCESS_FAIL;
写入失败提前直接退出;/*2 π*/
}
addr += 1u;
delay_us (500u);
}
结果=(TxRxResult!= SPI_ACCESS_OK)? TxRxResult:结果;/*如果SPI读写错误就返回读写错误,如果没有就返回访问结果*/
返回结果;
}
谢谢