- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CRC16总结精要
各种HDLC间的区别之一是帧校验序列的CRC算法不同,这种不同表现在几个方面:a. 帧校验序列的位数不同,如16位和32位等。b. CRC生成多项式不同,如对于16位的CRC,CCITT V.41标准的多项式是x16 + x12 + x5 + 1,ANSI CRC-16标准的多项式是x16 + x15 + x2 + 1等。c. CRC序列的初始化条件不同,如可以初始化为全0、全1等。d. CRC计算结果的处理方式不同,如可以直接把CRC结果发送,或对CRC结果取反后再发送等。e. 对接收到的数据做CRC校验时,合格判据不同。因为有了上述的不同处理,自然会得到不同的结果,由此造成合格判据不同。例如有的标准以校验结果1D0F判为无错误[2]。而有的ASIC芯片以校验结果F0B8判为无错误[3]。?显然,对于这些应用,可编程逻辑芯片正可以发挥自己的特长。
?
constantine:HDLC采用x16 + x12 + x5 + 1这个多项式。
CRC32太大了,CRC8觉得强度不够,折中选择CRC16校验.
??? 线性编码理论。在发送端传送的K位二进制数据,以一定规则产生一个校验监督码(或者叫监督矩阵)r位,并负载信息后,构成一个新的二进制码序列共(K+R)位。最后发送出去。在接收端根据信息吗和CRC码禁言,是否出错。
? CRC16监督式(美国标准):G(X)=X^16+X^15+X2+1
?CRC16监督式(欧洲标准):G(X)=X16+X12+X5+1
一般多数采用CCITT推荐的欧标格式:10001000000100001?
16位的CRC码产生的规则是先把要发送的信息元左移16位(乘以2^16),再除以监督式,最后得到的是CRC码。再把CRC码附在信息元后面,一起发送出去。
??? B(X).2^16/G(X)=Q(X)+R(X)/G(X)
? Q(X)是商,R(X)是余数。模2加减法就是不带进位借位的加减法相当异或,乘除法和普通数学乘除法一致。例如:
?? 信息码:1011,监督元:G(X)X^8+X^5+X^4+1?? CRC8校验? 下面是除法运算:
?1011 0000 0000
1001 1000 1
??? 10 1000 1000
??? 10 0110 001
????????所以CRC 8 监督元发送的K+r位码:1011接收端接收到的信息码除以监督元,如果R(X)为0,说明传输无误。
?假设接收到跟发送一致。验证
?1011 1110 1010
1001 1000 1
??? 10 0110 0010
??? 10 0110 001
????????????????????? 0
所以接收正确无误
实际通信中发送数据是多字节,比如发送地址、控制、信息、校验。所以必须按多字节去计算CRC码。
B(X)=Bn(X)*2^8n+Bn-1(X)*2^8(n-1)+....+B1(X)*2^8+B0(X)
CRC16时候,上式两端还要乘以2^16,即左移16位。把繁琐的计算过程省略,其实只要记住本 字节的CRC码等于上一字节的余式的CRC码的低 8位左移8位后,再加上上一字节CRC右移8位(也就是取高8位)和本字节之和(异或)所求的的CRC码 。 但是我们不可能这样每部就去计算,单片机是承受不了的,而且占据大量任务,给实时通信打折扣。所以一般我们会把8位二进制序列数从0~255的CRC全部计算出来,放在表里,扔到EEPROM或者 FLASH中固存。
unsigned int crc_table [256]={?????????????? /* CRC 余式表 */??? 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,??? 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,??? 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,??? 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,??? 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,??? 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,??? 0x3653, 0x2672, 0x1611, 0x0630, 0x
文档评论(0)