大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置

  最近痞子衡在支持一个 RT1170 客户, 这个客户并没有按照恩智浦官方 EVK 那样的 flash 引脚连接方式,他们使用了 FlexSPI1 2nd 引脚(GPIO_AD[23:17])去连接 flash 启动,这种连接方式当然也是没有问题的。痞子衡特地给他们制作了一个专用 flash下载算法,然而客户把应用程序下载进 flash 后,发现程序并没有正常启动。客户还用逻辑分析仪抓取了启动时 flash 上的数据传输,发现 ROM 已经能够正常从 flash 里读出了 FDCB,然而却没有继续读取到有效 IVT,BD 等数据。这是怎么回事?今天痞子衡和大家聊聊这个话题:

  • Note: 本文所述现象同样存在于 RT1160,但不存在于 RT10xx/RT3digits

一、FCB与FlexSPI引脚选择

  我们先来简单回顾一下 i.MXRT 关于 NOR Flash 启动流程(可详见 《RT NOR 启动流程》),系统上电之后,ROM 先要获取 flash 里的 User FCB,用这个 User FCB 来进一步配置 FlexSPI,然后再继续解析 IVT、BD,最后是跳转到应用程序。

  大家有没有想过一个问题, ROM 是如何得知当前 flash 具体是连在哪组 FlexSPI 引脚上的(要知道 RT1170 上提供了十几组引脚连接选择)?能不能通过 User FCB 里的设置来选择? 当然 User FCB 里可以加这样的选项,但是这个前提是 ROM 得先拿到 FCB,很显然得有 flash 数据之外的非易失性配置才行,这就是 eFuse。

  RT1170 ROM 是根据 eFuse 0x940[11], 9A0[10:8] 里的配置得知 flash 连到了哪组 FlexSPI 引脚,然后初始化这个引脚,再用通用 1bit SPI 30MHz SDR 时序来读取 User FCB。当 ROM 获取到有效 User FCB 后,理论上可以根据 FCB 里关于 FlexSPI 引脚选择的配置去切换 flash 连接,但是这样真的有必要吗?

  比如下图我们设了 efuse FSPI_PIN_GROUP_SEL=1 从 Flash Device2 去启动,当 ROM 从 Flash Device2 里拿到 FCB2 之后,发现 FCB2 里的 pin 配置指向得却是 Flash Device1 的引脚连接,那么接下来 ROM 加载启动得便是 Flash Device1 里的 Application1。这样的应用场景需要挂两颗 flash,看起来稍显多余。

二、RT1170下FCB特殊设计

  我们知道 RT10xx/RT3digits 上 FCB 没有提供 flash 连接引脚切换选项,但是 RT1160/1170 上 FCB 有一些变化,提供了有限的 flash 连接切换,我们直接来看 FCB 结构,这里面和引脚连接有关的主要两地方:controllerMiscOption、sflashX1Size,后者是 i.MXRT 通用设计,用于设定不同 FlexSPI Port(和 eFuse 0x9A0[9:8] - FSPI_CONN_SEL 功能有点类似)。

  controllerMiscOption 是一个混合功能设定,其中 bit8 在 RT10xx/RT3digits 上是 reserved,而在 RT1160/1170 上用于切换 Primary/Secondary 引脚组,这会覆盖 ROM 从 eFuse 0x9A0[10] - FSPI_PIN_GROUP_SEL 里获取到的配置(全文重点就这一句)。

//!@brief Misc feature bit definitions
enum
{
kFlexSpiMiscOffset_DiffClkEnable = 0, //!< Bit for Differential clock enable
kFlexSpiMiscOffset_Ck2Enable = 1, //!< Bit for CK2 enable
kFlexSpiMiscOffset_ParallelEnable = 2, //!< Bit for Parallel mode enable
kFlexSpiMiscOffset_WordAddressableEnable = 3, //!< Bit for Word Addressable enable
kFlexSpiMiscOffset_SafeConfigFreqEnable = 4, //!< Bit for Safe Configuration Frequency enable
kFlexSpiMiscOffset_PadSettingOverrideEnable = 5, //!< Bit for Pad setting override enable
kFlexSpiMiscOffset_DdrModeEnable = 6, //!< Bit for DDR clock confiuration indication. kFlexSpiMiscOffset_UseValidTimeForAllFreq = 7, //!< Bit for DLLCR settings under all modes
kFlexSpiMiscOffset_SecondPinMux = 8, //!< Bit for Second Pinmux group
kFlexSpiMiscOffset_SecondDqsPinMux = 9, //!< Bit for Second DQS Pin mux
kFlexSpiMiscOffset_WriteMaskEnable = 10, //!< Bit for Write Mask Enable
kFlexSpiMiscOffset_WriteOpt1Clear = 11, //!< Bit for Write Opt
};

