STM32 SPI CRC polynominal = 7 含义

STM32 SPI CRC polynominal = 7 含义

  • 1. CRC校验
    • 1.1 多项式公式
    • 1.2 多项式简记式
    • 1.3 数据宽度
    • 1.4 初始值与结果异或值
    • 1.5 输入值反转与输出值反转
  • 2. 常见的CRC算法
  • 3. CRC校验算法前置知识
    • 3.1 异或
    • 3.2 模2加法
    • 3.3 模2减法
    • 3.4 模2除法
  • 4. CRC原理
  • 5. 计算示例
  • 6. STM32 SPI 中的CRC校验
    • 参考

1. CRC校验

CRC(cyclic redundancy checksum):循环冗余校验和。常见的校验方法:奇偶校验、因特网校验和循环冗余校验。
在这里插入图片描述

1.1 多项式公式

对于CRC校准除数,一般使用多项式(或二项式)公式表示,如下图中,除数11011(poly值为0X1B)的二项式为G(X)= X4 + X3 + X + 1

  • X代表该bit位上的数据为1
  • 除数的位数为二项式最高次幂+1(4+1=5)
    在这里插入图片描述

1.2 多项式简记式

多项式的收尾必定为1,而这个1的位置在下一步计算一定为0,所以就把前面这个1给省略掉了,称为简记式。
例如上例中除数11011的简记式为1011

1.3 数据宽度

数据宽度指:CRC校验码的长度,比CRC除数位数少1,与简记式长度一致。

1.4 初始值与结果异或值

  • 一些标准中规定了初始值:先把要计算的数据与初始值的最低字节进行异或,然后再与多项式进行计算
  • 结果异或值不为零时:将计算得到的CRC结果值再与结果异或值进行一次异或计算,得到最终值,这才是我们需要的CRC校验码
  • 初始值与结果值的位数 = 数据宽度

1.5 输入值反转与输出值反转

  • 输入值反转:计算之前先将二项式反转,然后再用得到的新值和数据进行计算
    • G(x) = X16 + X15 + X2 + 1(16#18005),其正向值为1 1000 0000 0000 0101,反值则为1010 0000 0000 0001 1
  • 输出值反转:将最终得到的CRC结果反转
  • 一般输入值和输出值是同向的:输入值反转,则输出值也是反转的

2. 常见的CRC算法

CRC可以任意定义二项式、数据长度等,这里列出一些国际常用的模型表
在这里插入图片描述

3. CRC校验算法前置知识

3.1 异或

  • 异或:两个数不同则为1,相同则为0
  • 运算符:^
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)码。具体做法如下:

  • 选定一个标准除数(K位二进制数据串)
  • 在要发送的数据(m位)后面加上K-1位0,然后将这个新数(M+K-1位),以模2除法的方式除以上面这个标准除数,所得到的余数也就是该数据的CRC校验码。(余数必须比除数少且只少一位,不够就补0)
  • 将这个校验码附在原m位数据后面,构成新的M+K-1位数据,发送给接收端
  • 接收端将接收到的数据除以标准除数,如果余数为0则认为数据正确

注意:
1.发送端和接收端约定好一个除数,即CRC多项式

5. 计算示例

对于数据1110 0101(0xE5),以指定除数11011(CRC-5标准)求它的CRC校验码,其过程如下:

  • 目标发送数据:1110 0101(16位), 0xE5
  • 标准除数: 11011 (5位)
  • 目标发送数据 + (标准除数 - 1)位0: 1110 0101 0000
  • 模2除法方式除以11011,商10101100,余数0100
  • CRC校验码:0100
    在这里插入图片描述
  • 将将这个校验码附在原数据后面:1110 0101 0100
    在这里插入图片描述

6. STM32 SPI 中的CRC校验

STM32中选择CRC polynominal 实际上就是在确认CRC标准的二项式:X0+X1+X2 就是111(第0位,第1位,第2位是1,对应数值=7)
在这里插入图片描述查看STM32F4数据手册,可以看到SPI CRC calculation过程如下
在这里插入图片描述
STM32CubeMX设置polynominal多项式的值=7,就是这个寄存器的默认值
在这里插入图片描述

参考

  1. CRC校验码详解、常见算法实现及代码实例
  2. CRC校验计算网站:www.ip33.com
  3. STM32CubeMX工具配置SPI的CRC时数字和表达式转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++常用技巧与算法总结(简洁)

