大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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. 开源社区Review代码步骤

    以Ranger项目为例,说明开源社区Review代码详细步骤. 1.寻找合适的issue进行review 首先自己需要是某个开源项目的committer, 要有合入代码的权限. 2.review代码 ...

  2. org.reflections 接口通过反射获取实现类源码研究

    org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...

  3. 新增访客数量MR统计之Reduce和Runner相关准备

    关注公众号:分享电脑学习回复"百度云盘" 可以免费获取所有学习文档的代码(不定期更新)云盘目录说明:tools目录是安装包res 目录是每一个课件对应的代码和资源等doc 目录是一 ...

  4. Spark-local本地环境搭建

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6815385772254822919/ 承接上一个文档<Spark源码编译> 解压spark编译好的压缩 ...

  5. vscode 前端好用插件汇总

    本篇文章根据实际开发中使用的扩展插件,结合<精选!15 个必备的 VSCode 插件(前端类)>.<vscode 插件推荐 - 献给所有前端工程师(2017.8.18更新)>中 ...

  6. Web开发之response

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 我们要获取客户机提交过来的数据,只需要找request对象就行 ...

  7. scanf报错问题

    VS2013 scanf()函数报错问题. 编译器就是说这个环境下用scanf()函数不安全,建议使用scanf_s()函数.如何要使用scanf()函数的话,就需要在头文件或者源文件开头加上:use ...

  8. [STM32F10x] 标准库初始化问题

    硬件:STM32F103C8T6 平台:ARM-MDK V5.11 STM32F系列提供的标准库都是通过结构体来初始化的.比如,以下是GPIO初始化的一个示例代码: GPIO_InitTypeDef ...

  9. 游戏mod启动器原理

    基本原理 游戏程序会按一定顺序读取游戏文件夹根目录的文件. 所以我们制作mod和补丁的时候需要使得我们的文件先读取,从而使得后面读取到重复内容时候,游戏运行的内存中舍弃掉原本的文件. 游戏mod启动器 ...

  10. Cesium中级教程9 - Advanced Particle System Effects 高级粒子系统效应

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 要了解粒子系统的基础知识,请参见粒子系统入门教程. Weathe ...