引言
在 STM32 TrustZone 开发调试技巧的前两篇中,我们介绍了内核的 SAU/IDAU,地址的安全属性配置,资源的安全属性配置,内核访问资源的安全规则,以及 TrustZone 环境下外设使用的常见问题等内容。TrustZone 环境开发中还可能经常遇到的一个问题就是软件触发的故障错误。ARM CM33 内核 TrustZone 环境下的异常模型以及 Fault 的处理与不带安全扩展的情况有着很多变化,一旦出现 HardFault,经验不足的开发者可能往会找不到头绪,不知道从哪里着手寻找问题所在。因此,在这一篇的重点将围绕 CM33 TrustZone 环境下的异常模型以及HardFault 的调试与处理展开,供开发者参考。
CM33 TrustZone 架构下的异常模型
在 STM32 TrustZone 开发调试技巧的第二篇中我们介绍过 CM33 带安全扩展的 S 和 NS 侧的中断以及中断向量表,这里不再赘述。
Fault 处理
Fault 出错信息
软件的故障处理程序对 Fault 进行处理时,可以通过读取 Fault 相关寄存器获取 Fault 触发原因的一些相关信息,得知错误触发的具体异常类型。例如 SCB(System Control Block)单元中的 HSFR、CFSR 寄存器,以及 Security Attribution Unit(SAU)单元的 SFSR 寄存器等。CFSR 包含多个位域,分别对应 MemManageFault(MFSR)、BusFault(BFSR)和UsageFault(UFSR)。
Fault 异常的调试
代码的 FaultHandler 处理起到的作用通常是运行期间第一时间提示故障信息以及记录故障日志等,最终采取的措施可能要么是系统复位,要么是进入死循环。但是在开发阶段如果出现Fault 异常,更有效的方法可能是需要通过在线调试手段找到故障原因,改正代码中的错误。因此本小节我们将讨论 Fault 异常的调试方法。
小结
掌握一些 TZ 环境分析 Fault 的技巧,在开发中遇到软件触发 Fault 故障时保持沉着冷静,按照一定的方法认真地进行分析,往往可以快速有效地解决问题。本文针对使用STM32 MCU 进行 ARM V8M TrustZone 开发中的 Fault 处理与调试做了一些总结,希望对开发者有所帮助。
在后续的篇章中,我们还将讨论 TrustZone 中 App 使用 RTOS 的注意事项等话题,欢迎读者继续关注。
664