在家电、智能家居、医疗便携设备等领域,IEC 60730-1/60335-1 B 类安全认证已成为产品上市的硬性门槛。针对 Cortex‑M33 内核的 STM32U5 系列,ST 官方推出UM2986用户指南与X‑CUBE‑CLASSB自检库(STL),以预编译黑盒形式提供 CPU、Flash、RAM 标准化自检能力,完全独立于 HAL/LL 驱动,编译器无关,可大幅缩短安全认证周期。本文以实战视角拆解 STL 库的架构、测试逻辑、工程集成与认证要点,帮你快速落地符合 B 类标准的自检方案。
资料获取:【应用笔记】UM2986 STM32U5系列IEC 60730自测试库用户指南
1. STL 自检库核心定位与优势
UM2986 配套的STL(Self‑Test Library) 是专为 STM32U5 设计的IEC 60730 B 类合规自检组件,核心解决 MCU 硬件故障检测与认证难题STMCU。
- 标准对齐:覆盖附录 H 强制测试项,直接支撑 TÜV、UL、CSA 认证
- 架构特性:预编译静态库(
.a)+ 开源配置接口,无源码泄露风险 - 环境无关:不依赖 HAL/LL/CMSIS,兼容 IAR、MDK、STM32CubeIDE
- TrustZone 适配:安全态运行,非安全态通过安全网关调用,满足隔离要求
- 测试覆盖:CPU 寄存器 / 栈指针 / 状态寄存器、Flash 完整性、RAM 单元故障
支持型号:STM32U575xx、STM32U585xx。
2. STL 架构与运行机制
STL 采用调度器 + 测试模块分层架构,应用层仅需调用标准 API,内部逻辑完全封装:
- 用户 API 层:对外开放初始化、配置、运行、复位接口
- 调度器:管理测试时序、状态机、中断屏蔽、人为故障注入
- 测试模块:CPU‑TM、Flash‑TM、RAM‑TM,执行底层硬件检测
- 状态返回:函数返回(OK/KO)+ 模块状态(PASSED/FAILED/PARTIAL_PASSED)
关键机制:
- 轮询执行:主循环调用,无重入,支持分段测试(大 RAM/Flash 分多次跑完)
- 中断管控:关键测试临时屏蔽中断,最小化阻塞时间
- 备份缓冲:RAM 测试必用备份区,保存并恢复原数据,避免业务异常
- 人为故障:支持强制返回失败状态,用于验证应用故障处理流程
3. 三大核心测试详解(认证必过项)
3.1 CPU 测试(TM1L/TM7/TMCB)
覆盖 IEC 60730 对 CPU 核心故障检测要求,三项模块必须全跑:
- TM1L:通用寄存器读写 / 跳转测试,检测固定故障
- TM7:MSP/PSP 双栈指针边界与功能测试
- TMCB:APSR 状态寄存器标志位测试
- 约束:必须特权级 + 线程模式运行,否则返回 ERROR
3.2 Flash 测试(CRC32 校验)
基于 IEEE 802.3 标准 CRC32,检测 Flash 位翻转、篡改、损坏:
- 结构:按 1KB 分区、4 字节块组织,支持多子集配置
- 原理:运行时计算 CRC → 对比预计算值 → 判断完整性
- 关键流程:
- 定义测试子集(起始 / 结束地址,不重叠 CRC 区)
- 编译后用 STM32CubeProgrammer 预计算 CRC 并写入 Flash 尾部
- 初始化→配置→分段运行→复位
- TrustZone:安全 / 非安全 Flash 分区独立 CRC 区
3.3 RAM 测试(March C‑算法)
检测单元短路、开路、数据 retention 故障,必须使用备份缓冲区(U5 系列强制):
- 算法:March C‑,覆盖所有固定故障与耦合故障
- 流程:备份数据 → 写入测试码 → 回读校验 → 恢复数据
- 约束:
- 子集起始 32 位对齐,大小为 32 字节倍数
- 备份区不在测试子集内,TrustZone 场景放入安全 RAM
- 测试时屏蔽 DMA,防止数据冲突
4. 工程集成标准步骤(照做可编译)
4.1 资源导入
- 复制
Middlewares/ST/STM32_Safety_STL全目录到工程 - 添加头文件路径,链接
STL_Lib.a库 - 复制配置模板:
stl_user_param_template.c、stl_user_api.h
4.2 编译开关配置
STL_SW_CRC:软件 CRC(默认硬件 CRC)STL_ENABLE_IT:测试期间开启中断(默认关闭,更安全)
4.3 链接脚本配置
- 只读段
readonly放入 Flash - 定义备份缓冲区段
backup_buffer_section - 安全项目配置安全 / 非安全内存边界
4.4 CRC 工具配置
编译后调用 STM32CubeProgrammer CLI 自动计算并写入 CRC:
STM32_Programmer_CLI.exe -sl "xxx.out" 0x08000000 0x08100000 0x400
4.5 标准调用流程
// 1. 初始化调度器
STL_SCH_Init();
// 2. 初始化并配置Flash
STL_SCH_InitFlash(&flashStatus);
STL_SCH_ConfigureFlash(&flashStatus, &flashCfg);
// 3. 初始化并配置RAM
STL_SCH_InitRam(&ramStatus);
STL_SCH_ConfigureRam(&ramStatus, &ramCfg);
// 4. 运行CPU测试
STL_SCH_RunCpuTM1L(&cpuStatus);
STL_SCH_RunCpuTM7(&cpuStatus);
STL_SCH_RunCpuTMCB(&cpuStatus);
// 5. 分段运行Flash/RAM
while(STL_SCH_RunFlashTM(&flashStatus) == STL_PARTIAL_PASSED);
while(STL_SCH_RunRamTM(&ramStatus) == STL_PARTIAL_PASSED);
5. 强制约束与量产避坑
- 运行权限:必须特权级、线程模式,否则 CPU 测试失败
- 中断管理:默认屏蔽中断,RAM 测试最长屏蔽约 471 周期,实时系统需评估
- DMA 冲突:测试期间禁用 DMA 访问测试内存区,避免数据损坏
- 内存映射:RO 段必须在 Flash,备份区独立配置
- TrustZone:STL 放入安全工程,非安全侧通过 SG 接口调用
- 状态检查:先判断函数返回 STL_OK,再检查模块状态
6. 认证落地:标准覆盖与扩展测试
6.1 标准覆盖(IEC 60730‑1 附录 H)
- CPU:寄存器、栈指针、状态寄存器故障检测
- Flash:所有单位故障检测
- RAM:DC 故障、固定故障检测
- 时钟:示例提供时钟交叉检测(系统时钟 vs LSI)
6.2 应用层扩展测试(需自行实现)
STL 仅覆盖 MCU 核心,外设与应用需补充:
6.3 集成验证
- 正常流程测试:全量自检通过,系统正常运行
- 故障注入测试:人为故障 API 强制失败,验证故障处理与安全停机
UM2986 是 STM32U5 系列通过IEC 60730 B 类认证的官方实操手册,X‑CUBE‑CLASSB 自检库以预编译黑盒形式提供稳定、合规、编译器无关的核心自检方案,覆盖 CPU/Flash/RAM 三大关键硬件检测。遵循本文的集成流程、配置约束与测试逻辑,可快速完成工程移植与认证测试,大幅降低家电、工控、医疗类产品的安全开发成本与周期。
实际项目中,只需按内存配置、调度时序、故障处理三大要点落地,即可满足认证机构的测试要求,实现产品稳定合规上市。
171