0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CRC校验和STM32中CRC计算单元相关内容

5RJg_mcuworld 来源:工程师曾玲 2019-02-02 16:22 次阅读

从这一段时间后台反馈的问题可以看得出来,好些朋友对CRC没有什么概念,今天就在这里讲述一下关于CRC校验、STM32中CRC计算单元相关内容。

1关于CRC校验

CRC:Cyclic Redundancy Check,即循环冗余校验码。

CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。

循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

---来自百度百科

学电子、计算机相关专业的同学都应该学习过CRC的基础原理。其原理说难不难,可以说就是一个公式。同时,说简单也不简单,这个公式里面包含的内容不简单。

CRC校验和STM32中CRC计算单元相关内容

拿STM32参考手册中CRC计算单元来说,使用CRC-32(以太网)多项式: 0x4C11DB7

─ X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 + X8 + X7 + X4 + X2 + X +1

关于CRC基础原理的内容比较多,百度、谷歌一下可以看到很多关于CRC原理的内容,我这里就不再过多讲述。

参考维基百科循环冗余校验:

https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97

2

STM32中CRC计算单元

相信初学STM32的朋友都知道STM32中有个CRC计算单元,如果有不知道的去面壁思过(参考手册中目录一看就能看见CRC章节)。

但很多朋友都仅限知道有CRC计算单元这个东西,基本都没怎么进一步了解过。

STM32全系列产品都具有 CRC 外设(注意,是全系列都有), 对 CRC 的计算提供硬件支持,为应用程序节省了代码空间。

STM32的CRC(循环冗余校验)计算单元使用一个固定的多项式发生器从一个 32 位的数据字中产生 CRC 码。

在众多的应用中,基于 CRC 的技术还常用来验证数据传输或存储的完整性。

根据 EN/IEC60335-1 标准的规定,这些技术提供了验证 Flash 完整性的方法。 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

操作STM32的CRC比较简单,只有三个比较简单的寄存器,不管是使用寄存器,还是库函数,对于大部分人来说,没有多大难度。

看下标准库的部分函数源码:

CRC校验和STM32中CRC计算单元相关内容

3

CRC应用

我记得读书那个时候,想要把CRC搞明白好难啊,原因在于不知道学这个CRC到底有什么用途。

CRC用途其实非常广泛,我们最常见的就是在一些通信上,比如:Modbus:

CRC校验和STM32中CRC计算单元相关内容

再比如之前讲述的MAVLink通信协议:

CRC校验和STM32中CRC计算单元相关内容

CRC其主要目的就是验证数据的正确性。在CRC应用中,还有一个重要的作用:通过 CRC 校验对 FLASH 的完整性进行检查。

在对 FLASH 完整性检查的应用中,需要事先计算出整个 FLASH 的 CRC 校验值(不包括最后保存 CRC 值的字节),放在 FLASH 的末尾。在程序启动或者运行的过程中重新用同样的方法计算整个 FLASH 的 CRC 校验值,然后与保存在 FLASH 末尾的 CRC 值进行比较。

这个对Flash添加CRC校验主要目的:在远程升级程序可有效检查程序的完整性。

在IAR EWARM中有这么一个功能:Checksum。不知道大家使用过没,也是可以对Flash添加CRC的功能。看下图:

CRC校验和STM32中CRC计算单元相关内容

简单说,这里的配置可以对Flash进行CRC计算。关于这里内容比较多,足以单独写一篇文章了。可能后面会单独写一篇相关文章。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354094
  • crc
    crc
    +关注

    关注

    0

    文章

    199

    浏览量

    29411

