1 如何理解 RAMECC FAR 寄存器的值-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何理解 RAMECC FAR 寄存器的值

jf_pJlTbmA9 来源: STM32单片机 作者: STM32单片机 2023-10-19 18:19 次阅读

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 中的截图:

wKgaomUD0beAaFRyAAEUNCoKDrs078.jpg

3.RAMECC 寄存器地址

对于上图 Table 11 的 RAMECC 控制单元的地址总结成如下表格,具体的参考RM0433 的第二章节 Memory and bus architecture 中的 table 8.

wKgaomUD0biAT8FeAABGlq5LAO4079.jpg

4.RAMECC 寄存器

每一个 RAMECC 控制单元(RAMECC1、RAMECC2、RAMECC3)的监控单元Monitor number 均分别含有如下的一套寄存器组(其中 RAMECC_IER 为共同拥有)。

接下来我们以 RAMECC1 为例进行分析,其边界地址为:0x52009000 -0x520093FF,那么对于该 RAMECC1 控制单元中的寄存器组,对于每一个寄存器:

wKgZomUD0bmAdk4eAAHndhhQ354965.jpg

以 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单片机

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120230
  • ECC
    ECC
    +关注

    关注

    0

    文章

    97

    浏览量

    20556
收藏 人收藏

    评论

    相关推荐

    基于DWC2的USB驱动开发-发送相关的寄存器DMA寄存器详解

    的两个寄存器,其他的后续再讲, 并且通过观察其寄存器的实际的变化来加深理解。 了解这些的含义以及何时如何变化,可以在有问题时帮助进行调试
    的头像 发表于 07-16 16:42 1641次阅读
    基于DWC2的USB驱动开发-发送相关的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b>详解

    Verilog设计寄存器

    现代逻辑设计中,时序逻辑设计是核心,而寄存器又是时序逻辑的基础,下面将介绍几种常见的寄存器的Verilog设计代码供初学者进行学习理解
    的头像 发表于 07-27 09:03 3515次阅读
    Verilog设计<b class='flag-5'>寄存器</b>

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定义  寄存器是中央处理内的组成部分。寄存器是有限存贮容量
    发表于 03-08 14:26 2.2w次阅读

    数据寄存器,数据寄存器是什么意思

    数据寄存器,数据寄存器是什么意思 数据寄存器数据寄存器包括累加AX、基址寄存器BX、计数
    发表于 03-08 14:38 1.3w次阅读

    寄存器与移位寄存器

    寄存器与移位寄存器:介绍寄存器原理和移位寄存器的原理及实现。
    发表于 05-20 11:47 0次下载

    寄存器变量

    C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的会被存放在CPU的寄存器中,每当需要使用它们时,CPU就可以直接使用,而无须再通过控制
    发表于 06-03 10:13 2364次阅读

    stm32是如何将寄存器通过标准库写入寄存器的?

    GPIO_Init函数3.总结0. 前言在平时的学习和工作中,可能很少有人会实际去操作寄存器,但是去了解库函数是如何去操作寄存器是很有必要的。不仅可以加深对stm32的理解还能学习借鉴它库函数的封装架构。...
    发表于 12-16 16:58 18次下载
    stm32是如何将<b class='flag-5'>寄存器</b><b class='flag-5'>值</b>通过标准库写入<b class='flag-5'>寄存器</b>的?

    修改寄存器默认的方法

    寄存器默认,也叫复位,是当reset或者set有效时寄存器输出的。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为
    的头像 发表于 09-28 14:13 1446次阅读

    工程师笔记|如何理解 RAMECC FAR 寄存器

    error failing address”。 比如在 AXI-SRAM 中,如果客户示例显示的是 FAR = 0x2004,但是这个地址 0x2004 并不在 AXI-SRAM 范围之内,客户该如何理解
    的头像 发表于 12-16 19:35 1242次阅读

    ARM通用寄存器及状态寄存器详解

    笔者来聊聊ARM通用寄存器以及状态寄存器的认识与理解
    的头像 发表于 01-06 14:58 7142次阅读

    修改寄存器默认的方法有哪些

    寄存器默认,也叫复位,是当reset或者set有效时寄存器输出的。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为
    的头像 发表于 01-30 16:30 2337次阅读
    修改<b class='flag-5'>寄存器</b>默认<b class='flag-5'>值</b>的方法有哪些

    简化UVM寄存器模型的使用

    当我开始使用 UVM RAL 时,我无法理解 UVM 基类库对更新所需和镜像寄存器有什么看法。我还认为,所使用的术语没有准确反映其意
    的头像 发表于 05-29 10:15 1243次阅读
    简化UVM<b class='flag-5'>寄存器</b>模型的使用

    基于DUT内部寄存器的镜像

    寄存器模型保持着DUT内部寄存器的 镜像(mirror) 。 镜像不能保证是正确的,因为寄存器模型只能感知到对这些
    的头像 发表于 06-24 12:02 887次阅读

    RAL寄存器模型操作指南

    寄存器模型操作,指的是通过寄存器模型对RTL中寄存器进行读写访问,或者同步寄存器模型与RTL中寄存器
    的头像 发表于 07-12 09:37 1075次阅读
    RAL<b class='flag-5'>寄存器</b>模型操作指南

    详解寄存器模型镜像

    DUT的配置寄存器是实际,reg_model有镜像、期望的概念。
    的头像 发表于 10-23 09:43 256次阅读
    详解<b class='flag-5'>寄存器</b>模型镜像<b class='flag-5'>值</b>