打印
[信息]

【实战经验】如何在IAR中配置CRC参数

[复制链接]
4856|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 香水城 于 2017-8-17 14:40 编辑

【实战经验】如何在IAR中配置CRC参数
前言
STM32全系列产品都具有CRC外设,对CRC的计算提供硬件支持,为应用程序节省了代码空间。CRC校验值可以用于数据传输中的数据正确性的验证,也可用于数据存储时的完整性检查。在IEC60335中,也接受通过CRC校验对FLASH的完整性进行检查。在对FLASH完整性检查的应用中,需要事先计算出整个FLASH的CRC校验值(不包括最后保存CRC值的字节),放在FLASH的末尾。在程序启动或者运行的过程中重新用同样的方法计算整个FLASH的CRC校验值,然后与保存在FLASH末尾的CRC值进行比较。
EWARM从v5.5版本之后开始支持STM32芯片的CRC计算。前面所说的计算整个FLASH的CRC校验值并保存在FLASH末尾的过程,可以在IAR中完成。通过配置EWARM的CRC计算参数,自动对整个FLASH空间进行CRC计算,并将计算结果放到FLASH的末尾。本文中将介绍的就是如何配置IAR的CRC参数,使之与STM32的CRC硬件模块保持一致。本文中的例子都基于STM32F072进行。

STM32的CRC外设
CRC校验值的计算采用多项式除法,可以通过除数和被除数进行异或运算实现。这种方法非常适合通过硬件电路来实现。
使用STM32CRC外设时,你要考虑的内容包括:采用哪个CRC生成多项式,输入数据(要进行校验的数据)和初始值。

1.生成多项式
默认使用CRC32多项式:0x4C11DB7

部分芯片支持可编程的多项式,比如STM32F3,STM32F0,STM32L0

2.初始值
STM32的CRC初始值默认为0xFFFFFFFF,STM32F3,STM32F0,STM32L0系列可以修改初始值


3.输入/输出数据的反转
STM32F3,STM32F0,STM32L0系列还提供了对输入/输出数据进行反转的功能。
默认不对输入数据和输出数据进行位反转
 对输入数据的位反转操作可以设置为按字节/半字 /字为单元进行操作。例如输入数据为0x1A2B3C4D,
      o 每个字节内逐位反转,结果是0x58D43CB2
      o 每半字内逐位反转,结果是0xD458B23C
      o 每个字长内逐位反转,结果是0xB23CD458
 对输出数据的位反转。
      o 例如输出数据为0x11223344,反转后为0x22CC4488

IAR的CRC配置

1.修改Link文件
指定checksum在FLASH中的存储位置,在Link文件中增加下面语句。
该语句指定将CRC的值放在FLASH的末尾位置。是整个FLASH空间的末尾,不是应用程序的代码末尾。这样,CRC值的位置就是固定的。不会随代码大小而变化。

2.配置Checksum页面的参数
IAR Checksum页说明(v6.4及以上)
IAR的checksum页面分为两个部分。
第一部分,也就是红线圈出的部分。定义了FLASH中需要计算CRC的范围和空闲字节填充值。
剩下的部分,就是对checksum计算参数的设定部分。
     Checksum size :选择checksum的大小(字节数)
     Alignment:指定checksum的对齐方式。不填的话默认2字节对齐。
     Algorithm:选择checksum的算法
     Complement:是否需要进行补码计算。选择“As is”就是不进行补码计算。
     Bit order:位输出的顺序。MSB first,每个字节的高位在前。LSB first,每个字节的低位在前。
     Reverse byte order within word: 对于输入数据,在一个字内反转各个字节的顺序。
     Initial value: checksum计算的初始化值
     Checksum unit size :选择进行迭代的单元大小,按8-bit,16-bit还是32-bit进行迭代。

3.STM32 CRC外设使用默认配置时IAR的配置
STM32CRC外设的配置:
    POLY= 0x4C11DB7(CRC32)
    Initial_Crc = 0Xffffffff
    输入/输出数据不反转
    输入数据:0x08000000~0x0801FFFB。(最后4个字节用来放计算出的CRC值)

在实验的过程发现, ”Alignment ”似乎对计算出的CRC值没有影响。但“Reverse byte order within word ”与“Checksum unit size ”这两项的配置有一定关系。如果后者选择32-bit,则不能勾选前者;反之如果后者选择8-bit,则一定要勾选上“ Reverse byte order within word ”。
也就是说,对checksum页面参数的配置也可以参考下面这张图:


更多实战经验请看【ST MCU实战经验汇总贴】



沙发
捉虫天师| | 2015-6-29 18:51 | 只看该作者
如果没有CRC验证是不是就会影响系统的性能呢。

使用特权

评论回复
板凳
捉虫天师| | 2015-6-29 19:00 | 只看该作者
内容太精彩了,果断下载收藏了学习,

使用特权

评论回复
地板
米尔豪斯| | 2015-6-29 19:03 | 只看该作者
CRC校验用于数据传输中的数据正确性的验证,是比较重要的,谢谢

使用特权

评论回复
5
天灵灵地灵灵| | 2015-6-29 19:35 | 只看该作者
在数据传输中如果没有CRC,会出很多错误。

使用特权

评论回复
6
wjf202| | 2016-9-2 10:43 | 只看该作者
太精彩了 正需求

使用特权

评论回复
7
lanjackg2003| | 2016-9-2 11:15 | 只看该作者
收藏

使用特权

评论回复
8
xiaofei558008| | 2019-3-4 17:24 | 只看该作者
非常棒!!

使用特权

评论回复
9
xiaofei558008| | 2019-3-4 17:24 | 只看该作者
非常棒!!

使用特权

评论回复
10
643757107| | 2019-3-4 21:57 | 只看该作者
学习学习

使用特权

评论回复
11
xiaolinfa1987| | 2019-3-22 12:17 | 只看该作者
keil里有对应的CRC配置工具吗?
找了半天没找到

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:STM32技术专家

596

主题

17106

帖子

287

粉丝