前言

市面上越来越多的产品对其使用提出了安全要求,如何避免使用过程中对操作者带来危险,或者降低这种危险发生的概率,

这都是产品安全性需要考虑的。鉴于此,相关产品需要通过相关行业的安全认证才能生产上市。针对CLASSB以及SIL认

证,ST分别提供了对应的软件库以及应用手册来帮助客户开发有安全认证需求的产品。

我们在支持客户的过程中,发现客户经常在Flash校验这一块碰到问题。这里整理了遇到的常见问题,并基于IAR,KEIL这

两种IDE介绍如何配置FLASH的CRC计算的方法。

Flash自检的流程

Flash的自检一般分为启动时自检和程序运行时自检两个阶段。不管是哪种自检,其思路都是:

在程序编译完成后,计算整个程序的CRC值,然后将这个CRC值添加到可执行文件末尾。再将带有CRC校验值的可执行文

件烧录到MCU中。在程序启动后,由程序中的自检代码重新再根据当前Flash内容(不包括预存的CRC校验值)计算一次

CRC值,再与之前预先计算并烧录到Flash中的CRC校验值进行比较,如果一致就通过检测。

这两个自检阶段的区别就是:

程序启动自检是一次性对整个实际Flash代码范围计算出最终的CRC值;而运行时的自检,为了不影响其他程序模块的运

行,计算CRC的过程是分步进行的,每次计算一部分,分多次计算出最终的CRC值。

围绕Flash的自检所发生的问题可以归为两大类,一类是预先计算CRC值时和上电后计算CRC值的Flash范围设置是否一

致;第二类就是预先计算CRC时和上电后计算CRC采用的CRC算法是否一致。

总结

本文介绍了基于IAR及ARM KEIL中如何添加CRC校验值的过程。在X-CUBE-CLASSB软件包中,也都可以找到对应的例

程。如果在调试中,遇到FLASH CRC校验出错,也不用急。可以从计算CRC值的范围设置是否一致和采用的CRC算法是

否一致这两个方面去找原因。一定要调试看看代码实际执行的情况,比如要测试的地址范围和实际代码执行时计算的地址范

围是否一样,防止因为coding错误造成检测不通过。


中间过程,具体见pdf文档。

欢迎下载讨论。 How_to_calculate_CRC_value_in_IAR_and_KEIL.pdf (834.48 KB, 下载次数: 4)

全部回复 3
  • 1044 主题
  • 4601 帖子
  • 20052 积分
身份:LV8 高级工程师
E币:5289
讲的很通俗易懂
是一个很好的资源






欢迎点击


论坛> >机器人/工业电子> >工业电子与自动化


https://mbb.eet-china.com/forum/topic/85437_1_1.html

  • 98 主题
  • 328 帖子
  • 1576 积分
身份:LV4 高级技术员
E币:1882
  • 286 主题
  • 1004 帖子
  • 3743 积分
身份:LV5 资深技术员
E币:9161
回复楼主
您需要登录后才可以评论 登录 立即注册