嵌入式项目中软硬件CRC计算,及CRC校验的应用
关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
1关于CRC校验
CRC:Cyclic Redundancy Check,即循环冗余校验码。
─ X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X4 + X2 + X +1
参考维基百科循环冗余校验:
https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97
2STM32中CRC计算单元
相信初学STM32的朋友都知道STM32中有个CRC计算单元,如果有不知道的去面壁思过(参考手册中目录一看就能看见CRC章节)。
CRC 主要特性
使用 CRC-32 (以太网)多项式:0x4C11DB7
— X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1
单输入/输出 32 位数据寄存器
CRC 计算在 4 个 AHB 时钟周期 (HCLK) 内完成
8 位通用寄存器 (可用于临时存储)
---来自STM32参考手册
输入/输出数据的反转
STM32默认不对输入数据和输出数据进行位反转。
1.对输入数据的位反转操作可以设置为按字节/半字 /字为单元进行操作。例如输入数据为 0x1A2B3C4D,
每个字节内逐位反转,结果是 0x58D43CB2
每半字内逐位反转,结果是 0xD458B23C
每个字长内逐位反转,结果是 0xB23CD458
2.对输出数据的位反转
例如输出数据为 0x11223344,反转后为 0x22CC4488
看下标准库的部分函数源码:
3CRC应用
我记得读书那个时候,想要把CRC搞明白好难啊,原因在于不知道学这个CRC到底有什么用途。
再比如之前讲述的MAVLink通信协议:
其实之前给大家过一篇文章:如何在 IAR和 KEIL中计算 CRC值。
简单来说,这里的配置可以对Flash进行CRC计算,关于这里内容比较多,足以单独写一篇文章了,感兴趣的读者可以深入了解一下。
后台回复『软件算法』『嵌入式软件基础知识』阅读更多相关文章。
点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。