大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项

  在恩智浦官方参考设计板 MIMXRT595-EVK 和 MIMXRT685-EVK 上搭载了一颗来自 MXIC 的 MX25UM51345G,这是一款比较典型的 Octal Flash,在 i.MXRT 下去下载和启动这款 Flash 并没有什么特别的地方,官方 SDK 及工具链里做了完善支持。

  近期有客户做板卡设计时选到了一颗同样来自 MXIC 的 Octal Flash - MX25UM51245G,主丝印号与 MX25UM51345G 仅一个数字之差,根据数据手册对比,两者在功能上似乎并没有太多区别,然而客户在启动这颗 Flash 时却遇到了麻烦,这是怎么回事?今天痞子衡来一探究竟:

  • Note:本文内容虽以 i.MXRT 三位数系列为例来展开,但同样也适用 i.MXRT 四位数系列。

一、一般Octal Flash读写字节序设计

  我们先来看典型的 MX25UM51345G 上读写时序设计,这对下载启动至关重要。大家都知道 Octal Flash 时序主要分为 SPI 和 OPI 两大类,其区别是命令/地址/数据位是仅通过 SIO[1:0] 还是通过全部 SIO[7:0] 来传输。

  如下是 SPI 模式下的 Read 和 Page Program 时序,命令和地址位均通过 SIO[0] 来传输,数据位通过 SIO[1](Read) 或者 SIO[0](Program) 来传输,这里特别关注一下数据位的字节序,读写都是按照 Data Byte 1、Data Byte 2、Data Byte 3... 正序传输的。

  再来看 OPI 模式下的 Read 和 Page Program 时序(包含 STR 和 DTR 模式),命令/地址/数据位全部通过 SIO[7:0] 来传输,咱们也同样关注一下数据位的字节序,读写依然是按照 D0、D1、D2、D3... 正序传输的。

二、以MX25UM51245为代表的特殊读写字节序设计

  现在我们再来看 MX25UM51245G 上特殊读写时序设计,其在 SPI 模式、OPI-STR 模式下时序与 MX25UM51345G 并无差异(数据位都是正序传输),主要差异在如下 OPI-DTR 模式下时序,我们可以看到 OPI-DTR 读写时数据位上字节序是 D1、D0、D3、D2... 这样的反转序,这种特殊字节序设计在 Flash 数据手册上并没有以文字形式特别提醒,仅能从时序图上观察出来,估计是 Flash 厂商认为读写字节序是成套反转的,因此用户无需关心这种差异(即不需要软件代码层面去刻意做数据反转,反反得正嘛)。

三、i.MXRT启动MX25UM51245注意事项

  从 i.MXRT 启动角度而言,对于 Octal Flash 我们既可以配置 FlexSPI 外设以 SPI Read 模式去访问也可以配置 OPI Read 模式去访问,不过从最高性能角度而言,通常我们会配置 OPI-DTR Read 模式去启动 Octal Flash。随便打开一个 MIMXRT595 SDK 里示例工程,在 flash_config.c 文件里你可以看到读命令设置的就是 0xEE(8DTRD)。

  具体 FlexSPI 配置是通过存放在 Flash 固定偏移处的 FDCB 结构(就是上图代码中的 flash_config )来实现的,BootROM上电会以固定 30MHz SPI Read 模式先从 Flash 里取出 FDCB,然后解析 FDCB 得到用户指定配置再做二次 FlexSPI 配置去启动用户程序(详见痞子衡旧文 《深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程》)。

  读到这里,你有没有发现什么问题?Octal Flash 里的 FDCB 和用户应用程序数据是在 BootROM 配置的不同读时序模式下被访问的,前者是通过 SPI Read,后者是通过 OPI-DTR Read,这样在 MX25UM51245 下就可能会存在字节序不统一的问题。如何解决这个问题?有三种方案:

方案 1:
- 负责下载功能的 Flashloader 仅配置 Flash 为 SPI 或 OPI-STR 模式,并且在下载时对 FDCB 和用户应用程序数据不做任何字节序反转;
- 负责启动功能的 BootROM 也同样配置 Flash 为 SPI 或 OPI-STR 模式去启动用户应用程序(在用户 FDCB 里设置)。 方案 2:
- 负责下载功能的 Flashloader 仅配置 Flash 为 SPI 或 OPI-STR 模式,并且在下载时对 FDCB 不做任何反转,但是需要对用户应用程序数据做字节序反转;
- 负责启动功能的 BootROM 需要配置 Flash 为 OPI-DTR 模式去启动用户应用程序(在用户 FDCB 里设置)。 方案 3:
- 负责下载功能的 Flashloader 配置 Flash 为 OPI-DTR 模式,并且在下载时对 FDCB 做字节序反转,但是对用户应用程序数据不做任何反转;
- 负责启动功能的 BootROM 需要配置 Flash 为 OPI-DTR 模式去启动用户应用程序(在用户 FDCB 里设置)。

