STMCU小助手
发布时间:2024-2-29 16:06
|
一、前言$ @7 q) s+ U9 F$ r x/ e) _ 有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证说明进入 HardFault 与 ICACHE 相关,如果直接关闭ICACHE 虽然可以解决进入 HardFault 的问题,但势必会影响代码执行的效率。所以,我们希望能找到一种更好的方式去处理此问题。6 t& e8 i& Q; A ! d# P* g$ Y3 f R! }8 X: M$ Z- j) w4 m 二、问题分析 经 Datasheet 查询,两个温度传感器校准值 TS_CAL1 和 TS_CAL2 的地址分别为 0x08FF F814-0x08FF F815 和 0x08FF F818-0x08FF F819。" ?6 y( m& f) B" ^& A& }
( I; D( i$ j; q5 s 根据下表,可以知道 TS_CAL1 和 TS_CAL2 是属于 Read-only 区域的,而 Read-only 区域是通过 AHB system bus 访问的。- V6 I, a. A, ?0 V6 u " f# m) [# \& J: o" |' D
根据参考手册的描述,所有的 AHB memory 默认都是 cacheable 的,对于无法实现缓存的区域(OTP、RO、data area),必须使用 MPU 来禁用本地缓存。 ' ~, d9 O6 I# k% `8 Y$ J! [4 y
2 ?" x' g& R- p" f" ~ 也就是说,不仅是 TS_CAL1 和 TS_CAL2,其实整个 OTP、RO(Table 39)、data area区域的访问都无法经过 Cache,需要使用 MPU 将其配置为 none-cacheable 属性。6 k$ }5 H7 d" v) n; A4 X 既然知道了问题所在,那剩下的问题就是确定 OPT、RO、data area 各个区域的地址,data area 是由用户选项字节配置的可进行 100k 次擦除的区域,用于存储用户掉电不丢失的数据,需要根据实际的配置去设置 MPU 区域。剩下的就是 OPT 和 RO 区域,在 STM32H563 中,分别有 2K byte。 1 f8 h: W9 }9 s7 w
OTP 的地址为[0x08FF F000-0x08FF F7FF]和 RO 的地址为[0x08FF F800-0x08FF FFFF],两个地址其实是连续的。+ E! X: {6 f; F, z- f 0 _# Z/ O0 r! m# R: n
三、解决方法$ s# O& h9 Z, F9 e" ] 经上述分析后,我们只需要把[0x08FF F000-0x08FF FFFF]这段地址区域设置为 none cacheable,通过 CubeMX 进行配置。* {1 q( ?6 W) q# ~ " y% g# A- k! A' o1 P
经 MPU 配置 OTP 和 RO 的内存访问属性后,就可以正常去读取温度传感器校准值了,同时属于这两个区域的其他值,如 UID、Flash Size、Package 等信息也能正常读取了。8 _& \% c5 @0 \* R+ y! C. S % D# U0 M- P2 P1 Z+ T' [" o7 I
四、总结 温度传感器校准值及 UID 等一些信息在 H5 中属于只读区域,而这个区域在 AHB 访问时,默认内存属性为 cacheable,需要通过 MPU 把这些区域设置为 none-cacheable,才能正常访问。每个系列的芯片架构都或多或少有差别,当按以往经验操作不能实现功能时,不妨对照相应芯片的数据手册、参考手册、应用笔记、甚至勘误手册,也许就能发现问题所在。 . B+ n5 X0 |' y 转载自: STM32 如有侵权请联系删除- G# `, P0 P. l: E 3 g6 E7 W, x7 ~ ( S+ y! m' N9 n# y! _ |
【STM32H5 评测】1、开发板资源和程序开发
NUCLEO-H5E5ZJ 以太网(Ethernet)移植记录
【STM32H5 评测】1、移植记录(LED / Shell)
H5E5开发板评测-1
H5E5评测-4
H5E5评测-3
H5E5评测-2
【NUCLEO-H533RE评测】-01-开箱及资料准备
【STM32H503评测】+基于STM32CubeMX生成工程点灯
实战经验 | LAT1585 STM32H5在使能TrustZone下实现High-Cycle的数据存储
微信公众号
手机版
一键三连,学习起来