器件型号: TPS929160-Q1
您好!
我的公司生产程序员,我们希望当用户修改其他 EEPROM 区域时自动修改 CRC REG。 因此、我需要在不使用 Excel 工具的情况下生成 EEPCRC 值。
在 UART 通信期间、我算法的 CRC 计算是正确的、芯片会给出响应。 但是、当我使用算法计算 EEPCRC(在 Excel 中输入所有数据)时、该值与工具的 TPS929160 计算值不同。 我的结果与 TPS929240 的结果相同、但与 TPS929160 的结果不同。
我注意到、即使工具 Excel 中的数据相同、TPS929240 和 TPS929160 的结果也不相同。 我想知道两个芯片的计算算法是否不同?
#include"stdio.h"
#include <string.h>
typedef unsigned char BYTE;
BYTE EEPPWMMData[99] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x33, 0x33, 0x33, 0x00,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x30,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10
};
BYTE reserve(BYTE bData)
{
int i = 0;
BYTE bTemp = 0;
for (i = 0; i < 8; i++)
{
bTemp |= ((bData >> i) & 0x01) << (7 - i);
}
return bTemp;
}
int TPS929_CRC8(BYTE wData[], BYTE bSize)
{
BYTE reverse_polynom = 0x31;
BYTE crc = 0xFF;
int i, n;
for (i = 0; i < bSize; i++)
{
crc = crc ^ reserve(wData[i]);
for (n = 0; n < 8; n++)
{
if (crc & 0x80)
{
crc = (crc << 1) ^ reverse_polynom;
}
else
{
crc = (crc << 1);
}
}
}
return crc;
}
int main()
{
int a;
a = TPS929_CRC8(EEPPWMMData, 99);
printf("a = 0x%08x\n", a);
return 0;
}
运行代码、结果为“a=0x0000005a"</s>“ 



