STMCU小助手
发布时间:2024-2-29 16:06
|
一、前言 ^8 F; ]0 M, G6 A F( W | 有客户反馈,在使用 STM32H5 读取温度传感器校准值地址时,会进入 HardFault,而在其他系列芯片中读取这个参数时并没有此现象。在 NUCLEO-H563ZI 开发板上去复现此问题,发现只有开启 ICACHE 后才会复现,初步验证说明进入 HardFault 与 ICACHE 相关,如果直接关闭ICACHE 虽然可以解决进入 HardFault 的问题,但势必会影响代码执行的效率。所以,我们希望能找到一种更好的方式去处理此问题。0 b* R6 y$ b+ |% @ R6 z " _3 D7 G( H4 q2 L5 j- Q 二、问题分析 经 Datasheet 查询,两个温度传感器校准值 TS_CAL1 和 TS_CAL2 的地址分别为 0x08FF F814-0x08FF F815 和 0x08FF F818-0x08FF F819。
; p$ k7 y9 k* S# k+ E- F! l 根据下表,可以知道 TS_CAL1 和 TS_CAL2 是属于 Read-only 区域的,而 Read-only 区域是通过 AHB system bus 访问的。; P# h" g! L4 H8 d; t; h5 z; W8 B6 G ) p" d( f' g* A4 M8 a
# k+ T/ K, T, g. ~5 R' v 根据参考手册的描述,所有的 AHB memory 默认都是 cacheable 的,对于无法实现缓存的区域(OTP、RO、data area),必须使用 MPU 来禁用本地缓存。8 h/ i" y. a) h4 o8 K( x 1 L; q" X: e2 `- O7 t9 h
8 a& e* y; n8 y. d. C8 r 也就是说,不仅是 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。( T2 [; g R: x/ o6 O* [
( a! ~( u ?" ^5 r4 `7 \ OTP 的地址为[0x08FF F000-0x08FF F7FF]和 RO 的地址为[0x08FF F800-0x08FF FFFF],两个地址其实是连续的。$ D- [# d) f7 Q) F; w I9 W% ^9 K3 s0 u) P
" u9 B. k+ F; t0 Z2 Y6 Q* K, [ 三、解决方法* t' {) E9 d8 o* D- z' g8 v 经上述分析后,我们只需要把[0x08FF F000-0x08FF FFFF]这段地址区域设置为 none cacheable,通过 CubeMX 进行配置。 : `" p" b( u3 y" _/ T5 C. z6 U
经 MPU 配置 OTP 和 RO 的内存访问属性后,就可以正常去读取温度传感器校准值了,同时属于这两个区域的其他值,如 UID、Flash Size、Package 等信息也能正常读取了。# M& m4 [" N6 d" n& u% F
四、总结- S& V. r. F6 H2 E( O 温度传感器校准值及 UID 等一些信息在 H5 中属于只读区域,而这个区域在 AHB 访问时,默认内存属性为 cacheable,需要通过 MPU 把这些区域设置为 none-cacheable,才能正常访问。每个系列的芯片架构都或多或少有差别,当按以往经验操作不能实现功能时,不妨对照相应芯片的数据手册、参考手册、应用笔记、甚至勘误手册,也许就能发现问题所在。 7 x4 J7 E U; |& Z; s 转载自: STM323 m- g& V4 l7 U% X 如有侵权请联系删除3 x" S. R6 p+ ~. w- P4 {- I5 m3 g. n: E |
【NUCLEO-H533RE评测】-01-开箱及资料准备
【STM32H503评测】+基于STM32CubeMX生成工程点灯
实战经验 | LAT1585 STM32H5在使能TrustZone下实现High-Cycle的数据存储
详解STM32单片机的堆栈
STM32大神笔记,超详细单片机学习汇总资料
小白也能明白的STM32的低功耗与唤醒机制
STM32芯片命名规则
STM32 引脚到底有多少?为什么一个引脚能当好几个用?
STM32时钟详解
经验分享 | STM32H563 SPI DMA应用演示
微信公众号
手机版
一键三连,学习起来