大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是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. 啥是Gossip协议?

    你好呀,我是歪歪. 元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛. 但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的. 这事吧 ...

  2. .NET 微服务——CI/CD(2):自动打包镜像

    准备工作 一.开启docker的tcp 我的服务器是linux,以端口2376为例,找到docker.service,在ExecStart下新增这段代码即可: -H tcp://0.0.0.0:237 ...

  3. Docker 安装并运行 Redis

    说明 在Windows下运行Redis主要有以下几种方式: 使用微软官方构建的Windows版Redis,最新版本是3.0.504,发布于2016-07-01.https://github.com/m ...

  4. vim 安装使用 pathogen

    目录 pathogen 是什么? 如何安装? pathogen 是什么? pathogen 一般作为 vim 新手的第一个插件,用来统一管理 vim 插件包. (官方解释)非常容易地管理你的 'run ...

  5. root安装jdk其它用户授权

    sudo chmod -R 755 java安装目录 sudo chown -R [username] java安装目录

  6. cesium结合geoserver利用WFS服务实现图层编辑(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  7. 学习OAuth 2.0

    认识OAuth 2.0 OAuth 2.0 是行业标准的授权协议. OAuth 2.0 专注于客户端开发人员的简单性,同时为 Web 应用程序.桌面应用程序.移动设备提供特定的授权流程. 应用场景 有 ...

  8. Mybatis插件,能做的事情真的很多

    大家好,我是架构摆渡人.这是实践经验系列的第九篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. Mybatis是我们经常用的一款操作数据库的框架,它的插件机制 ...

  9. MyCms 自媒体 CMS 系统 v2.7,支持自定义页面

    MyCms 是一款基于Laravel开发的开源免费的自媒体博客CMS系统,助力开发者知识技能变现. MyCms 基于Apache2.0开源协议发布,免费且不限制商业使用,欢迎持续关注我们. V2.7 ...

  10. golang中的标准库http

    Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现. http客户端 基本的HTTP/HTTPS请求 Get.Head.Post和PostForm函数发出HTTP/HTTP ...