STM32 SPI CRC Polynomial = 7 的含义解析
STM32 SPI CRC polynominal = 7 含义
1. CRC校验
CRC(cyclic redundancy checksum):循环冗余校验和。常见的校验方法:奇偶校验、因特网校验和循环冗余校验。
1.1 多项式公式
对于CRC校准除数,一般使用多项式(或二项式)公式表示,如下图中,除数11011(poly值为0X1B)的二项式为G(X)= X4 + X3 + X + 1

1.2 多项式简记式
多项式的收尾必定为1,而这个1的位置在下一步计算一定为0,所以就把前面这个1给省略掉了,称为简记式。
例如上例中除数11011的简记式为1011
1.3 数据宽度
数据宽度指:CRC校验码的长度,比CRC除数位数少1,与简记式长度一致。
1.4 初始值与结果异或值
1.5 输入值反转与输出值反转
2. 常见的CRC算法
CRC可以任意定义二项式、数据长度等,这里列出一些国际常用的模型表
3. CRC校验算法前置知识
3.1 异或
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 结合律
3.2 模2加法
0+0 = 0
0+1 = 1
1+1 = 0
1+0 = 1
3.3 模2减法
0-0 = 0
0-1 = 1
1-1 = 0
1-0 = 1
3.4 模2除法
4. CRC原理
CRC原理:在K位信息码(目标发送数据)后再拼接R位校验码,使整个编码长度为N位,因此也叫(N,K)码。具体做法如下:
注意:
1.发送端和接收端约定好一个除数,即CRC多项式
5. 计算示例
对于数据1110 0101(0xE5),以指定除数11011(CRC-5标准)求它的CRC校验码,其过程如下:


6. STM32 SPI 中的CRC校验
STM32中选择CRC polynominal 实际上就是在确认CRC标准的二项式:X0+X1+X2 就是111(第0位,第1位,第2位是1,对应数值=7)
查看STM32F4数据手册,可以看到SPI CRC calculation过程如下
STM32CubeMX设置polynominal多项式的值=7,就是这个寄存器的默认值
参考
- CRC校验码详解、常见算法实现及代码实例
- CRC校验计算网站:www.ip33.com
- STM32CubeMX工具配置SPI的CRC时数字和表达式转换
作者:BobBobBao