前言警告: 1、注意数据的边界,数组不能越界! 2、 时间复杂度 3、开long long 4、注意输出的四舍五入 printf("%d %.0f\n",k,sum*1.0/k);//double类型输出会自动四舍五入; 5、让Dev C支持C11 先在dev的【工具】里找…

SpringMVC中拦截所有请求后,<mvc:resources/>不起作用

报错显示 出现这种问题的前提是&#xff0c;用DispatcherServlet将所有的请求拦截&#xff0c;然后导致静态资源无法访问。 拦截代码如下&#xff0c;配置卸载web.xml文件中。 <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class&…

Apache SeaTunnel 社区 3 月月报

各位热爱 SeaTunnel 的小伙伴们&#xff0c;SeaTunnel 社区 3 月月报来啦&#xff01;这里将记录 SeaTunnel 社区每个月的重要更新&#xff0c;并评选出月度之星&#xff0c;欢迎关注。 SeaTunnel 月度 Merge Stars 感谢以下小伙伴 3 月为 Apache SeaTunnel 做的精彩贡献&…

libVLC 提取视频帧使用QWidget渲染

在前面的文章中&#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据&#xff0c;将数据渲染到QWidget上&#xff0c;该如何操作呢&a…

使用Android Studio制作一个蓝牙软件 ---(一)

一、创建项目&#xff08;项目名称---BluetoothActivity&#xff09; 二、创建HomeActivity页面 1.点击一个文件夹 --- 鼠标右击 --- 新建 --- Acyivity --- Empty Views Activity 三、创建styles.xml 点击 values文件夹 --- 鼠标右击 --- 新建 --- Values Resource File sty…

IJKPLAYER源码分析-iOS端显示

1 简介 1.1 EAGL(Embedded Apple Graphics Library) 与Android系统使用EGL连接OpenGL ES与原生窗口进行surface输出类似&#xff0c;iOS则用EAGL将CAEAGLLayer作为OpenGL ES输出目标。 与 Android EGL 不同的是&#xff0c;iOS EAGL 不会让应用直接向 BackendFrameBuffer 和 F…

AJAX 入门到实战 第1天 2024 笔记

1.1-AJAX入门与axios使用 1.2-认识URL 1.3-查询参数 1.4-案例_地区查询 <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*获取地区列表: http://hmajax.itheima.net/api/area查询参数:pname: 省份或直辖市…

2024年认证杯A题保暖纤维的保暖能力完整思路代码论文讲解与分析

保暖纤维的保暖能力建模 摘要 本文针对保暖纤维的保暖能力建模问题进行了深入研究。首先,文章指出现有的一些保暖性能指标,如热导率、热阻值、CLO值等,存在一些局限性,无法全面反映保暖材料的实际保暖性能。因此,本文提出了建立一个更加完善的保暖能力评价指标体系,包括热传导…

文献学习-33-一个用于生成手术视频摘要的python库

VideoSum: A Python Library for Surgical Video Summarization Authors: Luis C. Garcia-Peraza-Herrera, Sebastien Ourselin, and Tom Vercauteren Source: https://arxiv.org/pdf/2303.10173.pdf 这篇文章主要关注的是如何通过视频摘要来简化和可视化手术视频&#xff0c…

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中&#xff0c;每部署一个服务时&#xff0c;就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…

Spring Boot 学习(3)——Spring Initializr 创建项目问题解决

产生问题的原因&#xff0c;各种的版本都较老&#xff0c;所以导致出现问题。目前暂未打到合适的教程&#xff0c;按老教程学起来先。 小白瞎学&#xff0c;大神勿喷&#xff01; 再次强调环境&#xff1a;maven 3.3.9、jdk 1.8、idea 2017、Spring 4.3.13、Spring Boot 1.5.…

机器学习 -- 端到端的机器学习项目

场景 我们将一个端到端的项目&#xff08;一个从开始到结束包含了所有必要步骤和组件的完整项目&#xff09;案例&#xff0c;步骤大概有&#xff1a; 1.观察大局。 2.获得数据。 3.从数据探索和可视化中获得洞见。 4.机器学习算法的数据准备。 5.选择和训练模型。 6.微调模型…