痞子衡嵌入式:记录为i.MXRT1060更换较大容量Flash(IS25LP064A_IS25LP128F)导致二级App异常启动问题解决全过程(上篇)
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是为i.MXRT1060更换较大容量Flash导致二级App异常启动问题。
痞子衡最近在支持一个 RT1062 国外客户项目,客户在项目预研阶段为 RT1062 搭配的启动 Flash 是较小容量 IS25LP064A,接近量产的时候需要改用较大容量 IS25LP128F。客户本以为只是一个简单的同厂家同系列 Flash 容量小升级而已,谁知道竟然遇到奇怪的芯片启动问题!在痞子衡和客户一番沟通之后,认定确实是个非常奇怪的案例,且听痞子衡慢慢道来:
本篇是上篇,主要是抛出问题,希望大家能够留言积极回复,给出你认为出问题的地方。
一、问题描述
客户项目代码分为两个部分,一个是从 0x6000_2000 处开始链接的 L2 Boot,还有一个是 0x6040_0000 处开始链接的 App,RT1062 芯片上电 BootROM 加载 L2 Boot 运行,L2 Boot 再跳转到 App 执行。
客户首先在小容量 IS25LP064A 上通过了代码测试,借助恩智浦官方下载工具 MCUXpresso SEC Secure Provisioning Tool (当然这里痞子衡更推荐的是 NXP-MCUBootUtility),先烧写 App,再烧写 L2 Boot(因为 App 由 L2 Boot 直接引导执行,所以其无需 RT 启动头,即使后下载的 L2 Boot 启动头会覆盖先下载的 App 启动头也无关紧要)。
客户最终希望能给 L2 boot 做签名启动,App 无需签名,所以 RT1062 内部 fuse SEC_CONFIG[1:0] 需要被烧写成 2'b1x - HAB Closed。客户同时做了两种测试,L2 boot 无签名情况以及有签名情况,均正常工作,因此可以证明当前 L2 Boot 和 App 代码设计在 IS25LP064A 上跑一切正常,也和是否签名无关(RT1062 HAB 状态)。
然后客户换了一块新板子,上面放置得是大容量 IS25LP128F,程序无任何改动,下载流程也一样,在 L2 Boot 无签名的时候,也能够正常工作。但是一旦给 L2 Boot 加了签名,这时候 L2 Boot 能够正常启动(有 Log 打出),但是 App 却没有正常启动(无 Log 输出),并且从 Log 输出来看,L2 Boot 一直在重复启动。
看到这你的第一反应是什么?根据控制变量法,似乎问题是由换到 IS25LP128F 引起的,也似乎是 L2 Boot 加了签名引起的。但是客户之前的测试能够证明,单独改动这两个 X 因素之一并不会导致问题,然而合在一起就引发了问题。
二、现有测试与分析
目前客户暂未分享其项目代码给痞子衡,为了快速验证客户这种情况,痞子衡在恩智浦开发板 RT1060-EVKC 上做了类似测试,在 \SDK_24_12_00_MIMXRT1060-EVKC\boards\evkcmimxrt1060\demo_apps\hello_world 例程基础上(flexspi_nor_debug) 上创建了两个 target,一个是 flexspi_nor_boot(增加 app 跳转代码),另一个 flexspi_nor_app(去掉 BOOT_HEADER,然后修改链接地址到 0x6040_0000)。
分别编译出 Mini L2 Boot 和 Mini App 之后,按照客户同样下载流程(用 SEC 上位机,且使能签名),这是痞子衡第一次用官方 SEC 上位机做签名下载操作,使用体验总体不如 NXP-MCUBootUtility 来得顺手。
痞子衡先在默认 W25Q128JWSIQ 上做了测试,然后又将板子上的 Flash 换成了 IS25LP128F 做了同样测试。让痞子衡感到遗憾的是,并未复现客户的情况,Mini L2 Boot 和 Mini App 跑得稳如狗。
三、值得关注的点
虽然没能成功复现客户的问题,但是在检查客户使用的两颗 Flash 的数据手册时,还是发现了一些隐患点的。我们先来看一下恩智浦官方开发板 Flash 使用情况以及 SDK 里对 Flash XIP 启动的速度配置(所谓 FCB,\SDK_XXX_MIMXRT1xxx-EVK\boards\evkmimxrt1xxx\xip\evkmimxrt1xxx_flexspi_nor_config.c),从 SDK 2.15 开始 FCB 尝试为支持调整 dummy cycle 的 Flash 做了适配以跑到 Flash 的最高速度。
- Note:不了解 dummy cycle 可以先阅读痞子衡旧文 《在i.MXRT启动头FDCB里调整Flash工作频率也需同步设Dummy Cycle (以IS25WP128为例)》
然而在 RT1060 SDK 里的 FCB 并没有加入 dummy cycle 方面的考虑,直接就是用了默认 6 dummy cycle 来支持 120MHz SDR Quad Fast Read (0xEB) 性能,这对于 RT1060-EVK/EVKB 上的 IS25WP064AJBLE 来说其实是有隐患的(对应默认最高频率是 104MHz),算超频在跑了。
此外痞子衡旧文 《同一厂商不同系列Flash型号下Dummy Cycle设置方法可能有差异 (以IS25LP064A为例)》 里介绍了 IS25LP064A 和 IS25WP128 系列有差异,用相同的分析方法你会发现 IS25LP064A 和 IS25LP128F 一样有差异,虽然 IS25LP128F 上限可以跑到 166MHz,但是默认 6 dummy cycle 下仅支持 81MHz。
客户包括痞子衡都直接使用得 SEC 上位机工具自动生成的 FCB 头,其只能使用默认 6 dummy cycle,而我们都将 Flash 运行频率设到了 120MHz 以上,这显然是有隐患的(虽然痞子衡的 Mini L2 Boot/App 没有跑出问题,但是压力运行之下可靠性无法保证)。
这会是客户问题的答案吗?痞子衡让客户将 Flash 工作频率调到了 80MHz 以符合手册要求,但是客户反馈,问题仍然存在!目前为止,痞子衡暂无其它思路,你能想到可能出问题的地方吗?
欢迎订阅
文章会同时发布到我的 博客园、CSDN、微信公众号、知乎、与非网、电子技术应用AET、电子星球、51CTO 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。
痞子衡嵌入式:记录为i.MXRT1060更换较大容量Flash(IS25LP064A_IS25LP128F)导致二级App异常启动问题解决全过程(上篇)的更多相关文章
- 痞子衡嵌入式:利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT部分型号上新增的FlexSPI Remap功能. OTA升级设计几乎是每个量产客户都绕不开的话题,产品发布后免不了要做固件( ...
- 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...
- 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...
- 痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link / CMSIS-DAP)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境( ...
- 痞子衡嵌入式:改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常. 痞子衡的嵌入式技术交流群里有一位非常活跃的朋友(网名:文 ...
- 痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 本篇是 <IAR EWARM复位类型>.<M ...
- 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事(SR寄存器BP[x:0]位)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事. 痞子衡最近在支持一个 i.MXRT1170 欧 ...
- 痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动. LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品 ...
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...
- 痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说 ...
随机推荐
- Windows7-64环境中部署OpenLayers6.4.3详细步骤
注意:OL5以后,OpenLayers采用ES6,以前OL4那种简单的加库的方法已经不适用了. Windows7-64环境中部署OpenLayers6.4.3详细步骤: 1.官方教程(英文版) 2.中 ...
- 前端之canvas实现电子签约完成线上签署功能
最近发现现在租房还是签合同,越来越多采用电子签约的方式进行,好处不用多说节约成本,节约时间.抱着好奇的心理,尝试自己动手实现一个电子签.原来并不复杂主要通过了canvas绘画能力进行实现的. 主要功能 ...
- 微服务实战系列(四)-注册中心springcloud alibaba nacos-copy
1.场景描述 因要用到微服务,关于注册中心这块,与同事在技术原型上做了讨论,初步定的方案是使用:阿里巴巴的nacos+springcloud gateway,下面表格是同事整理的注册中心对比,以前用的 ...
- Elasticsearch的分享
一.生活中的数据 搜索引擎是对数据的检索,所以我们先从生活中的数据说起.我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格 ...
- java多线程---总结(1)
线程创建.start.run 一.创建线程方式 java创建线程的方式,主要有三种:类Thread.接口Runnable.接口Callable. 1.Thread和Runnable进行比较 他们之间的 ...
- 利用坦克PWA3快速为应用配置域名:以Gogs为例
全文概述 本文介绍了如何利用坦克PWA3平台快速为Gogs应用配置域名的过程.随着互联网技术的发展,自托管Git服务变得越来越受欢迎,其中Gogs凭借其轻量级和易于安装的特点受到众多开发者的青睐.为提 ...
- Jetbrains系列产品无限时间重置插件
概述Jetbrains家的产品有一个很良心的地方,他会允许你试用30天(这个数字写死在代码里了)以评估是否你真的需要为它而付费. 事实上有一款插件可以实现这个功能,你或许可以用它来重置一下试用时间.但 ...
- 搭建个人AI知识库-DIFY
前提 本地目前没有显卡,只能用cpu刚. 如果不想自己搭建本地模型,完全可以掏钱使用现成的API即可. 需要了解一些docker知识 搭建本地模型 环境 os: archlinux 内存: 32g c ...
- C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!
近年来,随着企业数字化转型的深入,从传统 IT 架构向云原生架构转型,已经成为企业谋求更高质量发展的必由之路.然而,云原生技术复杂度高,运维成本高,且技术工具间的集成度不足.打破云原生技术应用门槛,以 ...