四、i.MXRT启动MX25UM51245实现方案

  上一节列举了三个解决方案,其中方案 1 没什么好说的,不涉及字节序统一性问题。使用 MCUBootUtility 工具做应用程序下载时,不要选择具体 Flash 型号的模型,而使用 1bit SDR 模式的 FDCB 去连接配置(详见 《MCUBootUtility v2.3发布,这次不再放过任何一款Flash》 一文的 2.3 小节)。

  而如果期望 BootROM 配置 Flash 以 OPI-DTR 模式去启动,则需要在方案 2 和 3 里面选一个,从实现效率角度,显然方案 3 比方案 2 更胜一筹,毕竟用户程序往往比 FDCB 数据量大得多,对其做字节序反转耗时更长, i.MXRT 默认下载支持里就是选用了方案 3。MCUBootUtility 工具里的 Flash 模型支持 MX25UM51245 这种型号,其是通过 Misc Mode 里的 "Data Order Swapped" 选项来进行区分的。

  对于 i.MXRT500/600,其 Flashloader 功能直接集成进了 BootROM 里,我们看不到关于字节序反转的实现源码;但是 i.MXRT 四位数系列 BootROM 并无下载功能,其是通过加载二级 Flashloader 来实现下载的,其源码开源在 \SDK\boards\evkmimxrt1xxx\bootloader_examples\flashloader 里,在这个 Flashloader 源码里我们能找到关于字节序反转的设计。

  至此,OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

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

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

  1. 痞子衡嵌入式:导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是导致串行NOR Flash在i.MXRT下无法正常下载/启动的常见因素之SFDP. i.MXRT系列MCU发布已两年多了,基于i.MXR ...

  2. 痞子衡嵌入式:同一厂商不同系列Flash型号下Dummy Cycle设置方法可能有差异 (以IS25LP064为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是同一厂商不同系列Flash型号下Dummy Cycle设置方法的差异. 上一篇文章 <在i.MXRT启动头FDCB里调整Flash ...

  3. 痞子衡嵌入式:系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是系统时钟配置不当会导致i.MXRT1xxx系列下OTFAD加密启动失败问题. 我们知道,i.MXRT1xxx家族早期型号(RT1050/ ...

  4. 痞子衡嵌入式:在i.MXRT启动头FDCB里使能串行NOR Flash的QPI/OPI模式

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在FDCB里使能串行NOR Flash的QPI/OPI模式. 我们知道 Flash 读时序里有五大子序列 CMD + ADDR + MO ...

  5. 痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之RESET#

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决经验. 前一篇文章 <在i ...

  6. 痞子衡嵌入式:i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项. 最近痞子衡在支持一个印度客户,这个客户项目主芯片选择 ...

  7. 痞子衡嵌入式:链接函数到8字节对齐地址或可进一步提升i.MXRT内核执行性能

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT上进一步提升代码执行性能的经验. 今天跟大家聊的这个话题还是跟痞子衡最近这段时间参与的一个基于i.MXRT1170的大项目有 ...

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

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

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

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1160/1170两款MCU的FlexSPI NOR启动的连接方式. 这个 i.MXRT FlexSPI NOR 启动 ...

随机推荐

  1. 《手把手教你》系列技巧篇(五十三)-java+ selenium自动化测试-上传文件-上篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  2. Java基础(八)——IO流5_其他流

    一.其他 1.System.in.System.out(标准输入.输出流) System.in:标准的输入流,默认从键盘输入. System.out:标准的输出流,默认从控制台输出. 改变标准输入输出 ...

  3. 【工控老马】OPC通讯协议解析-OPC七问

    1 通讯步骤 1.1 第一问 OPC Client和OPC Server之间通讯谁是主动的? 答:当然是OPC Client. 1.2 第二问 OPC Client第一次动作做了什么? 答:从大多数O ...

  4. 深入 Laravel 内核之 PHP 反射机制和依赖注入

    结论: PHP中提供了反射类来解析类的结构: 通过反射类可以获取到类的构造函数及其参数和依赖: 给构造函数的参数递归设置默认值后,即可使用这些带默认值的参数通过 newInstanceArgs 实例化 ...

  5. PHP 中的僵尸进程、孤儿进程详解

    僵尸进程 当子进程运行结束,父进程仍然继续运行,但父进程没有对子进程进行回收,释放子进程占用的资源,此时子进程就成为了一个僵尸进程. 在Unix进程管理中,如果新开的子进程运行结束,父进程将会收到一个 ...

  6. 初识python: 类练习 - 随机数生成

    1.提取指定值之间的指定个数的随机整数. 2.继承生成随机数的类,打印"坐标". 生成随机数类: import random class GetRadndom(object): ' ...

  7. linux中vim编辑器的翻页命令

    Linux jdk查看文件的最后一行         输入$回车 查看文件的第一行          输入0或者1回车 向前翻页                 Ctrl + f     f为forw ...

  8. js 关于 data.xuNum = xuNum++; 赋值写法 的探讨

    1 .源码 let xuNum = 0; let data = []; data.xuNum = xuNum++; console.log(data.xuNum) 2.打印结果 //  0 3.原因 ...

  9. vue3.0+vite项目搭建

    npm init vite-app <project-name> cd <project-name> 根据控制台的提示执行: npm install / yarn npm ru ...

  10. 移动端字体图标不显示的Bug

    用16进制编码的字体图标在部分小米机型显示不正常. 测试机型:小米1,小米1s,小米2浏览器:微信6.1内置浏览器,QQ浏览器 5.7 X5内核字体图标:不显示svg图标:显示正常 以下来自额微信内置 ...