大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是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. 使用 StreamJsonRpc 在 ASP.NET Core 中启用 JSON-RPC

    StreamJsonRpc 是微软开发的一个开源库,用于在 .NET 平台中实现基于 JSON-RPC 2.0 规范 的远程过程调用(RPC).它通过流(如管道.网络流等)实现高效的跨进程或跨网络通信 ...

  2. 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持

    我在前面随笔中介绍了在SqlSugar的开发框架中实现EAV模型(实体-属性-值)的处理,这个EAV模型实现的目的是支持弹性化的数据库设计,可以自由扩展数据库表字段和数据的查询和存储,实现的思路是在常 ...

  3. PHP获取下个月今天时间

    获取php下个月当前时间public static function fq_time($time = ""){ if (!$time) $time = time(); $arr = ...

  4. STM32操作GPIO外设(点亮LED灯)的两种方式——使用官方库函数或直接操作寄存器

    STM32操作外设(点亮LED灯)的两种方式 准备工作: 硬件gec6818开发板.搭载stm32f407zet6芯片 keil项目模板,准备好官方库函数 官方提供的<STM32f407数据手册 ...

  5. Promise 这个新 API 真香!

    Hey, 我是 沉浸式趣谈 本文首发于[沉浸式趣谈],我的个人博客 https://yaolifeng.com 也同步更新. 转载请在文章开头注明出处和版权信息. 如果本文对您有所帮助,请 点赞.评论 ...

  6. ASP.NET Core Razor融合JS库Demo

    cshtml.cs using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Razor ...

  7. 自己做的linux动态壁纸软件

    自己做的linux动态壁纸软件 https://github.com/dependon/fantascene-dynamic-wallpaper

  8. BS直聘职位数据采集与分析(爬虫)

    一.项目介绍 在当今竞争激烈的就业市场中,及时掌握职位信息和市场动态变得尤为重要.本文将详细介绍如何使用Python开发一个爬虫项目,自动采集BOSS直聘网站的职位数据,并对数据进行处理和分析. 1. ...

  9. Odoo14前端框架常用操作

    单页Web应用(single page web application,SPA): SPA 是一种特殊的 Web 应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的. 它将所有的 ...

  10. 解决Git异常 Access denied your account has 2FA enabled

    摘要:解决Git双因子身份验证问题. 问题背景   在使用账号和密码的方式拉取公司GitLab代码时,遇到了以下错误提示问题: remote: HTTP Basic: Access denied. T ...