- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CRC介绍
CRC 检验的基本思想是利用线性编码理论,在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个检验码r位(就是CRC码),附在信息后面,构成一个新的二进制码序列数共(k+r)位,最后发送出去。接收端根据同样的规则校验,以确定传送中是否出错。接收端有两种处理方式:
1、计算k位序列的CRC码,与接收到的CRC比较,一致则接收正确。
2、计算整个k+r 位的CRC码,若为0,则接收正确。
一般数据量不大时,使用Checksume验错方式就行了;数据量大时,就用CRC了;据理论统计,用CRC16时,超过17个连续位的错误侦测率为99。9969%,小于此的为100%。CRC算法一般作为冗余校验之用,由于它的可逆性的不完整,导致了正规的CRC算法不能称之为CRC密码。CRC之精华由初值、权、方向及位数组成,对其输入(明文)做CRC正运算得到输出的结果(密文)。即:密文=CRC正运算(初值,权,方向,位数,明文);反之,对其输出(密文)做CRC逆运算得到CRC的结果(明文)。即:明文=CRC逆运算(初值,权,方向,位数,密文);但要想实现CRC的可逆运算,必须满足:CRC右移时,CRC权的最高位为1. CRC左移时,CRC权的最低位为1但是传统的CRC算法是:本次的CRC初值是上次CRC运算的结果即密文。这是CRC算法不能成为CRC密码的最大败笔所在!!!关于CRC算法,知其然,如果再知其所以然,事情就会清楚了。CRC算法,最重要的参数当然是生成多项式(CRC?Polynomial),但(余数)初值和CRC数据最高位的位置也是很重要的两个参数,而这两个参数需要根据具体情况具体分析的。初值一般是全0或者全1,CRC数据最高位一般在最低字节的最低位或者最高位。??CRC算法,作为一种检错算法,它的着眼点是出错概率高地方的错误,这在一定程度上决定了后两个参数。下面举例来说明。1.串口通信在通信电缆的出错概率高,而串口数据是从LSb先发送,所以比较合理的做法是?CRC数据最高位是第1个被发送字节的最低位。如果发送的数据是123-0x31?0x32?0x33,那么输入的CRC数据是?1000?1100?0100?1100?1100?1100。另外,串口的缺省数据一般是1,那么比较合理的(余数)初值就是全1。2.SPI(和I2C)通信在串行通信的出错概率高,而SPI数据(8位)一般是从MSb先发送,所以比较合理的做法是?CRC数据最高位是第1个被发送字节的最高位。如果发送的数据是123-0x31?0x32?0x33,那么输入的CRC数据是?0011?0001?0011?0010?0011?0011。另外,SPI的没有缺省数据,那么(余数)初值设置为全0或者全1都可以。3.存储介质是FLASH(包括NAND、NOR、SPI?FLASH),由于缺省数据(在擦除后)是全1,比较合理的(余数)初值就是全1。4.存储介质是硬盘,由于缺省数据(买来时)是全0,比较合理的(余数)初值就是全0。问:SPI?FLASH,比较合理的参数是什么?答:如上所述,比较合理的(余数)初值是全1。比较合理的做法是?CRC数据最高位是第1个字节的最高位;如果SPI数据(8位)是从LSb先发送,比较合理的做法是?CRC数据最高位是第1个字节的最低位。??对于STM32的32位CRC,如果假定它的一个主要目的是为了校验往内部FLASH存储数据的可靠性,那么(余数)初值是全1当然是比较合理的。由于STM32的32位CRC是纯32位,即每次必须输入32位的数,所以如果数据不到32位,应该往低位用1来填充比较合理;另外,如果输入数据是1234-0x31?0x32?0x33?0x34,那么输入的CRC数据是?0011?0100?0011?0011?0011?0010?0011?0001,由于STM32的32位CRC是纯32位且STM32是按小端对齐(little?endian)的,这也是合理CRC循环冗余校验具有比奇偶校验强得多的检错能力。可以证明:它可以检测出所有的单个位错、几乎所有的双个位错、低于P(X)对应二进制校验列位数的所有连续位错、大于或等于P(X)对应二进制校验列位数的绝大多数连续位错。 ? 但是,当传输中发生的错误多项式E(X)能被校验多项式P(X)对二取模整除时,它就不可能被P(X)探测出来,例如当E(X)=P(X)时。 ? ? 对数据信号祯传输过程中的位错进行修正的方法主要有两种: ? ? ? 由发送器提供错误修正码,然后由接收器自己修正错误; ? ? ? ? 在接收器发现接收到的错误祯中有位错误时,通知发送器重新发送数据信号祯。 ? ? ? ? 前一种方法中的错误修正码需要发送器由被传
文档评论(0)