大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略

  关于i.MXRT系列的eFuse/OTP,痞子衡之前在介绍Boot时写过两篇,分别是针对RT1050的《eFuse及其烧写方法》 和针对RT600的《OTP及其烧写方法》,今天要介绍的i.MXRT1170 eFuse其实是这两者的融合,在空间组织上(尤其是Shadow Register)更像RT1050,但是在访问可靠性保护策略上又接近RT600。关于访问可靠性保护策略,痞子衡之前没有提及,今天咱们就展开聊一聊。

一、eFuse基本情况

  eFuse是i.MXRT1170内嵌的一块OTP(One Time Programmable) memory,仅可被烧写一次(这里指的是bit位从0到1不可逆),但可以被多次读取。eFuse memory的烧写情况根据可靠性保护策略不同而不同。如果被冗余方法保护,那么eFuse是按bit被烧写的;如果是被ECC方法保护的,那么eFuse是按word被烧写的。

  i.MXRT1170的eFuse memory用户地址空间有8Kbit(地址范围为0x900 - 0x18F0,低4bit地址位无效),分为32个BANK,每个BANK含8个word(1word = 4bytes)。下图中0x00 - 0xFF是eFuse的用户bank word索引地址,其与eFuse空间地址对应关系是:

fuse_address = user_fuse_index * 0x10 + 0x900

  此外i.MXRT1170的eFuse memory还有额外的0.5Kbit地址空间(范围为0x800 - 0x8F0,低4bit地址位无效),用于存放厂商(NXP)配置以及一些敏感配置,其与eFuse空间地址对应关系是:

fuse_address = supp_fuse_index * 0x10

  不管是8Kbit用户空间还是额外的0.5Kbit敏感空间,我们都是可以访问的,其index其实是统一编址的,下面这个index才是真正用于blhost工具或者OCOTP API的地址参数:

fuse_address = fuse_index * 0x10 + 0x800

  关于i.MXRT1170的eFuse一般特性(比如Lock属性、OCOTP控制器、Shadow Register)可参考痞子衡在文章开头给出的两篇文章,这里不予赘述。

二、eFuse烧写方法

  有三种方法或工具可以帮助烧写eFuse,我们以烧写和回读eFuse地址0xA80(MAC1_ADDR)为例,将0x12345678烧写进MAC1_ADDR并回读。根据上面公式我们可以得出 fuse_index = (fuse_address - 0x800) / 0x10 = 0x28,这个fuse_index便是底下我们传给烧写工具的地址。

2.1 blhost工具

  blhost是个上位机命令行工具,其能正常工作的前提是预先加载一个特殊flashloader程序(\SDK_x.x.x_MIMXRT1170-EVK\boards\evkmimxrt1170\bootloader_examples\flashloader)进MCU来实现eFuse烧写,flashloader中集成了OCOTP驱动。关于blhost使用方法,详见痞子衡Boot系列文章,这里仅列出两个命令:

\NXP-MCUBootUtility\tools\blhost2_3\win> .\blhost.exe -u -- efuse-program-once 0x28 12345678
\NXP-MCUBootUtility\tools\blhost2_3\win> .\blhost.exe -u -- efuse-read-once 0x28

2.2 OCOTP驱动

  如果你觉得blhost工具这一套太复杂,可以直接借助SDK包里的ocotp例程(\SDK_x.x.x_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\ocotp),代码也是非常简单清晰:

#include "fsl_ocotp.h"

int main(void)
{
status_t status = kStatus_Success;
uint32_t fuseData = 0U; /* 初始化OCOTP模块 */
OCOTP_Init(OCOTP, 0U); /* 将word数据(0x12345678)写入fuse index为0x28的eFuse memory里 */
status = OCOTP_WriteFuseShadowRegister(OCOTP, 0x28, 0x12345678); /* 从fuse index为0x28的eFuse memory处读出一个word*/
status = OCOTP_ReadFuseShadowRegisterExt(OCOTP, 0x28, &fuseData, 1);
}

2.3 MCUBootUtility工具

  如果你觉得blhost使用不友好,OCOTP驱动又需要改代码和下载运行,那么还有一个工具可以帮到你,那就是痞子衡开发的MCUBootUtility图形界面工具,小白都能轻松上手烧写eFuse:

三、访问可靠性保护策略

  eFuse的特性其实主要是OCOTP模块决定的,翻开i.MXRT1170参考手册的OCOTP章节的Features小节,可以看到其比RT1050 OCOTP多了如下这三行:

• Supports ECC mode programming and reading for MTR fuse words by SkyBlue IPS bus
• Supports ECC mode programming and reading for all the user fuse words
• Supports redundancy mode programming and reading for all the supplementary fuse words

  简单地说就是eFuse空间被分成了两类,一类受ECC保护,一类受redundancy(冗余)保护,这是本文要介绍的重点。

3.1 冗余保护

  redundancy(冗余)保护是比较简单的访问可靠性保护策略,这个策略基本设计思想就是冗余,将fuse word一分为二,低16bit是用户操作区,高16bit是系统冗余区。烧写时用户只需要管低16bit,高16bit则由系统自动完成复制烧写。回读时得到的结果则是低16bit与高16bit的或(OR)结果。这样的好处就是除非用户操作区(低16bit)和系统冗余区(高16bit)均发生错误才会导致访问不可靠。

  redundancy(冗余)保护虽然一定程度上提高了访问可靠性,但代价是牺牲了一半存储空间,所谓鱼和熊掌不可兼得,这个也是可以理解的。下面这些eFuse区域是受redundancy(冗余)保护的,从功能上看这些区域是按bit定义的,功能比较分散,所以存在多次烧写的需求,适用redundancy(冗余)保护。

