STMCU小助手
发布时间:2023-2-18 16:00
|
1. 问题原因 某客户测试 STM32H753xi 板子上的 ECC 功能,用于监控 AXI-SRAM 区域,但不是很明白 RAMECC FAR 寄存器在 RM0433 中的描述, “Bits 31:0 FADD[31:0]: ECC error failing address”。比如在 AXI-SRAM 中,如果客户示例显示的是 FAR = 0x2004,但是这个地址值 0x2004 并不在 AXI-SRAM 范围之内,客户该如何理解 FAR 寄存器?希望能够有详尽的描述,这个 FAR 寄存器的偏移地址是 Word 地址还是 Byte 地址或其他?我们先来看看相关参考手册中关于 RAMECC 的介绍去寻找答案。% ?$ ?8 x: v! n1 N9 u$ q 7 E0 ?. |1 q$ z- }; { 2. RAMECC 控制单元 RAM ECC 控制单元的数量取决于不同的 STM32H7 系列。比如,对于STM32H74x/5x 和 STM32H72x/3x 它们的每一个域都有一个 RAMECC 的控制器单元,为了描述简单,表述如下: Domain 1 (D1) RAMECC unit = RAMECC1 Domain 2 (D2) RAMECC unit = RAMECC2 Domain 3 (D3) RAMECC unit = RAMECC3 $ p" F2 T% P; W: k5 m 详细的说明请参考 RM0433 参考手册 rev7 中的截图: $ Y! u& P$ ]( h8 t! ]* [ 3 F8 {2 F, Q0 r# u# c4 L$ e" G 1 A. i l2 C7 @) Q, u: ?% A& `$ S& p5 U
3.RAMECC 寄存器地址 / _2 o- A3 q; a+ f" ] 对于上图 Table 11 的 RAMECC 控制单元的地址总结成如下表格,具体的参考RM0433 的第二章节 Memory and bus architecture 中的 table 8. ; q, D: ^4 H* b6 A: Y3 D1 T6 v " U- {# v; ?* y1 G9 r+ A
: g4 {1 K2 |; h+ _# k7 ~% Y 4.RAMECC 寄存器 每一个 RAMECC 控制单元(RAMECC1、RAMECC2、RAMECC3)的监控单元Monitor number 均分别含有如下的一套寄存器组(其中 RAMECC_IER 为共同拥有)。 接下来我们以 RAMECC1 为例进行分析,其边界地址为:0x52009000 -0x520093FF,那么对于该 RAMECC1 控制单元中的寄存器组,对于每一个寄存器: : G/ e Z! o' Q, |6 q9 S1 |' g$ z 3 f. d. w$ r7 ?% a
3 F2 [- [9 N8 n" G9 Q$ m- T0 Y 以 RAMECC1 的起始地址 0x52009000 为基准: RAMECC_IER:中断使能,偏移地址 0x00,该寄存器地址即为:0x52009000。3 }8 \' p( X4 z V' ], ~. U RAMECC_MxCR:配置寄存器,偏移地址 0x20 *x,x 为 ECC 监控单元号,该寄存器地址的表达式为:0x52009000 + 0x20 * x ,x 取值范围= [1..5](见上面表格 Table 11 ECC controller mapping),所以: Monitor 1 - AXI SRAM ECC 监控单元,该寄存器地址即为 0x52009020,监控大小为整个 AXI SRAM 的 512KB 字节(0x24000000 -0x2407FFFF)。 Monitor 2 - ITCM-RAM ECC 监控单元,该寄存器地址0x52009040, 监控大小为整个ITCM RAM的64KB字节(0x00000000 -0x0000FFFF)。 M onitor 3、Monitor 4、Monitor 5 中该 RAMECC_MxCR 寄存器的地址,以此类推。 " G3 D5 Y$ T0 f, [& s$ F RAMECC_MxSR -- 状态寄存器,偏移地址: 0x24 + 0x20 * (x - 1),x 为 ECC monitor number 号码(见上面表格 Table 11 ECC controller mapping)。那么该寄存的地址为:0x52009000 + 0x24 + 0x20 * (x-1) ,x 取值范围 = [1..5]: ; T! r+ l% m0 |, x* }# q. @ Monitor 1:0x52009024 Monitor 2:0x52009044 Monitor 3 : 0x52009064 Monitor 4 : 0x52009084 + N4 z+ b N( l+ W- l/ x Monitor 5 : 0x520090a4 8 A2 C4 o: n! q RAMECC_MxFAR --失败地址寄存器,表达式:0x52009000 + 0x28 + 0x20 * (x-1) , x取值 = [1..5]: : D& I7 Q9 f7 }, N7 _ Monitor 1:0x52009028 Monitor 2:0x52009048 Monitor 3:0x52009068 Monitor 4:0x520090885 I1 _. n w( Y6 u Monitor 5:0x520090a8' ~2 ^( _9 d- N+ W& m/ u6 [ 2 ?, Z5 Y- U, o* G/ Z RAMECC_MxFDRL -- 失败数据低位,表达式 0x52009000 + 0x2c + 0x20 * (x-1) ,x 取值= [1..5]& q2 |8 z) a9 h; C7 `& ~ Monitor 1:0x5200902c Monitor 2:0x5200904c) q* B2 Q2 t' j: f! E Monitor 3:0x5200906c Monitor 4:0x5200908c# ?; z: e: l( F1 u7 t5 l$ C Monitor 5:0x520090ac# D, v: Y5 B+ J& [( ~1 D( _ ) O2 H# p( a* G+ p! f9 ]! X RAMECC_MxFDRH -- 失败数据高位,表达式 0x52009000 + 0x30 + 0x20 * (x-1),x 取值= [1..5] Monitor 1:0x52009030 ; ~% i7 N6 m1 q% K( e9 v, B Monitor 2:0x52009050 Monitor 3:0x52009070 Monitor 4:0x52009090 $ [( @1 [3 p# r/ F Monitor 5:0x520090b0, }. }' r+ \7 G) r2 a, H# Q' } 3 c8 k3 U3 i- @9 p% ~: j# S ( B: m2 V# j* ~9 ?' @' L$ ]5 | RAMECC_MxFECR --失败 ECC 错误代码,表达式 0x52009000 + 0x34 + 0x20 * (x1) ,x 取值 = [1..5] Monitor 1:0x52009034 ) H% f7 D1 ?" M- N; s% e9 L6 K, F0 z Monitor 2:0x52009054 Monitor 3:0x52009074 + _& s; q7 T) R7 f. I0 G Monitor 4:0x52009094 0 C. J; q; K( l Monitor 5:0x520090b4 % I+ [. w( ^0 p5 |/ \ 完整版请查看:附件
如何理解 RAMECC FAR 寄存器的值.pdf
(306.03 KB, 下载次数: 1)
|
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版