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

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

3天内不再提示

介绍一下i.MXRT1170上用于保护片内OCRAM1,2的MECC64功能

痞子衡嵌入式 来源:痞子衡嵌入式 作者:痞子衡 2023-12-29 16:11 次阅读

今天痞子衡给大家分享的是i.MXRT1170 MECC64功能特点及其保护片内OCRAM1,2之道

ECC是 “Error Correcting Code” 的简写,ECC 能够实现错误检查和纠正,含有 ECC 功能的内存一般称为 ECC 内存,使用了 ECC 内存的系统在稳定性和可靠性上得到很大提升。相比前几代不带 ECC 的 i.MXRT10xx 型号,新一代 i.MXRT1170 在ECC上做了全面武装,从 eFuse 到 FlexRAM,从 OCRAM 到外部存储空间全都加上了 ECC 功能。如下表所示,不同类型的存储由不同的 ECC 控制器来守护:

c0e5ad76-a621-11ee-8b88-92fbcf53809c.png

今天痞子衡给大家简单介绍一下 i.MXRT1170 上用于保护片内 OCRAM1,2 的 MECC64 功能:

一、MECC64功能简介

1.1 MECC64特点

从用户角度来说,其实 MECC64 的设计特别简单,当 MECC64 使能后,任何对受保护的 OCRAM1/2 发起的 AXI 访问都会被 MECC64 模块接管,MECC64 组件负责根据用户写入的数据产生 ECC 校验值并将其存放于专用 OCRAM1/2_ECC 里,读访问时根据用户读取的地址从相应 OCRAM1/2_ECC 地址处获取 ECC 检验值并做检验处理后再返回数据。

从模块框图里看一个 MECC64 里有四个 ECC 校验流程(也对应四个 RAM Bank 控制器),这其实是跟单个 512KB OCRAM 由四个 128KB Bank 组成一一对应的,这样便于转化 AXI64 接口到 RAM 接口。

1. OCRAM 四个 Bank 挂载在 AXI64 系统总线上,AXI[1:0] 决定了访问得是 Bank0-3,这样的设计可以支持对不同 Bank 的读、写操作同时进行。
2. ECC 计算单元是 64bits,这 64bits 数据必须在同一 Bank 里,这个设计对 ECC 初始化操作影响较大,因此避免用 memset 函数去做初始化(STR指令是 byte access)。
c0f4c2f2-a621-11ee-8b88-92fbcf53809c.png

MECC64 模块一共有两个,分别是 MECC1、MECC2,分别对应保护 OCRAM1、OCRAM2。此外还有两个专用 OCRAM1_ECC、 OCRAM2_ECC 存放 ECC 校验值(当 MECC64 没使能时,OCRAM1/2_ECC 也可当作普通 OCRAM 使用)。

MECC1 base address: 4001_4000h
MECC2 base address: 4001_8000h

1.2 关于MECC64设计细节

关于 MECC64 基本概念,参看《简析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特点、开启步骤、性能影响》 的 1.2节,这里不予赘述。

1.2.1 MECC64检验能力

MECC64 中每 64bits 数据就会计算出一个 ECC 校验值(8bits),ECC 算法用得是经典的 Hsiao Hamming。

存储类型 ECC校验数据块大小 ECC校验值长度 ECC校验能力
Raw NAND 512 bytes 4 bytes 5-bit检错,4-bit纠错
MECC64 64bits 8bits 2-bit检错,1-bit纠错

1.2.2 ECC错误触发处理

ECC 错误分两种,分别是 1-bit 错误和 2-bit 错误(针对 64bits 数据而言)。从软件层面来看,1-bit 错误可以不用管,MECC64 模块会自动纠错。我们主要处理 2-bit 错误,由于 2-bit 错误仅能检错,无法纠错,所以发生了这个错误,就意味着读取的数据不可靠了。对于 1/2 bit错误,MECC64 均提供了中断响应(MECCx_INT_IRQn / MECCx_FATAL_INT_IRQn)。

这里还需要特别提醒一下,当读访问是 64bits 时,发生 ECC 错误仅产生一次 ECC 中断,但是如果是 32/16/8bits 读访问则会连续产生两次 ECC 中断,因为 ECC 校验总是以 64bits 为基本数据单元。

二、开启MECC64的步骤

2.1 激活MECC64特性

芯片出厂,默认是没有激活 MECC64 特性的,如果需要开启 MECC64,需要烧写 efuse,fusemap 中 0x840[2] 对应的是 MECC_ENABLE bit,我们需要将这个 bit 烧写成 1,才能激活 MECC64 特性。

