找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 19086|回复: 1

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

[复制链接]
发表于 2009-3-6 09:37:48 | 显示全部楼层 |阅读模式
最近在看SMBUS spec的时候,发现对 CRC 的计算不是特别明了,在网上查了一些资料,但是对其中的一些细节还是不明了8 q; H0 p" }9 o$ U. K, J5 Y+ X
这段时间新帖很少,我抛砖引玉,大家来讨论一下SMBUS 的相关问题吧?
: b- D! m; j1 M7 P* G: N: i; A  o: ^. C2 n
协议包出错校验需要发送者和接收者为每次通信消息计算一个协议包出错码(PEC)。
+ y; p$ y8 T% Z: q1 D7 M# E7 A设备提供的最后一个通信消息的字节里跟随一个这个消息的PEC。/ [% H* X8 \, p8 M% T5 v
接收者比较发送的和它自己的PEC来检测是否出现通信出错。
& F4 w" y& j+ w% \2 L7 j! s5 r" Z0 S* q8 w7 h8 N# i
例如,主机向Slave devic请求RemainingCapacity()。这个包括在读取字符协议下的主机。Slave devic根据以下5个字节的数据来计算PEC,假设电芯的剩余容量为1001mAh。
, c  |( i( o! c' \. B' I7 u4 V6 W        电芯读/写地址=0:0x16
8 Z: H+ q* ]9 h9 H3 T        RemainingCapacity()的指令码:0x0f
5 K! g4 h! h) T5 g8 a1 ^0 C3 b        电芯读/写地址=0:0x17) {9 ~8 u: X  s! F7 u  q( {
        RemainingCapacity():0x03e99 `" U4 {. y- S3 |2 b  C
那么对于0x160f17e903,Slave devic传输一个什么样的PEC给主机。8 K) l5 R, S8 c0 {( {

' h* W4 \; L0 |问题是怎么计算这个PEC???
  E3 c" u$ l" S" q0 t请高手详细介绍一下啊!!1 z; }8 i# U- ~' ?/ ^4 `- b. C- u
------------------------------------------------------------------------------------------以上都是网上搜来的!
发表于 2009-3-6 20:12:54 | 显示全部楼层
SMBUS 的 PEC有两种, HW PEC和SW PEC,SW PEC是自己计算的,算法是CRC8,这里有一篇文章讨论
% e5 j* d/ F, u# @% _# ^* e2 G, G! T8 z! ]. b; c# {# h5 Q9 G
CRC-8 firmware implementations for SMBus; m0 u6 ]" a$ C# J
http://sbs-forum.org/marcom/dc2/ ... implementations.pdf0 @; |6 v: t  [# a- J2 J- \4 }" w
5 o9 d$ Z, d7 }- W2 N+ b+ L+ B
这里有CRC8的算法代码,稍微改一下就可以用了
& R' j" Q9 L6 Q, n+ t/ n& chttp://www.koders.com/cpp/fid9C5 ... 1D2C29EF.aspx?s=md5
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-4-19 23:42 , Processed in 0.131760 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表