[信息] LAT1554 STM32N6 访问TCM时产生Hard Fault的原因与解决方法

[复制链接]
94|0
STM新闻官 发表于 2025-10-29 22:56 | 显示全部楼层 |阅读模式
1. 引言
客户在使用 STM32N6 开发的过程中,遇到了访问 DTCM 时产生 Hard Fault 的问题。在本文中,我们使用 IAR V9.40.2 对 STM32N6 FSBL 工程进行测试,复现问题,解释原因并给出了解决办法,供遇到该问题的客户参考。另外请注意 STM32N6 BootROM 是安全启动,意味着其跳转的 FSBL 总是安全的,文中的内存地址(DTCM, ITCM)使用的均是安全地址。

2. DTCM 访问 Hard Fault
2.1.  复现问题
STM32N6 中 DTCM 基础区的安全地址为 0x3000 000。下面是一段简单的测试程序。在一个简单的 FSBL 工程的 main.c 文件中,声明 pDTCMData,unsigned int32 数据指针,指向 DTCM 内存首地址,用来访问 DTCM,32 位数据访问可以避开由于数据未对齐产生 Hardfault 问题。代码如下:


7312769022acb7c5c0.png

9780569022ad814e3b.png

测试过程中,当读取 DTCM 数据时,很容易产生 Hard Fault 中断。当 Hard Fault 中断产生时,查看 Cortex-M55 内核寄存器 AFSR(Auxiliary Fault Status Register,见下图 1),可以看到 PECC(17 位)为 1,查阅手册 PM0273(STM32 Cortex®-M55 MCUs programming manual),该位的解释为“Precise fault caused by uncorrectable ECC error”类型为 RO, 即读取内存(TCM)时产生了 ECC 校验错误。

图 1. STM32N6 Cortex-M55 内核寄存器 AFSR

583169022b07e68f6.png

STM32N6 Cortex-M55 TCM 管理接口中, DTCM 基础区与 ITCM 基础区都带有 ECC校验,这正是我们测试时产生 Hard Fault 的原因。在上电复位时,DTCM 基础区和ITCM 基础区中的数据是随机的,未做数据清除或数据初始化,直接读取时,不可纠正ECC 错误是有极大概率发生的,并由此引发 Hard Fault 中断。内存访问造成 Hard Fault的原因可能还有其它方面,比方内存对齐错误,我们的测试并非这种情况。除此之外,需要注意的一种场景是 PPOISON @AFSR 标志位为 1 的情况,也是由于内存访问硬件错误造成的。有关更多 AFSR 状态寄存器的信息,可以参考 ARM 官方资料:Arm Cortex-M55 Processor Technical Reference Manual r0p2。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1401

主题

1719

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部