3.2 ECC保护

  ECC保护是相对复杂的访问可靠性保护策略,ECC算法是采用经典的SEC-DED(纠正1bit,检查2bit),每个fuse word算出一个ECC校验值(7bit),这个校验值紧跟着存在efuse word后面(bit31:0是用户区,bit38:32是ECC区),ECC区无法被用户直接访问。如果在回读时发生ECC错误,可在HW_OCOTP_OUT_STATUS0寄存器(这是RT1170 OCOTP模块新增的寄存器)里如下bit找到信息。

  ECC保护极大地提高了访问可靠性,但综合eFuse特点其代价就是整个fuse word仅可被烧写一次(即使你一次只改一个bit)。下面这些eFuse区域是受ECC保护的,不过从功能上看这些区域功能比较单一,一般都是一次性烧写,所以也适用ECC保护。

  至此,恩智浦i.MXRT1170的eFuse空间访问可靠性保护策略痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:揭秘i.MXRT1170 eFuse空间访问可靠性的保护策略(冗余与ECC)的更多相关文章

  1. 痞子衡嵌入式:MCUXpresso IDE下在线调试时使用不同复位策略的现象总结

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下在线调试时使用不同复位策略的现象总结. 本篇实际上是<IAR在线调试时设不同复位类型可能会导致i.M ...

  2. 痞子衡嵌入式:揭秘i.MXRT1170上用J-Link连接复位后PC总是停在0x223104的原因

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上安全调试策略实现对JLink调试的影响. 痞子衡之前写过一篇旧文 <i.MXRT600的ISP模式下用J-L ...

  3. 痞子衡嵌入式:揭秘i.MXRT1170上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1060/1010上串行NOR F ...

  4. 痞子衡嵌入式:测一测i.MXRT1170 Raw NAND启动时间(从POR到进App的Reset_Handler)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 Raw NAND启动时间. 关于i.MXRT1170这颗划时代的MCU,痞子衡去年10月在其刚发布的时候, ...

  5. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7内核的FlexRAM ECC功能. ECC是"Error Correcting ...

  6. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M4 L-MEM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M4内核的L-MEM ECC功能. 本篇是 <简析i.MXRT1170 Cortex-M ...

  7. 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...

  8. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  9. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的eFUSE. 在i.MXRT启动系列第二篇文章 Boot配置(BOOT Pin, eFUSE) 里痞子 ...

随机推荐

  1. XSS编码问题的个人总结

    XSS也太太太难了,主要也是因为自己没花时间集中. 文章脉络:根据我粗浅的理解,从开始学习XSS到现在,从一开始的见框就插到现在去学构造.编码,首先需要的是能看懂一些payload,然后再去深入理解. ...

  2. 一个关于HttpClient的轮子

    由于本文较长,需要耐住性子阅读,另外本文中涉及到的知识点较多,想要深入学习某知识点可以参考其他博客或官网资料.本文也非源码分析文章,示例中的源码大多是伪代码和剪辑过的代码示例,由于该轮子为公司内部使用 ...

  3. Linux学习,ACL权限管理

    1.setfacl 得到指定文件的ACL权限 -m       表示后续有参数,不可与 -x参数配合使用 -x         删除后续的acl参数,不可与 -m 配合使用 -b        删除所 ...

  4. Linux 下普通用户切换root超级管理员用户的几种方法

    1.在命令行下输入:sudo su ,之后会提示你输入密码 2.此时输入你之前设定的密码既可: 3.但有时会提示你该普通用户不在sudoers文件里 4.此时可以使用以下命令来切换root用户权限:s ...

  5. Mycat使用配置实践

    本来写了好多,关于配置的解释和使用以及注意,但是发现有点啰嗦含金量也不高,所以直接把实际使用的一个例子放着吧,供参考. <!DOCTYPE mycat:schema SYSTEM "s ...

  6. JDK安装详细步骤

    JDK的下载与安装 在java实际编程的道路上,迈出的第一步必定是JDK的安装,因为JDK是一切java的基础,这里给出在Windows10 x64版本下的JDK1.8的详细安装步骤,其他的Windo ...

  7. 解决xcode ***is missing from working copy

    这是由于SVN置顶文件导致的,cd 至项目根目录 命令行 输入 find . -type d -name .svn | xargs rm -rf

  8. AJ学IOS(06)UI之iOS热门游戏_超级猜图

    AJ分享,必须精品 先看效果图 思路 需求分析 1,搭建界面 1>上半部分,固定的,用Storyboard直接连线(OK) 2>下半部分,根据题目的变化,不断变化和调整,用代码方式实现比较 ...

  9. redis list 基本操作

    写在前面的话 本篇笔记写在笔者刚工作时.如有问题,请指教. 简介 list是链表,redis list的应用场景很多,也是Redis 最重要的数据结构之一,比如微博的关注列表,粉丝列表,消息列表等功能 ...

  10. Ajax 简述与基础语法

    目录 Ajax 1. 原生 JS 实现 Ajax 2. 使用 Ajax 实现异步通信 a. Ajax 的基础语法 b. 用 Ajax 传递数据 i. 传递字符串数据 ii. 传递 JSON 数据 3. ...