c10a8cf4-a621-11ee-8b88-92fbcf53809c.png

2.2 SDK驱动初始化MECC64

然后可以直接利用 SDK 里的 fsl_mecc 驱动对 MECC64 模块进行初始化,代码非常简单,如下示例代码就是初始化 MECC1,使能 OCRAM1 区域的读写 ECC 功能:

#include"fsl_mecc.h"

voidinit_mecc(void)
{
mecc_config_tconfig;
MECC_GetDefaultConfig(&config);

//使能MECC64,并且指明受保护的OCRAM空间
config.enableMecc=true;
config.Ocram1StartAddress=0x20240000;
config.Ocram1EndAddress=0x202BFFFF;

//初始化MECC64模块,并且初始化OCRAM区域为全0
MECC_Init(MECC1,&config);
}

进 MECC_Init() 函数内部可以看到其对 OCRAM 区域的初始化用得是 64bits 赋值,这样可以保证正确生成首次 ECC 校验值,等 OCRAM 区域全部初始化过后,底下就可以对 OCRAM 进行任意数据长度的访问了。

c1153348-a621-11ee-8b88-92fbcf53809c.png

2.3 AXI方式读写OCRAM区域

现在我们直接调试 SDK_2_14_0_MIMXRT1170-EVKBoardsevkbmimxrt1170driver_examplesmeccmecc_single_errorcm7iar 工程,跑到 MECC 初始化结束后,打开 Memory 窗口,可以看到 OCRAM1 区域(0x20240000 - 0x202BFFFF) 已经是全 0,OCRAM1_ECC 区域(0x20340000 - 0x2034FFFF)也是全 0。但是往 0x20240020 处写入 8 字节测试数据后,并没有看到 OCRAM1_ECC 区域有数据上的变化,说明 ECC 校验码数据是受保护的,仅能被 MECC64 模块访问,对用户不可见。

c126aef2-a621-11ee-8b88-92fbcf53809c.png

三、激活MECC64特性后的影响

前面讲到 fusemap 中 0x840[2] 对应的是 MECC_ENABLE bit,这个 bit 被烧录为 1 后,我们还需要初始化 MECC64 模块里(打开MECC->PIPE_ECC_EN[ECC_EN])才能真正开启 OCRAM ECC 功能,但是别忘了芯片参考手册里 MECC64 章节有一个提醒:

c1325e64-a621-11ee-8b88-92fbcf53809c.png

是的,BootROM 上电运行,第一件事就是检查 fuse MECC_ENABLE bit 位,如果已经置 1,那就立刻开启 MECC1 和 MECC2 模块的 PIPE_ECC_EN[ECC_EN],即启用 OCRAM ECC,但是 BootROM 并没有初始化全部 OCRAM1 和 OCRAM2 区域,仅仅初始化了 OCRAM1 前 48KB,这部分是 BootROM 程序的 RW 区。

c140ba4a-a621-11ee-8b88-92fbcf53809c.png

痞子衡找了两块 RT1170 板卡做了对比测试(芯片设为 Serial Downloader模式,挂上 JLink 读取内存),未激活 MECC64 特性的芯片 OCRAM 区域读取出来全是随机值,而激活了 MECC64 特性的芯片仅 ROM RW 区被初始化了以及 OCRAMx_ECC 不可访问外,其余区域全是随机值(这里的读取其实不太可靠,毕竟使能了 ECC 后首次访问必须是写,然后才能正常被读写)。

c1446988-a621-11ee-8b88-92fbcf53809c.png

对于激活了 MECC64 特性之后的芯片,无论是设计下载算法还是 IDE 里的初始化脚本,或者 App 应用里的变量访问,如果涉及到 ROM RW 区之外的 OCRAM1,OCRAM2 区域,建议一律做先写后读处理,否则可能会出现奇怪的错误。

至此,i.MXRT1170 MECC64功能特点及其保护片内OCRAM1,2之道痞子衡便介绍完毕了,掌声在哪里~~~







审核编辑:刘清

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

    关注

    112

    文章

    16064

    浏览量

    176918
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1353

    浏览量

    114411
  • ECC
    ECC
    +关注

    关注

    0

    文章

    96

    浏览量

    20514

