0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

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

STM32单片机 来源:未知 2022-12-16 19:35 次阅读


关键词:STM32H7, RAMECC



目录预览




1.问题原因

2.RAMECC 控制单元

3.RAMECC 寄存器地址

4.RAMECC 寄存器

5.解决问题



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 ;

END


点击“阅读原文”,可下载原文档


原文标题:工程师笔记|如何理解 RAMECC FAR 寄存器的值

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

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

    关注

    6032

    文章

    44513

    浏览量

    632731
  • STM32
    +关注

    关注

    2265

    文章

    10870

    浏览量

    354716

原文标题:工程师笔记|如何理解 RAMECC FAR 寄存器的值

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Modbus协议的读取保持寄存器

    功能码用于读取从设备保持寄存器的内容,不支持广播模式。消息顿中指定了需要读取的保持寄存器的起始地址和数目。而保持寄存器中各地址的具体内容和意义则由设备开发者自行规定。
    的头像 发表于 10-30 10:54 434次阅读

    详解寄存器模型镜像

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

    FPGA算法工程师、逻辑工程师、原型验证工程师有什么区别?

    逻辑工程师和 FPGA 原型验证工程师在工作重点和职责上存在一定的区别: FPGA 算法工程师: 主要关注算法的设计和优化,以在 FPGA 平台上实现高效的计算和处理。他们需要深入理解
    发表于 09-23 18:26

    数字寄存器的原理和使用

    数字寄存器是计算机体系结构中至关重要的组成部分,其原理和使用对于理解计算机的工作原理和数据存储方式具有重要意义。
    的头像 发表于 09-05 14:08 391次阅读

    寄存器寻址的实现方式

    在计算机体系结构中,寄存器寻址是一种常见的寻址方式,它允许程序直接访问CPU内部的寄存器寄存器寻址可以提高程序的执行效率,因为它避免了对内存的访问。 寄存器寻址的基本概念
    的头像 发表于 07-12 10:36 550次阅读

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 一、基本寄存器
    的头像 发表于 07-12 10:31 1100次阅读

    AFE模拟前端寄存器读取操作

    AFE模拟前端寄存器读取操作是电子系统设计和调试中不可或缺的一环。寄存器作为AFE模拟前端中的重要组成部分,存储着各种配置参数和状态信息,通过读取这些寄存器工程师可以了解AFE的工作
    的头像 发表于 03-15 15:50 638次阅读

    loop指令执行时,隐含的寄存器

    当执行loop指令时,隐含的寄存器是CX寄存器。CX寄存器是循环计数寄存器,它存储了循环的迭代次数。 在汇编语言中,loop指令用于实现循
    的头像 发表于 02-14 16:15 850次阅读

    CPU的6个主要寄存器

    CPU寄存器是中央处理内的组成部分,是有限存贮容量的高速存贮部件。寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制
    的头像 发表于 02-03 15:15 3867次阅读

    arm三个寄存器在gdb调试时的作用

    arm三个寄存器在gdb调试时作用  ARM是一种广泛使用的微处理架构,它广泛应用于移动设备、嵌入式系统和其他高性能计算设备。当我们在使用gdb(GNU调试)调试ARM程序时,了解和理解
    的头像 发表于 01-31 10:44 891次阅读

    个人对STM32 SysTick的总结(寄存器操作)

    一、概述:SysTick是一个简单的递减24位计数。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。状态控制寄存器的第0位可以使能计数,当前
    的头像 发表于 01-06 08:00 1717次阅读
    个人对STM32 SysTick的总结(<b class='flag-5'>寄存器</b>操作)

    ADC转换的时候OFFSET寄存器与FS寄存器怎么使用呢?

    您好, 我想问一下ADC转换的时候这个OFFSET寄存器与FS寄存器怎么使用呢?比如说OFFSET的为0x80015b,这个
    发表于 12-15 06:28

    寄存器查看的功能和使用

    对于搞嵌入式底层开发的软件或者硬件工程师来说,经常会涉及到查看芯片手册,比如某个芯片的串口控制寄存器,需要知道这个对应
    的头像 发表于 11-28 12:26 1840次阅读
    <b class='flag-5'>寄存器</b>查看<b class='flag-5'>器</b>的功能和使用

    UVM寄存器模型的常规方法有哪些呢?

    在应用寄存器模型时, 除了利用它的寄存器信息, 还可以利用它来跟踪寄存器
    的头像 发表于 11-25 09:27 1731次阅读
    UVM<b class='flag-5'>寄存器</b>模型的常规方法有哪些呢?