【原创】i.MXRT J-Flash烧写算法使能eFuse熔丝位写入
临近年底,终于又憋了一篇文章出来,本来年初的时候是有计划把去年总结的一些东西整理下发布出来的,结果还是被工作和生活上各种琐事给耽搁了。哎,今年刚过了自己35岁的生日,眼瞅着这个人生节点过来了,未来该如何走呢,目前还真没想好。回首这不到一年的时间,发生了好多大事情,年初悲痛的东航事件,尴尬的上海疫情封城,全国人民直播观看佩罗西访台,俄乌战争从年初打到现在还没完,到现在刚刚结束的二十大,一年的时间很短,短到等我意识到写第二篇博客时已经快要到年底了,一年时间又很长,长到这么一年的时间里会发生这么多的事情。哎,珍惜身边人,继续提升自己,然后迎接即将到来的2023(咳咳,还有俩月。。。)
好吧,前文还在各种感慨各种装x然后立刻切换到技术上来貌似有点生硬有点突兀,不过看我博客的人都习惯我唠叨了,不影响大家学习知识就好,哈哈。。。下文进入正题。
i.MXRT系列在Internal Boot模式下正常启动时,默认配置会在POR_B复位管脚上升沿的时刻从Boot CFG GPIO管脚获取到电平状态并装载到SRC_SBMR1寄存器,然后BOOT_ROM会以该寄存器的值来决定外部启动设备的类型和相关的启动配置,比如Flexspi接口启动还是SEMC接口启动还是SDHC启动,还有Flexspi是Norflash启动还是Nandflash启动,以及启动时的时钟频率和使用的哪组管脚配置,具体请查询i.MXRT RM手册SystemBoot章节(注意不同RT系列,它的BOOT_CFG对应的IO管脚可能是不一样的,下图是RT1060的)。



不过在实际应用中,有些系统设计对IO利用率要求较高,由于可用IO数量不够而使用到BOOT_CFG相关的IO管脚同时外部电路又没办法保证在刚上电时POR_B上升沿时刻这些管脚的电平状态是可控的,这种情况下如果继续使用Internal Boot模式下的默认配置则可能会由于启动配置装载的IO状态不是预期的进而导致MCU启动失败(可通过dump SRC_SBMR1寄存器看到BOOT_CFG信号不正常非预期)。针对这种情况,i.MXRT在Internal Boot模式下提供了从内部eFuse熔丝位获取启动配置的方式,即MCU上电复位后不再从BOOT_CFG IO管脚电平获取启动配置而是使用内部eFuse的配置,具体见RM手册SystemBoot章节如下图,当内部熔丝位BT_FUSE_SEL写成1之后(出厂默认为0),GPIO状态不再决定启动配置而是由eFuse熔丝内部的BOOT_CFG1和BOOT_CFG2位决定。


从上述解释说明我们知道了通过烧写内部eFuse熔丝位BT_FUSE_SEL和BOOT_CFG1和2可以决定RT的启动配置,那这两个熔丝位的位置具体在哪里以及如何写入。从RT的RM手册里Fusemap章节找到boot fusemap table如下,可以看到BOOT_CFG1和2位于eFuse地址0x450的[15:0]位,BT_FUSE_SEL位于地址0x460的bit4位,这些eFuse位出厂默认均为0,如果用户的外部Flash是我们平时最常用的QSPI Flash的话,则从下图eFuse位说明可以看到BOOT_CFG1和2位不需要再写入(保持0即可),我们只需要把BT_FUSE_SEL写1即可(注意eFuse只能从0写成1,而且只能写一次)。

本项目最新的Flash烧写算法新加入了对eFuse熔丝位的写入支持,一旦使能了该功能后,用户在给RT下载更新程序的同时也会写入eFuse,对用户来说是无感的,最大程度减少用户额外的操作,不过对eFuse的写入大家一定要谨慎,因为eFuse一旦从0写成1就无法再逆向回去了 (这也是叫做熔丝位的原因)。如下图,加入了eFuse的写入,不过默认是不生效的,用户如果想使能eFuse的烧写的话,需要打开BT_FUSE这个宏然后重新编译生成对应的elf文件,再参考我之前的一篇文章<All in One i.MXRT1050/RT1020 SPI Flash Algorithm for J-Flash>更新到J-Flash的支持里面去。

