痞子衡嵌入式:i.MXRT1170使用FlexSPI 2nd引脚组连接串行NOR Flash启动时FDCB需特殊设置
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是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需特殊设置的更多相关文章
- 痞子衡嵌入式:了解i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060系列ROM中串行NOR Flash启动初始化流程优化点. 前段时间痞子衡写了一篇 <深入i.MXRT1050系 ...
- 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合. 在串行 NOR Flash 热启动过程 ...
- 痞子衡嵌入式:深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程. 从外部串行NOR Flash启动问题是i.MXRT系列开发最 ...
- 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...
- 痞子衡嵌入式:i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中FlexSPI外设不常用的读选通采样时钟源 - loopbackFromSckPad. 最近碰到一个客户,他们在 i.MX ...
- 痞子衡嵌入式:i.MXRT连接特殊Octal Flash时(OPI DTR模式下反转字节序)下载与启动注意事项(以MX25UM51245为例)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项. 在恩智浦官方参考设计板 MIMXRT595-E ...
- 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT500/600上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1170上串行NOR Fla ...
- 痞子衡嵌入式:揭秘i.MXRT1060,1010上串行NOR Flash冗余程序启动设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1060,1010上串行NOR Flash冗余程序启动设计. 工业产品设计里经常会有冗余程序/备份程序设计的需求,因为在工业 ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(6.B)- FlexSPI NOR连接方式大全(RT500)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT500的FlexSPI NOR启动的连接方式. 这个i.MXRT FlexSPI NOR启动连接方式系列文章,痞子衡 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.1)- FlexSPI NOR连接方式大全(RT1015/1020/1050)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1015/1020/1050三款MCU的FlexSPI NOR启动的连接方式. 由于i.MXRT内部没有非易失性存储 ...
随机推荐
- idea的配置优化
一.显示工具条 二.设置鼠标悬浮提示 三.显示方法分隔符 四.忽略大小写提示 五.主题设置 如果需要很好看的编码风格,这里有很多主题 http://color-themes.com/?view=ind ...
- VScode设置用户代码片段快捷方式
一.创建步骤 a. b. 二.创建模板 { "生成vue模板": { "prefix": "vue", "body": ...
- 【李宏毅机器学习笔记】生成式对抗网络GAN
[ 李宏毅机器学习]生成式对抗网络GAN 在传统的神经网络任务中,我们通常把一个网络当作一个函数f(x),给定输入x,网络就会输出一个对应的结果 y.比如图像分类任务中,输入是一张图片,输出是一个分类 ...
- 自定义控件,重写 TextBox 实例
项目中可能会遇到重写控件的情况,特此记录下: 1 <Window x:Class="WpfApp6.MainWindow" 2 xmlns="http://sche ...
- infiniswap用到的技术
infiniswap来自 NSDI'17,其代码主要用到以下技术: configfs(主要) configfs-用户空间控制的内核对象配置 https://www.kernel.org/doc/Doc ...
- 测试获取 Github 信息
import json import requests from .fetch_github_info import AUTHENTICATED_USER_ENDPOINT, fetch_github ...
- DevEco Studio AI辅助开发工具两大升级功能 鸿蒙应用开发效率再提升
随着搭载HarmonyOS 5的Pura X发布,鸿蒙生态进入快车道,各应用正在加速适配开发,越来越多开发者加入到鸿蒙应用开发浪潮中.为提升鸿蒙应用开发效率,华为前不久上线了首款开发HarmonyOS ...
- SpringBoot3启动报错 java.lang.ClassNotFoundException: java.text.ListFormat
问题 在使用SpringBoot3创建web项目的时候日志报错java.lang.ClassNotFoundException: java.text.ListFormat. 具体报错如下: java. ...
- 某些STL用法
STL大法好! stable_sort 基于归并排序,时间复杂度稳定同时并不会改变相对顺序,平替sort,用法一模一样.(可以过一些甚至卡sort的毒瘤,但是由于sort是均摊复杂度 \(O(nlog ...
- vue3 基础-non-props 特性
本篇探讨当父组件通过属性给子组件传数据时, 子组件如果不通过 props 属性进行接收, 那数据会挂载到哪里, 以及子组件如何能使用这些数据. 正常的父子组件传值 <!DOCTYPE html& ...