请选择 进入手机版 | 继续访问电脑版
查看: 1403|回复: 1

[分享] i.MX RT1170中存储器的ECC应用

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3297

    主题

    6542

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31909
    最后登录
    2024-3-29
    发表于 2021-2-19 11:24:59 | 显示全部楼层 |阅读模式
    i.MX RT1170中存储器的ECC应用
    一、概述
    由于i.MX RT1170涉及到汽车级应用,所以相对于i.MX RT1050/60在ECC的支持上有较大的增强。
    ECC是Error correcting codes的英文缩写,字面意思是纠错码。
    这里面有两层含义,一是出现错误了要能检测出来。二是出了错了要能纠正错误。
    检测错误和纠正错误的算法这里小编并不打算做深入的阐述。但是从概念上说,我们要明白,针对一些有高安全等级要求的应用,例如工业和汽车级的应用场景等,我们需要系统在存储器读取出错的时候,能够告知应用系统。尤其是在不能完成自动纠错的情况下,需要应用系统来决定如何处理当前的错误。
    在ECC相关的应用中,需要具体考虑的问题有:
    1、在i.MX RT1170上有多个连接方式不同的存储器,包括TCM、Cache、OCRAM、AXI总线上的外部存储器和AHB总线上的外部存储器等,谈ECC操作需要指出目标存储器是哪一个?如何具体的操作/配置每一组存储器的ECC?
    2、除了存储器的ECC,还有外设的ECC。
    3、ECC的工作机制,当ECC错误产生时,如何捕捉错误。这里也涉及到ECC的injection操作来检验异常系统是否正常在工作。
    4、Fuse的配置。i.MX RT1170有的ECC是和fuse有关系的,如果要使能ECC,也需要先使能对应的fuse位。
    5、ROM相关的配置。有的配置是需要ROM操作的,我们也需要了解实际中哪些配置是ROM已经做了的,哪些事我们需要在应用中去做的配置。
    本文将重点讨论存储器的ECC。
    与ECC相关的外设包括:FlexSPI,Fuse,OCOTP,CSI,MIPI CSI,MIPI DSI,ENETQOS和FLEX CAN等不在本文讨论之列。


    二、i.MX RT1170 ECC特性列表
    1. ECC特性列表(提示: 左右滑动查看表格)
    22.png
    2. 与Fuse相关的特性列表



    对于OSC需要的Fuse,必须要使能才能在SOC层面实现ECC。对于ROM需要的Fuse,配置后,ROM会使能对应的软件配置以及做preloading(带ECC的memory必须要先写一遍才能正常使用)。
    ItemsFuse  requirement - SOCFuse  requirement - ROM
    [CM7] TCM from CM7 FlexRAM-0x840[15],  enable +  preloading
    [CM7] Cache--
    [CM4] TCM/LMEM0x840[2]0x840[2],  enable +  preloading
    [CM4] cache--
    [CM7/CM4] OCRAM1/OCRAM20x840[2]0x840[2],  enable +  preloading
    [CM7/CM4] OCRAM from CM7 FlexRAM0x840[2]-
    [CM7/CM4] OCRAM from CM4 TCM/LMEM0x840[2]0x840[2],  enable +  preloading
    [CM7/CM4] XECC0x840[3]-
    3. 各存储器区的软件ECC使能 (提示: 左右滑动查看表格)
    23.png
    三、ECC相关的Fuse

    和ECC相关的Fuse请参考下表:
    24.png
    需要注意的是,使能Fuse并不能直接使能ECC的相关功能,还需要软件进行配置才能最终使能ECC功能。

    四、ECC Injection
    ECC injection是指为了验证ECC的特性,我们人为的注入位错误,这样在读写的时候,就会触发ECC异常。
    这是一种人为检测ECC功能是否正常的手段。主要是用于我们在大多数正常情况下,由于没有真正实际的ECC错误,而无法验证的ECC的相关功能。
    这里需要注意,由于我们使能ECC injection后,这个是不区分master的,所以我们一般在启动外设前先inject一些ECC错误到固定的地址,然后disable injection的特性。这样大部分存储器可以正常的工作,当我们去访问固定的地址时将触发ECC异常,以确认ECC能处于正常的工作状态。


    五、ECC相关的SDK例程
    ECC相关的SDK例程请参考SDK包中以下目录部分:


    boards\evkmimxrt1170\driver_examples\xecc
    boards\evkmimxrt1170\driver_examples\mecc


    六、ECC应用的一些注意事项
    1、带ECC的内存区域,上电后,通常需要先写入一遍,才能正常读,否则有可能会触发ECC错误异常(取决于上电后内存的默认值能否通过ECC校验算法)。
    这里要注意执行写入操作的代码不能使用目标内存空间。
    2、有些ECC的算法(比如MECC)是针对64位数据块的,如果写32位数据,实际执行的流程是读64位、更新其中的32位数据,然后再整个写回64位。
    这样会导致的问题是,对于没有先写入64位数据的内存,我们表面上看是做了一个写操作,但是实际上却是先触发了64位的读,这样有可能会触发ECC异常。
    3、ROM对ECC段做preloading前,会先检查SRSR的状态,仅仅当POR的时候,ROM才会做preloading,把整个带ECC的存储器先刷一遍(用0去填充一遍)。
    在ROM完成preloading的前提下,应用代码才能够直接使用带ECC特性的内存块。
    而SRSR的寄存器在SNVS不掉电的情况是不会丢失的,这有可能会导致重新上电后ROM并不初始化带ECC的存储区域。
    针对这种情况,我们在SDK里面已经做了读取SRSR和清SRSR的操作。
    如果用非SDK的代码做相关的应用,需要注意这一点。
    4、对于OCRAM from CM4 TCM/LMEM的注意事项:
    ·这部分ECC的使能和关闭只能在CM4做。
    ·对于单核芯片,这块区域ECC是使能的。

    ·单此区域ECC使能时,不能触发CM7ECC 中断(ERR050634)。

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 1334 天

    [LV.10]以坛为家III

    88

    主题

    4290

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9022
    最后登录
    2024-3-29
    发表于 2021-2-20 20:01:17 | 显示全部楼层
    我们在存储数据里面自己添加了CRC的校验码,来保证数据回读的有效性。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-3-29 14:35 , Processed in 0.114454 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表