原文标题:STM32中,CRC相关内容都理解透了吗?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何利用循环冗余校验CRC计算单元进行传输数据的校验

    循环冗余校验CRC计算单元是什么?如何利用循环冗余校验CRC
    发表于 12-15 06:04

    CRC应用指南

    CRC应用指南主要介绍如何使用硬件CRC 外设及CRC 原理相关内容
    发表于 10-25 07:03

    40位以内任意长度的CRC计算校验的实现

    论述了40位以内任意长度的CRC计算校验在TMS320C5000系列DSP的实现方法。运用该方法能实现任意信息长度的40位以内任意CRC
    发表于 05-05 20:31 1881次阅读
    40位以内任意长度的<b class='flag-5'>CRC</b><b class='flag-5'>计算</b>及<b class='flag-5'>校验</b>的实现

    crc校验基本原理

    内容介绍了crc校验基本原理,CRC几个基本概念,CRC码的生成步骤.CRC即循环冗余
    发表于 12-21 16:55 4683次阅读

    crc校验原理_怎样修复crc校验错误

    crc校验原理 利用CRC进行检错的过程可简单描述为:在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的r位监督码(CRC
    发表于 09-05 09:26 3.5w次阅读
    <b class='flag-5'>crc</b><b class='flag-5'>校验</b>原理_怎样修复<b class='flag-5'>crc</b><b class='flag-5'>校验</b>错误

    STM32L4循环冗余校验模块(CRC)介绍

    STM32L4循环冗余校验模块(CRC)介绍 有兴趣的可以参考下
    发表于 12-25 10:38 27次下载

    crc校验错误_crc校验错误怎么解决

    CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(
    发表于 12-05 15:34 4.7w次阅读
    <b class='flag-5'>crc</b><b class='flag-5'>校验</b>错误_<b class='flag-5'>crc</b><b class='flag-5'>校验</b>错误怎么解决

    CRC计算工具CRC校验计算器应用程序免费下载

    本文档的主要内容详细介绍的是CRC计算工具CRC校验计算器应用程序免费下载。
    发表于 07-01 08:00 134次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>计算</b>工具<b class='flag-5'>CRC</b><b class='flag-5'>校验</b>码<b class='flag-5'>计算</b>器应用程序免费下载

    CRC校验STM32CRC计算单元CRC应用

    CRC校验STM32CRC计算单元
    的头像 发表于 03-04 13:54 5977次阅读

    CRC校验码并行计算的FPGA实现

    用软件实现 CRC 校验计算很难满足高速数据通信的要求 ,基于硬件的实现方法 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它各种并行
    发表于 03-28 09:34 30次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>校验</b>码并行<b class='flag-5'>计算</b>的FPGA实现

    关于STM32F4xx的硬件CRC32校验

    采用硬件CRC32校验,于是成功入坑。STM32硬件CRC32校验的结果跟预期的值并不一致,参考了大神的方法,
    发表于 12-03 15:51 19次下载
    关于<b class='flag-5'>STM32</b>F4xx的硬件<b class='flag-5'>CRC</b>32<b class='flag-5'>校验</b>

    CRC校验原理及实现

    作者:王超首发:电子电路开发学习目录前言CRC算法简介CRC计算CRC校验CRC
    发表于 01-26 17:37 30次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>校验</b>原理及实现

    CRC校验计算过程

    据说刚过去的高考数学很难,小编当年上学时挺喜欢数学的,最近特意复习了一下CRC校验计算过程。
    的头像 发表于 07-15 11:06 1.2w次阅读

    CRC循环冗余校验简介

    CRC 是Cyclic Redundancy Check的缩写,循环冗余校验,用于校验数据传输的完整性。一般情况下在数据发送前计算CRC
    的头像 发表于 04-24 13:04 6648次阅读
    <b class='flag-5'>CRC</b>循环冗余<b class='flag-5'>校验</b>简介

    工控常用LRC XOR累加和CRC校验工具校验码自动生成软件多计算方式

    CRC校验工具 校验码自动生成软件支持十几种CRC计算方式,包括MODBUS协议的CRC-16
    的头像 发表于 11-25 14:27 3292次阅读
    工控常用LRC XOR累加和<b class='flag-5'>CRC</b><b class='flag-5'>校验</b>工具<b class='flag-5'>校验</b>码自动生成软件多<b class='flag-5'>计算</b>方式