
前言 市面上越来越多的产品对其使用提出了安全要求,如何避免使用过程中对操作者带来危险,或者降低这种危险发生的概率,这都是产品安全性需要考虑的。鉴于此,相关产品需要通过相关行业的安全认证才能生产上市。针对 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 算法是否一致。 如何添加 CRC 值 下面我们主要介绍如何添加 CRC 校验值到可执行文件。 基于 IAR 环境 如果你使用 IAR IDE,那么添加 CRC 值的配置相对比较简单。通过配置 IAR 的 CRC 计算参数,自动对整个 FLASH 空间进 行 CRC 计算,并将计算结果放到 FLASH 的末尾。 1. 修改 Link 文件,指定 CRC 值的存放位置 在 Link 文件中增加下面语句,指定 checksum 在 FLASH 中的存储位置。
在自检代码中,可以通过__checksum 读取 Flash 中保存的 CRC 校验值来与重新计算的 CRC 值进行比较。 2.配置 Checksum 页面的参数 在 link 文件中指定了 checksum 的存储位置后,还要在工程配置菜单中,配置计算 CRC 值的范围和参数。见下图: ![]() IAR 的 checksum 页面分为两个部分。 完整版请查看:附件 |
How to calculate CRC value in IAR and KEIL.pdf
下载834.48 KB, 下载次数: 1
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南