结合例子以更好地理解PEC的计算过程.
首先,我们需要传输一个字节的数据。 其值是0x01, 我们设定PEC的初始值是0x41 即 0100 0001. (注意: LTC6802的PEC的初始值是0x00)。 我们需要确定这个数据传输完了, 其PEC应该为多少(新的PEC值应该是0xC7)。DIN的数值一共8位,从时钟0到时钟7, 分别传输的位是: 0000 0001, 即为我们需要传输的那个数据0x01. 每传输一位DIN, 我们需要计算PEC。 其初始值为0100 0001。
在时钟0, 对应的DIN=0, IN0=DIN XOR PEC[7]= 0 XOR 0 = 0, IN1= PEC[0] XOR IN0 = 1 XOR 0 =1, IN2= PEC[1] XOR IN0 = 0 XOR 0 =0.
在时钟1, 对应的DIN=0, PEC[7]=PEC[6]=1, PEC[6]=PEC[5]=0,……PEC[3]=PEC[2]=0, PEC[2]=IN2=0, PEC[1]=IN1=1, PEC[0]=IN0=0. 然后我们再更新,IN0=DIN XOR PEC[7]= 0 XOR 1 = 1, IN1= PEC[0] XOR IN0 = 0 XOR 1 =1, IN2= PEC[1] XOR IN0 = 1 XOR 1 =0.
在时钟2, 3, 4, 5, 6, 基本上按时钟1的方式, 不断更新。
在时钟7, 对应的DIN=1, PEC[7]=PEC[6]=0, PEC[6]=PEC[5]=1,……PEC[3]=PEC[2]=0, PEC[2]=IN2=0, PEC[1]=IN1=0, PEC[0]=IN0=0. 然后我们再更新,IN0=DIN XOR PEC[7]= 1 XOR 0 = 1, IN1= PEC[0] XOR IN0 = 0 XOR 1 =1, IN2= PEC[1] XOR IN0 = 0 XOR 1 =1.
在时钟8, 我们得到最终的PEC的值: PEC[7]=PEC[6]=1, PEC[6]=PEC[5]=1,……PEC[3]=PEC[2]=0, PEC[2]=IN2=1, PEC[1]=IN1=1, PEC[0]=IN0=1.即0xC7.
如上所述, 每次传输一个字节的数据后, PEC都需要按此方法更新。 对于多字节的数据, PEC也是同样更新的。
另外, 数据手册中还简单说明了其PEC的基本原理, 即多项式 x8 + x2 + x + 1. 涉及到CRC的检验的一些数学理论. 有兴趣的同仁可以参考网络上更多这方面的资料。
有奖活动 | |
---|---|
“我踩过的那些坑”主题活动——第002期 | |
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |