赞
踩
CRC(cyclic redundancy checksum):循环冗余校验和。常见的校验方法:奇偶校验、因特网校验和循环冗余校验。
对于CRC校准除数,一般使用多项式(或二项式)公式表示,如下图中,除数11011(poly值为0X1B)的二项式为G(X)= X4 + X3 + X + 1
多项式的收尾必定为1,而这个1的位置在下一步计算一定为0,所以就把前面这个1给省略掉了,称为简记式。
例如上例中除数11011的简记式为1011
数据宽度指:CRC校验码的长度,比CRC除数位数少1,与简记式长度一致。
CRC可以任意定义二项式、数据长度等,这里列出一些国际常用的模型表
0^0 = 0
0^1 = 1
1^1 = 0
1^0 = 1
异或运算存在几个规律
0^x = x 即0 异或任何数等于任何数
1^x = ~x 即1异或任何数等于任何数取反
x^x = 0 即任何数与自己异或,结果为0
a ^ b = b ^ a 交换律
a ^ (b ^ c) = (a ^ b) ^c 结合律
0+0 = 0
0+1 = 1
1+1 = 0
1+0 = 1
0-0 = 0
0-1 = 1
1-1 = 0
1-0 = 1
CRC原理:在K位信息码(目标发送数据)后再拼接R位校验码,使整个编码长度为N位,因此也叫(N,K)码。具体做法如下:
注意:
1.发送端和接收端约定好一个除数,即CRC多项式
对于数据1110 0101(0xE5),以指定除数11011(CRC-5标准)求它的CRC校验码,其过程如下:
STM32中选择CRC polynominal 实际上就是在确认CRC标准的二项式:X0+X1+X2 就是111(第0位,第1位,第2位是1,对应数值=7)
查看STM32F4数据手册,可以看到SPI CRC calculation过程如下
STM32CubeMX设置polynominal多项式的值=7,就是这个寄存器的默认值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。