【导读】工业与家电产物经由过程 ClassB 功效安全认证时,常面对一个焦点痛点:同平台多子系列产物,仅运用代码差别、安全代码彻底一致,却需反复认证,时间与成本居高不下。为解决该问题,行业通用方案是安全代码与运用代码物理分区,确保安全代码二进制稳定,一份认证笼罩全系列。本文基在 ST 官方 LAT1630 文档,联合 STM32G081B+MDK 实操,拆解分区道理、分区设计、实操步调与调试技巧,帮你高效落地 ClassB 代码分区。
资料获取:经验分享 | LAT1630 ClassB功效安全认证代码与运用代码举行分区的实现要点
1. 痛点直击:为什么必需做代码分区
Class 认证焦点是安全代码二进制不成变,运用代码修改不克不及影响安全代码。但现实开发中,运用代码变更会触发连锁问题:
函数地址漂移:安全代码挪用的运用函数,地址随运用代码修改而变化,致使安全代码二进制转变;
全局变量重分配:安全拜候的全局变量,地址从头分配,粉碎安全逻辑;
隐式挪用滋扰:编译器天生的 switch 跳转等隐式挪用,地址随运用代码变更,激发安全代码异样。
分区设计的焦点方针,就是断绝安全代码、固定依靠地址、阻遏运用代码影响,实现 “安全代码一次认证,全系列复用”。
2. 焦点道理:三区两区别区架构
要实现代码断绝,需对于ROM(代码区)分三区、RAM(变量区)分两区,精准断绝安全、过渡、运用代码,确保安全代码自力性。
2.1 ROM 三区划分
SECTION_CLASSB:存放 ClassB 安全代码(如 stm32xx_STL 系列自检代码),只读不成修改,认证焦点区域;
SECTION_WRAPPER:过渡封装区,存放安全代码挪用的函数,地址固定稳定,含不变 HAL 库函数、运用封装函数;
SECTION_APP:平凡运用代码区,可自由修改,不被安全代码直接拜候,变更无影响。
2.2 RAM 两区划分
固定地址 RAM:存放安全代码拜候的全局 / 静态变量,地址锁定稳定;
可变地址 RAM:存放平凡运用变量,可动态分配,不影响安全逻辑。
2.3 要害断绝逻辑
安全代码仅挪用 Wrapper 区函数、拜候固定 RAM 变量,彻底阻遏 App 区;App 代码修改仅影响自身,安全代码二进制100% 稳定,满意 Class 认证要求。
3. 实操落地:MDK+STM32G081B 分区步调
以 STM32Cube_FW_ClassB_V2.3.0、MDK 5.41.0 为例,分步实现分区配置。
3.1 代码分类收拾
将工程文件按功效分组:
ClassB 代码:stm32g0xx_STLmain.c、stm32g0xx_STLxxx.c(自检焦点代码);
Wrapper 代码:安全挪用的 HAL 库(CRC、WDG、RCC 驱动)、封装函数;
App 代码:用户营业逻辑、无关驱动代码。
3.2 Scatter 文件分区配置
经由过程 MDK 散列文件,强迫代码 / 变量分区:
ROM 分区:指定 SECTION_CLASSB、SECTION_WRAPPER、SECTION_APP 的肇始地址与规模;
RAM 分区:划分固定地址区与可变区,绑定安全变量。
焦点配置要点:
SECTION_CLASSB 设为自力持续地址,无堆叠;
SECTION_WRAPPER 锁定肇始地址,禁止重定向;
安全全局变量强迫分配到固定 RAM 区。
3.3 Wrapper 封装技巧
安全代码需挪用可变运用函数时,必需做封装:
原始函数(如 STL_InitClock_Xcross_Measurement)放于 App 区;
新增封装函数(STL_InitClock_Xcross_Measurement_Wrapper),内部挪用原始函数;
封装函数放入 Wrapper 区,安全代码仅挪用封装函数;
运用代码修改原始函数,Wrapper 地址稳定,安全代码不受影响。
3.4 编译器避隐式挪用
安全代码中 switch 语句会天生
ARM_co妹妹on_switch8
隐式挪用,地址易漂移,需添加编译选项:
对于 ClassB 代码文件(如 stm32xx_STLmain.c),添加
--no_branch_tables
;
禁用编译器天生分支跳转表,杜绝隐式挪用,包管安全代码二进制不变。
4. 调实验证:确保安全代码稳定
分区配置后,需验证安全代码二进制一致性,防止配置疏漏。
4.1 fromelf 汇编对于比
用 MDK 自带 from 东西,将 axf 履行文件转为汇编:

对于比运用代码修改先后的汇编文件,SECTION_CLASSB 段彻底一致,即为及格。
4.2 宏测实验证
开启 / 封闭运用代码宏(如__VERSION_UPDATE),编译两个版本:
对于比二进制文件,安全代码区无差异;
运用代码区正常变化,验证断绝效果。
ClassB 代码分区的焦点是三区两断绝:ROM 分 ClassB、Wrapper、App,RAM 分固定区、可变区,共同封装设计与编译器优化,完全阻遏运用代码对于安全代码的影响。
该方案已经经由过程 ST 官方验证,适配 STM32 全系列 ClassB 认证项目,可年夜幅降低多子系列认证成本,缩短产物上市周期。实操时重点存眷 Scatter 配置、Wrapper 封装、隐式挪用规避,便可高效落地分区设计。
