新闻详情

新闻详情

首页 / 资讯中心 / 详情

STM32对函数进行CRC校验

发布时间:2026/10/2 6:57:31来源:尧图网络
STM32对函数进行CRC校验
STM32F4xx 内置了硬件CRC 计算单元CRC-32 以太网多项式 0x4C11DB7可在运行期快速计算软件签名与链接时生成并存放在指定存储单元的参考签名比较用于验证 Flash 完整性。其计算方法为复位 CRC 模块置 CRC_CR0x01余数初始化为 0xFFFFFFFF把数据按 32 位写入 CRC_DR最后读回结果。方案一上电时对整个 Flash 区域做 CRC32 校验最常用第 1 步在程序 Flash 中预留 CRC 参考值存储区把应用区起始地址、大小、CRC 参考值地址定义好。CRC 参考值通常由编译后处理工具在烧录时写入。#define FLASH_APP_START_ADDR 0x08002000U /* 应用程序起始地址 */ #define FLASH_APP_SIZE 0x0003C000U /* 应用程序大小 */ #define FLASH_CRC_REF_ADDR 0x0803E000U /* CRC 参考值存储地址 */第 2 步——用软件/硬件 CRC 计算 Flash 内容// 硬件 CRC 方式利用 STM32F4 内置 CRC 外设 uint32_t calculate_flash_crc(uint32_t *addr, uint32_t len_words) { uint32_t crc; // 复位 CRC 单元 CRC-CR CRC_CR_RESET; for (uint32_t i 0; i len_words; i) { CRC-DR addr[i]; } crc CRC-DR; return crc; }或软件 CRC32不依赖外设便于 bootloader 使用uint32_t calculate_crc32(uint32_t *data, uint32_t length) { uint32_t crc 0xFFFFFFFF; for (uint32_t i 0; i length; i) { crc ^ data[i]; for (int j 0; j 32; j) { crc (crc 0x80000000) ? (crc 1) ^ 0x04C11DB7 : crc 1; } } return crc; }第 3 步——上电校验并在跳转主应用前执行void verify_flash_integrity(void) { uint32_t stored_crc *(volatile uint32_t *)FLASH_CRC_REF_ADDR; uint32_t calc_crc calculate_crc32((uint32_t *)FLASH_APP_START_ADDR, FLASH_APP_SIZE / 4); if (calc_crc ! stored_crc) { // CRC 不匹配Flash 可能被位翻转/破坏进入安全状态 error_handler(); } // 校验通过正常跳转主应用 jump_to_app(); }校验函数必须在跳转到主应用之前调用一旦校验失败就停止启动并进入安全状态。去除未使用的函数、保证整个 Flash 区域计算结果与参考值一致是方案要点。方案二只校验关键函数针对性保护单粒子翻转通常是小概率、随机的对全部 Flash 做完整校验耗时较长。可以只对关键函数如安全关断、中断处理所在段做 CRC 保护配合上文的__attribute__((section))分段机制把关键函数放入单独段如.func_crc用链接脚本的__START__/__END__符号标记该段起止地址用同段内 CRC 与该段的参考值比对。关键函数定位到固定段 → extern uint32_t __func_crc_start, __func_crc_end; uint32_t len_words (uint32_t)__func_crc_end - (uint32_t)__func_crc_start; crc calculate_crc32((uint32_t*)__func_crc_start, len_words);方案三运行时周期自检持续防护单粒子翻转可能在上电后的运行中发生因此周期性由定时器触发对运行代码区重新计算 CRC比对是更完整的防护。注意自检期间避免同时执行被校验区代码或选用短小的临界区段校验本身使用的函数应放在 CRC 保护区之外避免以被篡改的代码验证被篡改的代码翻转本质是位翻转检测检测到后应转入安全状态停机、进入安全模式、复位因为多数场合无法在运行中纠正 Flash 内容需要重新烧写/从备份区恢复。关键注意事项汇总参考值需与内容严格一致CRC 参考值必须是在链接后基于最终烧录内容的计算结果否则无法匹配——一般由编译后脚本如 srec_cat、Python 脚本在生成 bin 后计算并追加到预留地址。硬件 CRC 速度优势STM32F4 硬件 CRC 每 4 个 AHB 周期完成一次 32 位输入计算远快于软件实现适合运行期自检。KEEP/满引用函数固定分段函数若未被调用需__attribute__((used))或KEEP保留否则链接器会剔除导致地址/CRC 不匹配。覆盖范围CRC 校验应覆盖.text .rodata .data 初始值等程序区以及关键配置数据避免遗漏。无法自修复SEU 翻转基本是破坏性的可擦除 Flash 但难以原位纠错所以工程上通常是检测并进入安全态配合备份机制双分区 A/B、从备份区恢复提升可靠性。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Skills Manager:统一管理54款AI编程工具的Agent技能 2026/10/2 7:51:45

Skills Manager:统一管理54款AI编程工具的Agent技能

1. 为什么我们需要一个“技能中枢”过去一年里,我陆续在五六个AI编程工具之间来回切换。Claude Code、Cursor、Windsurf、Cline、Roo Code、Aider……每换一个工具,我就要重新配置一遍Agent技能:把同一份代码审查规则复制到不同的配置目录&am…

阅读更多 →
WPS批量修改表格样式:从手动到VBA一键格式化 2026/10/2 7:51:39

WPS批量修改表格样式:从手动到VBA一键格式化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
激光雷达三种测距方式对比:ToF、三角测距与FMCW选型指南 2026/10/2 7:51:39

激光雷达三种测距方式对比:ToF、三角测距与FMCW选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Koopman算子实现非线性系统线性化MPC控制 2026/10/2 7:51:39

Koopman算子实现非线性系统线性化MPC控制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Orcad Allegro补丁本质是Windows系统兼容性工程 2026/10/2 7:51:38

Orcad Allegro补丁本质是Windows系统兼容性工程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
STM32CubeMX从入门到实战:HAL库开发与FreeRTOS集成指南 2026/10/2 7:51:38

STM32CubeMX从入门到实战:HAL库开发与FreeRTOS集成指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