smile__xu 发表于 2009-3-6 09:37:48

循环冗余码(CRC) 要怎么计算!

最近在看SMBUS spec的时候,发现对 CRC 的计算不是特别明了,在网上查了一些资料,但是对其中的一些细节还是不明了
这段时间新帖很少,我抛砖引玉,大家来讨论一下SMBUS 的相关问题吧?

协议包出错校验需要发送者和接收者为每次通信消息计算一个协议包出错码(PEC)。
设备提供的最后一个通信消息的字节里跟随一个这个消息的PEC。
接收者比较发送的和它自己的PEC来检测是否出现通信出错。

例如,主机向Slave devic请求RemainingCapacity()。这个包括在读取字符协议下的主机。Slave devic根据以下5个字节的数据来计算PEC,假设电芯的剩余容量为1001mAh。
        电芯读/写地址=0:0x16
        RemainingCapacity()的指令码:0x0f
        电芯读/写地址=0:0x17
        RemainingCapacity():0x03e9
那么对于0x160f17e903,Slave devic传输一个什么样的PEC给主机。

问题是怎么计算这个PEC???
请高手详细介绍一下啊!!
------------------------------------------------------------------------------------------以上都是网上搜来的!

freevanx 发表于 2009-3-6 20:12:54

SMBUS 的 PEC有两种, HW PEC和SW PEC,SW PEC是自己计算的,算法是CRC8,这里有一篇文章讨论

CRC-8 firmware implementations for SMBus
http://sbs-forum.org/marcom/dc2/20_crc-8_firmware_implementations.pdf

这里有CRC8的算法代码,稍微改一下就可以用了
http://www.koders.com/cpp/fid9C544B36B8C41721691790197D38DAC91D2C29EF.aspx?s=md5
页: [1]
查看完整版本: 循环冗余码(CRC) 要怎么计算!