大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是为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 的最高速度。

  然而在 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异常启动问题解决全过程(上篇)的更多相关文章

  1. 痞子衡嵌入式:利用i.MXRT1060,1010上新增的FlexSPI地址重映射(Remap)功能可安全OTA

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT部分型号上新增的FlexSPI Remap功能. OTA升级设计几乎是每个量产客户都绕不开的话题,产品发布后免不了要做固件( ...

  2. 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...

  3. 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...

  4. 痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link / CMSIS-DAP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境( ...

  5. 痞子衡嵌入式:改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是改动i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能会造成系统异常. 痞子衡的嵌入式技术交流群里有一位非常活跃的朋友(网名:文 ...

  6. 痞子衡嵌入式:Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link/DAPLink)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是Keil在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 本篇是 <IAR EWARM复位类型>.<M ...

  7. 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事(SR寄存器BP[x:0]位)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事. 痞子衡最近在支持一个 i.MXRT1170 欧 ...

  8. 痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动. LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品 ...

  9. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...

  10. 痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件

    -- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说 ...

随机推荐

  1. 网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?

    本文原题"你管这破玩意儿叫TCP?",由闪客sun分享,转载请联系作者. 1.引言 网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确 ...

  2. 鸿蒙ArkUI-X简介

    ArkUI是一套构建分布式应用的声明式UI开发框架.它具备简洁自然的UI信息语法.丰富的UI组件.多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用 ...

  3. 使用 httputils + sbe (Simple Binary Encoding) 实现金融级 java rpc

    1.认识 Simple Binary Encoding (sbe) 高性能Java库 Agrona 的主要目标是减少性能瓶颈,通过提供线程安全的直接和原子缓冲区.无装箱操作的原始类型列表.开散列映射和 ...

  4. Pytorch Utils 总结

    Utils 从torch.nn.utils模块 clip_grad_norm_ 裁剪参数迭代的梯度范数. clip_grad_value_ 在指定值处剪辑可迭代参数的梯度. parameters_to ...

  5. WPF 取消在触屏上点击按下不松开会出现矩形背景的效果

    加个属性:  btn.SetValue(Stylus.IsPressAndHoldEnabledProperty,false); 或者在样式里设置: <Style x:Key="MyB ...

  6. RestTemplate 详解

    RestTemplate 简介 RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求.POST 请求.PUT ...

  7. 一款基于 .NET8 + Vue 开源、免费、跨平台的企业级在线考试系统

    前言 今天大姚给大家分享一款基于 .NET8 + Vue 开源.免费(AGPL-3.0开源协议).跨平台的企业级在线考试系统:XBLMS. 项目介绍 XBLMS是一款基于 .NET8 + Vue 开源 ...

  8. MongoDB:文章评论系统模拟

  9. 独立看门狗IWDG

    一.简介     STM32F10xxx内置两个看门狗(独立看门狗是12位递减计数器,窗口看门狗是7位递减计数器),提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门 ...

  10. VXLAN 网络中报文转发过程

    本文分享自天翼云开发者社区<VXLAN 网络中报文转发过程>,作者:刘****林 以同网段的 VM 间互通简单介绍 VXLAN 网络中的报文转发过程. 1.VM1 发送目的地址为 VM2 ...