痞子衡嵌入式:MCUBootUtility v2.3.1发布,解决了长久以来非空flash可能无法下载的问题
--
痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3)发布过去3个月了,这一次痞子衡为大家带来了小版本升级v2.3.1(第一次做x.y.z中z级别更新),这个版本主要有两个比较重要的改动需要跟大家特别说明一下。
一、v2.3.1更新记录
二、两个不可忽视的更新
> 改进: 在使用Flashloader里擦除操作时,某些情况下需要先检查目标区域是否为空
> 修复: 当连接得到的flash Page/Sector/Block Size信息有误时,无法做进一步下载
2.1 确定指定Flash区域为非空后再擦
我们知道,工具对于i.MXRT1xxx系列开发板的外挂Flash擦写支持是通过加载二级Flashloader来实现的,而Flashloader来自于SDK包中的\boards\evkimxrt1xxx\bootloader_examples\flashloader工程。
Flashloader中集成了完整的FlexSPI NOR Flash驱动,对于擦除操作,我们知道很多Flash都同时支持4KB和64KB擦除粒度,因为Flashloader是因i.MXRT芯片而异的,每个芯片的具体Flashloader对于擦除的处理不尽相同,目前主要有两个策略:
- 策略1:永远用64KB的粒度去做擦除。
- 策略2:混合使用4KB和64KB的粒度来做擦除,大区域先用64KB,到小区域再用4KB细化。
对于工具v1.1及之前版本,这两种策略的Flashloader配合工具使用都不会有问题。但是从v1.2开始,工具配合使用策略1的Flashloader会有一些问题。目前已知RT1050在HAB加密模式下,一键下载App后去回读会发现偏移0x2000之后本该是App的地方全是0xFF,没能正确下载,原因是工具流程里会在下载完App之后写一次FDCB,而做擦除时因为粒度是64KB,所以误擦了已下载的App。
因此v2.3.1里的解决方案是,先判断FDCB区域是否为全0xFF,如果是的话,就不做擦除了,直接写FDCB。这个不是完美的解决方案,最好的方案还是修改Flashloader去使用策略2的擦除方法。
2.2 不依赖读回的Page/Sector/Block信息去下载
工具在一键下载前首先需要连接上主芯片,在连接过程中会在左下角芯片状态窗口显示Flash的Page/Sector/Block信息,这个信息是从哪里来的呢?不同的情况下来源不同:
- 情况1:如果当前Flash是全空的(或者没有FDCB),那么Flashloader会读取Flash中的SFDP表,根据SFDP表中的信息(包含Page/Sector/Block Size)自动生成用于启动的512bytes的FDCB写入Flash的起始地址处,并在软件界面同步显示。
- 情况2:如果Flash中已有FDCB(这个FDCB可能来自于SDK里的启动头,也可能是Flashloader读SFDP表生成的),那么Flashloader便会复用这个信息,不再重新写入FDCB。
对于情况2中的FDCB来自于SDK里的启动头,如果启动头中没有填充有效的Page/Sector/Block Size信息,那么在工具窗口你会看到Page/Sector/Block Size = 0x0/0xFFFFFFFF的情况下,在这种情况下工具无法再进行后续下载,因为v2.3之前工具会用Page/Sector Size对擦除或烧写的长度做对齐,显然无法用0x0/0xFFFFFFFF做有效的对齐。
v2.3.1做了改进,不再强制用Page/Sector Size对擦除或烧写的长度做对齐,因为Flashloader里本身就对传入的区域参数做了对齐处理。
至此,这次更新的主要特性便介绍完了。MCUBootUtility项目地址如下 。虽然当前版本(v2.3.1)功能已经非常完备,你还是可以在此基础上再添加自己想要的功能。如此神器,还不快快去下载试用?
欢迎订阅
文章会同时发布到我的 博客园主页、CSDN主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:MCUBootUtility v2.3.1发布,解决了长久以来非空flash可能无法下载的问题的更多相关文章
- 痞子衡嵌入式:MCUBootFlasher v3.0发布,为真实的产线操作场景而生
-- 痞子衡维护的NXP-MCUBootFlasher工具(以前叫RT-Flash)距离上一个版本(v2.0.0)发布过去一年半以上了,这一次痞子衡为大家带来了全新版本v3.0.0,从这个版本开始,N ...
- 痞子衡嵌入式:一种i.MXRT下从App中进入ROM串行下载模式的方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下在App中利用ROM API进ISP/SDP模式的方法. 我们知道i.MXRT系列分为两大阵营:CM33内核的i.MXRT ...
- 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...
- 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...
- 痞子衡嵌入式:在i.MXRT1170上启动含DQS的Octal Flash可不严格设Dummy Cycle (以MT35XU512为例)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是Octal或Hyper Flash上DQS信号与Dummy Cycle联系. 关于在 i.MXRT 上启动 NOR Flash 时如何设 ...
- 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事(SR寄存器BP[x:0]位)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事. 痞子衡最近在支持一个 i.MXRT1170 欧 ...
- 痞子衡嵌入式:MCUBootUtility v2.3发布,这次不再放过任何一款Flash
-- 痞子衡的 NXP-MCUBootUtility 开源项目自2018年8月27日第一笔提交至今已有21个月,目前累计代码已近50000行.相信这个工具为大家开发 i.MXRT 项目提供了一些便利, ...
- 痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说 ...
- 痞子衡嵌入式:MCUBootUtility v3.0发布,开始支持LPC, Kinetis啦
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.4.0)发布过去2个半月了,这一次痞子衡为大家带来了全新版本v3.0.0,从这个版本开始,NXP-MCUBootUtil ...
- 痞子衡嵌入式:MCUBootUtility v2.0来袭,i.MXRT1010哪里逃
-- 恩智浦半导体从2017年10月开始正式推出业内首款跨界处理器-i.MX RT系列,如今距离该系列第一款i.MXRT1050发布已过去近2年,i.MX RT系列在行业里应用越来越广泛,i.MX R ...
随机推荐
- linux篇之常用的文本操作命令
命令 功能 cat .tac 显示文本文件 ...
- 拉取docker容器后启动容器的脚本
我暂且不论如何拉取docker镜像.我使用sudo docker images查看拉取的镜像. 譬如我拉取nvidia的pytorch镜像后,想要创建一个实例或启动某实例,可使用如下脚本(如果本地没有 ...
- 实时平台-Flink篇
Flink任务统一通过实时平台统一管理的好处不用多说,这里简单介绍下实时平台-Flink模块的功能以及实现. 主要分为两大块 一.任务管理 任务管理主要包括任务的提交.暂停.下线.重启.历史版本回滚. ...
- Java-【Arrays类】和【System类】
Arrays类 [基本介绍] JDK中提供了一个专门用于操作数组的工具类,即Arrays类,位于java util 中. 用前需导包:import java.util.Arrays; [常用方法] 返 ...
- 【STM32】简述串口中断流程
串口中断的实现(函数名参考MX生成代码) 初始化: 1.void MX_USART1_UART_Init() 基于UART_HandleTypeDef huart,对huart的成员进行配置,并将数据 ...
- JS缓存三种方法_sessionStorage_localStorage_Cookie
1.sessionStorage:临时的会话存储 只要当前的会话窗口未关闭,存储的信息就不会丢失,即便刷新了页面,或者在编辑器中更改了代码,存储的会话信息也不会丢失. 2.localStorage:永 ...
- PHP Redis - String (字符串)
string 是 Redis 最基本的类型,与Memcached类似,一个 key 对应一个 value string 类型是二进制 安全的.这意味着 Redis 的 string 可以包含任何数据. ...
- 微服务注册到Nacos上的Ip错误,是内网ip不是公网ip
spring.cloud.nacos.discovery.ip = 本机公网IP spring.cloud.nacos.discovery.port = 服务端口
- 双指针_Leetcode刷题_13/100
算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务.也可以延伸到多个数组的多个指针. 若两个指针指向同一个数组,遍历的方向相同且不会相交,则也称为滑动窗口: 若两个指针指向同一 ...
- Python 时间日期获取(今天,昨天或者某一段时间)
日常使用的时间函数: 昨天,或者N天的日期 import time def time_stamp(days): hours = int(days) t = time.strftime("%Y ...