我们在器件初始化的时候遇到了这样的问题:当发送setlastaddress命令的时候最后PEC字节ic没有响应,导致通讯失败;之前的helloall和ROLLCALL命令均得到了正确的数据。现在是两个芯片连接,helloall设置的地址是0XE0,即第一个芯片的地址是A[0-4] 100000;ROLLCALL命令读回来的地址是1FA0和1F90,芯片个数也是正确的2个。紧接着发送setlastaddress命令,发送的数据书序是:广播命令、地址寄存器0X01、0X02、0X02和PEC字节,前面四个字节都得到了ic的响应,第五个PEC字节IC没有回应,导致通讯失败。PEC的数据是由前面四个字节按照CRC-8的算法生成的,算法源代码也一并附上。
void MAX11068_PEC_Calculation(U8 * pByteList, U32 NumberOfBytes, U8 *pCRCByte)
{
#define CRC8_POLY (0x07)
xdata U32 i;
xdata U8 j;
xdata U8 Remainder;
*pCRCByte = 0x00;
for(i = 0;i < NumberOfBytes;i++)
{
Remainder = *pCRCByte^pByteList[i];
for(j = 0;j < 8;j++)
{
if(Remainder&0x80 == 0x80)
{
Remainder = (Remainder << 1)^CRC8_POLY;
}
else
{
Remainder = (Remainder << 1);
}
Remainder = Remainder&0xff;
}
*pCRCByte = Remainder;
}
}
打赏帖 | |
---|---|
嵌入式LinuxC语言程序调试和宏使用技巧被打赏50分 | |
让代码中包含最新的编译时间信息被打赏50分 | |
rtthread硬件加密--2crc加密分析被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】mcxa156使用低功耗定时器适配硬件RTC框架被打赏26分 | |
【STM32F769】AI之与本地deepseek对接被打赏50分 | |
Buck电路工作在CCM模式下电感电流的计算公式是什么?被打赏5分 | |
buck电路工作原理被打赏5分 | |
基于MSPM0L1306的MODBUS-RTU协议通讯实验被打赏100分 | |
我想要一部加热台+多合一调试工具被打赏18分 | |
每周了解几个硬件知识+485硬件知识分享被打赏10分 |