STM新闻官 发表于 2024-2-28 11:24

实战经验 | STM32H5读取温度传感器校准值时进HardFault的原因分析

本帖最后由 STM新闻官 于 2024-2-28 14:11 编辑

一、前言
有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证说明进入 HardFault 与 ICACHE 相关,如果直接关闭ICACHE 虽然可以解决进入 HardFault 的问题,但势必会影响代码执行的效率。所以,我们希望能找到一种更好的方式去处理此问题。
二、问题分析
经 Datasheet 查询,两个温度传感器校准值 TS_CAL1 和 TS_CAL2 的地址分别为 0x08FF F814-0x08FF F815 和 0x08FF F818-0x08FF F819。根据下表,可以知道 TS_CAL1 和 TS_CAL2 是属于 Read-only 区域的,而 Read-only 区域是通过 AHB system bus 访问的。根据参考手册的描述,所有的 AHB memory 默认都是 cacheable 的,对于无法实现缓存的区域(OTP、RO、data area),必须使用 MPU 来禁用本地缓存。也就是说,不仅是 TS_CAL1 和 TS_CAL2,其实整个 OTP、RO(Table 39)、data area区域的访问都无法经过 Cache,需要使用 MPU 将其配置为 none-cacheable 属性。
既然知道了问题所在,那剩下的问题就是确定 OPT、RO、data area 各个区域的地址,data area 是由用户选项字节配置的可进行 100k 次擦除的区域,用于存储用户掉电不丢失的数据,需要根据实际的配置去设置 MPU 区域。剩下的就是 OPT 和 RO 区域,在 STM32H563 中,分别有 2K byte。OTP 的地址为和 RO 的地址为,两个地址其实是连续的。
三、解决方法
经上述分析后,我们只需要把这段地址区域设置为 none cacheable,通过 CubeMX 进行配置。

经 MPU 配置 OTP 和 RO 的内存访问属性后,就可以正常去读取温度传感器校准值了,同时属于这两个区域的其他值,如 UID、Flash Size、Package 等信息也能正常读取了。

四、总结

温度传感器校准值及 UID 等一些信息在 H5 中属于只读区域,而这个区域在 AHB 访问时,默认内存属性为 cacheable,需要通过 MPU 把这些区域设置为 none-cacheable,才能正常访问。每个系列的芯片架构都或多或少有差别,当按以往经验操作不能实现功能时,不妨对照相应芯片的数据手册、参考手册、应用笔记、甚至勘误手册,也许就能发现问题所在。

STM新闻官 发表于 2024-2-28 14:12


阅读原文

查看更多

zwsam 发表于 2024-2-29 08:56

mmuuss586 发表于 2024-2-29 09:48

感谢分享

技术工程师 发表于 2024-3-4 14:35

谢谢分享,学到了

中国龙芯CDX 发表于 2025-2-9 15:07

非常不错的应用

Zuocidian 发表于 2025-2-12 21:57

作为STM32F4的升级版,STM32H5在性能上有了显著提升,适用于需要高性能计算和控制的应用场景

Puchou 发表于 2025-2-13 08:03

STM32H5系列提供了多种不同容量的Flash版本(2MB、1MB、512KB、256KB、128KB),以及丰富的外设和内存配置,满足不同客户和应用场景的需求

Xiashiqi 发表于 2025-2-13 11:01

STM32H5是首款内置硬件ST iROT(隔离式信任根)的MCU产品,符合SESIP3和PSA 3级认证,能够有效保护系统免受物理和远程攻击

小海师 发表于 2025-2-13 13:02

STM32H5系列特别适用于在小型显示器上实现中端GUI,支持SPI串口屏和FMC并口屏,最高分辨率可达480*320

Haizangwang 发表于 2025-2-13 15:12

H5通过12种封装(25到176个引脚)提供众多产品型号,并支持高达125°C的工作环境温度
页: [1]
查看完整版本: 实战经验 | STM32H5读取温度传感器校准值时进HardFault的原因分析