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 的介绍去寻找答案。
2.ramecc 控制单元
ram ecc 控制单元的数量取决于不同的 stm32h7 系列。比如,对于stm32h74x/5x 和 stm32h72x/3x 它们的每一个域都有一个 ramecc 的控制器单元,为了描述简单,表述如下:
domain 1 (d1) ramecc unit = ramecc1domain 2 (d2) ramecc unit = ramecc2domain 3 (d3) ramecc unit = ramecc3
详细的说明请参考 rm0433 参考手册 rev7 中的截图:
3.ramecc 寄存器地址
对于上图 table 11 的 ramecc 控制单元的地址总结成如下表格,具体的参考rm0433 的第二章节 memory and bus architecture 中的 table 8.
4.ramecc 寄存器
每一个 ramecc 控制单元(ramecc1、ramecc2、ramecc3)的监控单元monitor number 均分别含有如下的一套寄存器组(其中 ramecc_ier 为共同拥有)。
接下来我们以 ramecc1 为例进行分析,其边界地址为:0x52009000 -0x520093ff,那么对于该 ramecc1 控制单元中的寄存器组,对于每一个寄存器:
以 ramecc1 的起始地址 0x52009000 为基准:ramecc_ier:中断使能,偏移地址 0x00,该寄存器地址即为:0x52009000。
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)。
monitor 3、monitor 4、monitor 5 中该 ramecc_mxcr 寄存器的地址,以此类推。
ramecc_mxsr -- 状态寄存器,偏移地址: 0x24 + 0x20 * (x - 1),x 为 ecc monitor number 号码(见上面表格 table 11 ecc controller mapping)。那么该寄存的地址为:0x52009000 + 0x24 + 0x20 * (x-1) ,x 取值范围 = [1..5]:
monitor 1:0x52009024
monitor 2:0x52009044
monitor 3 : 0x52009064
monitor 4 : 0x52009084
monitor 5 : 0x520090a4
ramecc_mxfar --失败地址寄存器,表达式:0x52009000 + 0x28 + 0x20 * (x-1) , x取值 = [1..5]:
monitor 1:0x52009028
monitor 2:0x52009048
monitor 3:0x52009068
monitor 4:0x52009088
monitor 5:0x520090a8
ramecc_mxfdrl -- 失败数据低位,表达式 0x52009000 + 0x2c + 0x20 * (x-1) ,x 取值= [1..5]
monitor 1:0x5200902c
monitor 2:0x5200904c
monitor 3:0x5200906c
monitor 4:0x5200908c
monitor 5:0x520090ac
ramecc_mxfdrh -- 失败数据高位,表达式 0x52009000 + 0x30 + 0x20 * (x-1),x 取值= [1..5]
monitor 1:0x52009030
monitor 2:0x52009050
monitor 3:0x52009070
monitor 4:0x52009090
monitor 5:0x520090b0
ramecc_mxfecr --失败 ecc 错误代码,表达式 0x52009000 + 0x34 + 0x20 * (x1) ,x 取值 = [1..5]
monitor 1:0x52009034
monitor 2:0x52009054
monitor 3:0x52009074
monitor 4:0x52009094
monitor 5:0x520090b4
5.解决问题
通过查询资料与试验,fadd[31:0]中表述的地址是 word 而不是 bit。为了计算真实的地址,客户需要用如下公式计算:真实地址= 所处内存的首地址 + fadd x 字节数。
现在举个例子,如上述提到的 fadd= 0x2004 :
- 对于 64-bit word 的内存 :如 axi ram : 0x2400 0000 + 0x2004 * 8 = 0x2401 0020;
- 对于 32-bit word 的内存 :如 sram1 : 0x3000 0000 + 0x2004 * 4=0x3000 8010 ;
来源: stm32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理
北京颁发自动驾驶载人测试牌照 百度Apollo率先拿下40张
浅谈UWB室内无线定位技术
禾赛科技AT128超高清激光雷达给理想L9带来了什么
电力企业物资库存管理中物联网的应用
欧洲第一季度的电气化渗透率情况
如何理解 RAMECC FAR 寄存器的值
日本人体通信技术 传输速度突破10Mbps
Pricebaba与技巧推手OnLeaks合作发布了Google Pixel 5渲染器
iPhone 15系列要涨价 最高1400元 出货量也更低!
什么是XR虚拟拍摄
杨元庆就“5G标准投票”发声:爱国咱绝对经得起考验
OPPO Reno5系列的荧光摄像模组:让你成为万众瞩目的焦点
Ci2451集成无线收发器和8位RISC(精简指令集)MCU的SOC芯片
tda9373各引脚功能图及引脚电压
操控继电器的用途及分类
解读新能源汽车电控系统EMC带载测试
美国国防部采办中的ChatGPT:高级语言模型的机遇和风险
那些已经发生或会发生的移动医疗猜想
AMR公司欲挤入动力电池与新能源领域
以“湖为底·数共生·谋未来”为主题的易华录2021第三届数据湖大会成功举办