对于上述的eFuse写入代码,这里简单解释一下,由于eFuse是一块独立的物理存储空间不在CPU内部的4G可寻址空间范围内,要对其进行操作需要借助于OCOTP控制器,而eFuse的地址和OCOTP里的地址有个映射关系即eFuse address = OCOTP index * 0x10 + 0x400,所以上图中我们传入OCOTP的参数0x06对应的是eFuse空间中的0x460,也就是BT_FUSE_SEL熔丝位所在的物理空间地址。如果用户想要操作其他eFuse空间,则可以参考该代码中的API用法自行添加和修改,但是一定要注意对eFuse的操作是一次性的。
本文的最新代码和文档我已update到我的github仓库,欢迎下载和star。老话继续,本文首发ChinaAET,续发于CSDN和博客园,未完待续!
【原创】i.MXRT J-Flash烧写算法使能eFuse熔丝位写入的更多相关文章
- DM6446开发攻略:UBOOT-2009.03移植及nand flash烧写
有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot-2009.03差别不大,只不过这个u-boot-2009.03是从TI的网站上下载 ...
- ADS 下 flash 烧写程序原理及结构
本原理:在 windows 环境下借助 ADS 仿真器将在 SDRAM 中的一段存储区域中的数据写到 Nand flash 存 储空间中.烧写程序在纵向上分三层完成: 第一层: 主烧写函数(完成将在 ...
- 【DM642学习笔记四】flash烧写过程——错误记录…
(欢迎批评指正) 一,打开.cdd配置文件时出错: 解决:在FlashBurn配置窗口中,Conversion Cmd一栏可不用管: 菜单Program—Download FBTC,load ...
- S03_CH11_基于TCP的QSPI Flash bin文件网络烧写
S03_CH11_基于TCP的QSPI Flash bin文件网络烧写 11.1概述 针对ZYNQ中使用QSPI BOOT的应用,将BOOT.bin文件烧写至QSPI Flash基本都是通过USB C ...
- s3c2440 J-flash 烧写 NOR flash
视屏教程里是在NOR Flash 烧写了一个supervivi然后通过superViVi配合DNW下载Uboot程序到landflash第零块,由于我电脑室64位win7,官方提供的USB下载驱动不能 ...
- DSP/BIOS使用之初窥门径——滴答时钟及烧写Flash
操作平台和环境 DSP型号:TMS320C6713 仿真器:XDS510PLUS Flash型号:AM29LV800BT或AM29LV800BT都试过(一般接口一样,区别不大) RAM型号:MT48L ...
- S03_CH12_基于UDP的QSPI Flash bin文件网络烧写
S03_CH12_基于UDP的QSPI Flash bin文件网络烧写 12.1概述 为了满足不同的需求,本例程在"基于TCP的QSPI Flash bin文件网络烧写"上进行修改 ...
- 【DSP开发】TMS320C66x DSP SPI Nor Flash的程序烧写
经过一段时间的研究终于把TMS320C6657单核和双核的SPI Nor Flash的程序烧写调通了.工具都是前辈的工作,有需要的可以留下邮箱,我有空可以发. 原理参考钱丰的<TI c66x 系 ...
- 【DM642学习笔记三】flash的烧写
ICETEK-DM642-PCI板上的29L008B芯片提供了8M位的Flash空间(访问地址空间是CE1,90000000h~90080000h).主要用于自启动功能和存储FPGA的配置数据. 一. ...
随机推荐
- 总结-一本通提高篇&算竞进阶记录
当一个人看见星空,就再无法忍受黑暗 为了点亮渐渐沉寂的星空 不想就这样退役 一定不会鸽の坑 . 一本通提高篇 . 算竞进阶 . CDQ & 整体二分 . 平衡树 . LCT . 字符串 . 随 ...
- 【JDBC】学习路径4-分页查询
第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...
- 一 策略模式 来自CBF4LIFE 的设计模式
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到后是周瑜陪了夫人又折兵呀,那咱们先看看这个场景是什么样子的. 先说这个场景中 ...
- OpenJudge 1.5.24 正常血压
24:正常血压 总时间限制: 1000ms 内存限制: 65536kB 描述 监护室每小时测量一次病人的血压,若收缩压在90 - 140之间并且舒张压在60 - 90之间(包含端点值)则称之为正常,现 ...
- 从原理剖析带你理解Stream
摘要:Stream是jdk1.8给我们提供的新特性 本文分享自华为云社区<深入理解Stream之原理剖析>,作者: 李哥技术 . Stream是jdk1.8给我们提供的新特性,主要就是允许 ...
- format添加未知个参数方法
一个python巧妙技巧,分享给大家 我的需求是将一个dict的键都format输出,用到了*对字典解包 data = {a: 1, b: 2...} msg = f"{'{} '*len( ...
- VS Code中Markdown常用插件
目录 目录 1.Markdown All in One 2.Markdown Preview Enhanced 3.markdownlint 1.Markdown All in One 自动生成目录 ...
- python3之35个关键字详解
一. python35个关键字列举: help("keywords")查看运行结果: 1. and.or.not 2. if.elif.else3. for.while4. Tru ...
- JMeter测试dubbo接口总结
Jmeter 测试dubbo 接口 1. 安装JMeter 安装到/usr/local下 2. github上下载 jmeter-plugins-dubbo-x.x.x-jar-with-depend ...
- shell脚本中执行source命令不生效的解决办法
一个shell脚本文件中有一个source命令,使用bash a.sh命令执行后source命令进行验证没有生效. 这是因为在shell脚本中执行source会看到效果,但是shell脚本执行完后再次 ...