原文标题:MECC64给i.MXRT1170片内OCRAM带来了哪些变化?

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MXRT1170 的时钟架构

    目前 i.MXRT1xxx 系列主要分为 i.MX RT10xx 和 i.MXRT11xx 两大分支。这两个分支的时钟系统设计是有些差异的,不过总体来说,架构差别不大,我们以如下
    发表于 07-08 17:05 1001次阅读

    i.MXRT1170的相关资料分享

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的划时代新品i.MXRT1170。  自2017年开始,每年的6月25日恩智浦都会在北京举行
    发表于 11-04 08:38

    i.MXRT1170 eFuse空间访问可靠性的保护策略是什么

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略。  关于i.MXRT系列的eFuse/OTP,痞子衡之
    发表于 12-20 07:56

    i.MXRT1010, 1170型号样的SNVS GPR寄存器读写控制设计资料分享

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010, 1170型号样的SNVS GPR寄存器读写
    发表于 02-07 07:49

    求助,如何在没有互联网的情况通过以太网电缆将个简单的十六进制数从I.MXRT1170板发送到PC?

    我有I.MXRT1170 板。我是这个板的新手,我想通过以太网电缆向我的 PC 发送个简单的十六进制数字,如 0x12345678 或任何东西。任何人都可以通过告诉我如何去做以及我可以如何做
    发表于 03-17 07:20

    如何在IMXRT1170 CM7处理器启用OCRAM MECC

    我正在使用集成 IMX 的 TQ 的 STKa117xL 板。RT1170 处理器系列。我想在 OCRAM1OCRAM2 启用汉明纠错 (ECC)。处理器参考手册表明这是
    发表于 03-23 07:19

    s32k144evb如何与i.MXRT通信?

    你好呀,我正在为 EV Cluster 设计个项目。我计划将数据从 #S32K144EVB# 发送到 #i.MXRT1170# 以在我的显示器 #RK055HDMIPI4MAO# 显示它。我
    发表于 03-29 07:49

    如何确保 i.MXRT1176 从低功耗模式快速恢复?

    我们有个关于 i.MXRT1176 从低功耗模式恢复缓慢的问题引导 ROM 似乎停留在地址 0x223104,大约 15 秒。这似乎是 i.MXRT1170 上调试安全设计的部分,
    发表于 04-06 07:17

    J-Link工具i.MXRT的串行NOR Flash下载算法设计

    本 Release Note 看,痞子衡目前的 J-Link 版本不支持全部 i.MXRT 型号,那么如果想要支持新芯片(比如 i.MXRT1170),是不是定要重新安装最新 J-
    的头像 发表于 12-08 10:07 989次阅读

    痞子衡嵌入式:终于可以放开聊i.MXRT1170这颗划时代MCU了

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的划时代新品i.MXRT1170。  自2017年开始,每年的6月25日恩智浦都会在北京举行
    发表于 10-29 10:21 2次下载
    痞子衡嵌入式:终于可以放开聊<b class='flag-5'>一</b>聊<b class='flag-5'>i.MXRT1170</b>这颗划时代MCU了

    "痞子衡嵌入式:i.MXRT1010, 1170型号样的SNVS GPR寄存器读写控制设计"

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1010 1170型号样的SNVS GPR寄存器读写控
    发表于 12-04 11:36 0次下载
    "痞子衡嵌入式:<b class='flag-5'>i.MXRT</b>1010, <b class='flag-5'>1170</b>型号<b class='flag-5'>上</b>不<b class='flag-5'>一</b>样的SNVS GPR寄存器读写控制设计"

    i.MXRT1170串行NOR Flash双程序可交替启动设计

    i.MXRT10xx 样,这里要聊的还是在一片挂载在 FlexSPI 的串行 NOR Flash 里做冗余/双程序设计,就是下图中的 image L 和 image H,不涉及
    的头像 发表于 04-29 15:23 1000次阅读

    MCU时钟相关功能引脚作用介绍

    目前 i.MXRT1xxx 系列主要分为 i.MXRT10xx 和 i.MXRT11xx 两大分支。这两个分支的时钟系统设计是有些差异的,不过总体来说,架构差别不大,我们以如下
    的头像 发表于 07-07 09:27 5423次阅读

    i.MXRT1060和RT1170使用高效神经网络进行多人检测

    电子发烧友网站提供《在i.MXRT1060和RT1170使用高效神经网络进行多人检测.pdf》资料免费下载
    发表于 08-17 10:46 0次下载
    在<b class='flag-5'>i.MXRT</b>1060和RT<b class='flag-5'>1170</b><b class='flag-5'>上</b>使用高效神经网络进行多人检测

    不同J-Link版本对于i.MXRT1170连接复位后处理行为

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是不同J-Link版本对于i.MXRT1170连接复位后处理行为。
    的头像 发表于 08-08 15:29 331次阅读
    不同J-Link版本对于<b class='flag-5'>i.MXRT1170</b>连接复位后处理行为