三、RT1170上实测结果

  为了验证 controllerMiscOption 效果,痞子衡找了块内部使用的 RT1170-FSGPIO 板卡,这块板卡恰好在 GPIO_SD_B2[11:5] 和 GPIO_AD[23:17] 上均连接了 memory,前者是 U7 - QSPI Flash,后者是 U9 - 4bit PSRAM,我们需要将 U9 替换成 QSPI Flash(注意是 8-pin SOIC 150-mil 小封装),外围电路也需要做一些调整。

  硬件准备好,便可以使用痞子衡的 MCUBootUtility 软件将程序分别下载进这两个 Flash,并按需调整 eFuse 以及 FCB 里的 controllerMiscOption,痞子衡实测了如下两种情况,均是能够正常启动的。

  • Note:痞子衡也尝试用不同 SEGGER 下载算法来做程序下载,实测发现算法之间竟然会互相影响,比如先下载了 App1,再不断电用另一个算法下载 App2 时会误擦除 App1 数据,感兴趣的可以自行研究。

  最后具体到客户问题,那只需要将 controllerMiscOption[8] 设成 1 便可以正常启动了。

  至此,i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园CSDN微信公众号知乎与非网电子技术应用AET电子星球51CTO 平台上。

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

痞子衡嵌入式:i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置的更多相关文章

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

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

  2. 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合. 在串行 NOR Flash 热启动过程 ...

  3. 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...

  4. 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...

  5. 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad. 最近碰到一个客户,他们在 i.MX ...

  6. 痞子衡嵌入式:i.MXRT连接特殊Octal Flash时(OPI DTR模式下反转字节序)下载与启动注意事项(以MX25UM51245为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项. 在恩智浦官方参考设计板 MIMXRT595-E ...

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

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

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

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

  9. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.B)- FlexSPI NOR连接方式大全(RT500)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT500的FlexSPI NOR启动的连接方式. 这个i.MXRT FlexSPI NOR启动连接方式系列文章,痞子衡 ...

  10. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR连接方式大全(RT1015/1020/1050)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR启动的连接方式. 由于i.MXRT内部没有非易失性存储 ...

随机推荐

  1. public void add(int index, E element)的方法源码分析

    public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...

  2. 基于Vosk与Transformers的会议摘要生成系统实战教程

    一.项目背景与价值 在现代办公场景中,会议记录与摘要生成是提升工作效率的重要环节.传统人工记录方式存在效率低.易遗漏等问题,而基于AI的解决方案可以实时转录会议内容并生成结构化摘要.本教程将指导开发者 ...

  3. 大模型参数组成计算QwQ-32B为例

    计算大模型参数量主要依赖于模型的架构和各层配置,我们把常用大模型分为三层:输入层.transformer层.输出层. 输入层 参数组成是Embedding的词表总和 transformer层 参数组成 ...

  4. Java编程--可变参数、foreach循环

    /** * 可变参数与foreach循环 * 可变参数:方法可以接受任意多个参数 * 方法格式(参数类型...变量) * 使用方法传入的该变量时当作数组对待 * foreach循环:快速对数组进行操作 ...

  5. XXL-JOB v3.0.0 | 分布式任务调度平台

    Release Notes 1.[升级]调度中心升级至 SpringBoot3 + JDK17: 2.[升级]Docker镜像升级,镜像构建基于JDK17: 3.[优化]IP获取逻辑优化,优先遍历网卡 ...

  6. 成语答题小程序v3.0

    自从开源成语答题小程序以来不断完善功能,并且不断修复bug,成语答题小程序v3版本完善了很多功能 1.增加了原生模板广告,设置原生模板广告后可以设置首页或答题页是否显示原生模板广告 2.增加了背景设置 ...

  7. 【笔记】PyVis|神经网络数据集的可视化

    文章目录 版本: 应用实例: PyVis的应用: 零.官方教程 一.初始化画布`Network` 二.添加结点 添加单个结点`add_node`: 添加一系列结点`add_nodes`: 三.添加边 ...

  8. 在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!

    前言 在当今数字化时代,数据的安全性和隐私性至关重要.随着网络应用的不断发展,数字 ID 作为数据标识和访问控制的关键元素,其保护显得尤为重要.然而,传统的数字 ID 往往直接暴露了一些敏感信息,如顺 ...

  9. netcore限流

    netcore限流 using System; using System.Collections.Generic; using System.Threading.Tasks; using Micros ...

  10. Unity ML-Agents实战指南:构建多技能游戏AI训练系统

    引言:游戏AI训练的技术演进 在<赛博朋克2077>的动态NPC系统到<Dota 2>OpenAI Five的突破性表现中,强化学习正在重塑游戏AI边界.本文将通过Unity ...