0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

多个i.MXRT共享一颗Flash启动的方法与实践(下)

恩智浦MCU加油站 来源:痞子衡嵌入式 2025-06-05 10:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

来源:痞子衡嵌入式

在 《多个i.MXRT共享一颗Flash启动的方法与实践(上)》 一文里痞子衡给大家从理论上介绍一种多 i.MXRT 共享 Flash 启动的方法,但是理论虽好,如果没有经过实践验证切实可行,不过是纸上谈兵,所以今天痞子衡就找了两个 i.MXRT 开发板来具体实操这种方法:

一、搭建硬件平台

理论上任意两块 i.MXRT 开发板均可以用作硬件测试平台(这里仅考虑一主一从,至于一主多从原理差不多),但是痞子衡手头 MIMXRT1010-EVK_Rev.C 开发板较多,就选用它来做测试吧,痞子衡对硬件做了如下改动:

去除从板上 U13 - Flash

保留主板上 U13 - Flash,并且飞线连接到从板 U13(低速启动仅需 CS, SCLK, IO0, IO1)

主板主芯片GPIO_11 信号(R1870 靠主芯片端,非 D25 LED 端)连到从板主芯片 POR_B(SW3 的 Pin3/4)

e08de85a-41a7-11f0-b715-92fbcf53809c.png

二、软件代码设计

有了硬件平台,现在开始设计代码。为了简单起见,主从 i.MXRT 共用一份 App(可以在条件分支里做区分)。因为 Flash 是共享的,所以 App 必须是 Non-XIP 性质。要让芯片 BootROM 去支持 Non-XIP 启动,得使用专用上位机工具(比如痞子衡的MCUBootUtility或者恩智浦官方 SPT )来下载程序镜像文件,这样稍微麻烦一点。为了避免下载程序的麻烦,我们可以简单设计一个boot_loader 工程来拷贝和跳转 boot_app 程序。

代码仓库:

https://github.com/JayHeng/func-imxrt-flexspi-share-flash-boot-multiple-mcu

两个工程路径:

/boards/evkmimxrt1010/demo_apps/boot_loader

/boards/evkmimxrt1010/demo_apps/boot_app

2.1 boot_loader 工程设计

boot_loader 工程是一个 XiP 工程,由芯片 BootROM 直接启动。我们可以直接基于 SDK 里的 hello_world 来修改(flexspi_nor target),先对它的启动头 FCB 做如下修改(1-bit SPI 30MHz Normal Read Mode):

e0e83cba-41a7-11f0-b715-92fbcf53809c.png

boot_app 工程是一个 Non-XiP 工程,也可以基于 SDK 里的 hello_world 来修改(debug target),它生成的 binary 直接导入到 boot_loader 工程里,具体方法可参见《i.MXRT双核工程调试的三种方法(IAR篇)》 一文里的 2.3 通用方法:双核工程有关联,主核加载从核小节,这里不再赘述。

boot_loader 工程里有了 boot_app 数据以及链接地址,拷贝和跳转函数设计就比较简单了,都是通用代码。最终调稳定的 boot_loader 工程可以直接在 IDE 里下载到 Flash 里运行(需调试器连接到主板 SWD 口)。

2.2 boot_app 工程设计

现在来到最核心的 boot_app 工程设计,工程还是基于 hello_world,可以从串口接收简单的字符指令(A,B...)来做不同测试,目前设计了六个测试指令:

字符指令 A(仅适用主 i.MXRT)- 将 GPIO_11 输出电平由低变高控制 POR_B 信号以释放从 i.MXRT

字符指令 B(仅适用主 i.MXRT)- 将 GPIO_11 输出电平由高变低控制 POR_B 信号以复位保持从 i.MXRT

字符指令 C(适用主/从i.MXRT)- 初始化 Flash 相关引脚为 FlexSPI 功能

字符指令 D(适用主/从i.MXRT)- 恢复 Flash 相关引脚为默认 GPIO 状态

字符指令 E(适用主/从i.MXRT)- 以一线模式擦写读 U13 Flash

字符指令 F(仅适用从 i.MXRT)- 用定时器不断翻转 GPIO_11 来驱动 D25 LED 闪烁

这里需要特别说一下指令 A 和 E,这里面涉及到主/从 i.MXRT 芯片 FlexSPI 引脚共同驱动一个 Flash 的冲突问题。当主 i.MXRT 执行 A 指令来释放从 i.MXRT 时,需要先执行 D 指令(即调用如下函数)将FlexSPI 引脚恢复到上电默认 GPIO 状态(BootROM 启动时已将这些引脚配置成了 FlexSPI 功能),否则从 i.MXRT 可能无法正常从 Flash 启动。

voidbsp_deinit_flexspi_pins(void) 
{
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_06_GPIO2_IO06, 0U); 
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_07_GPIO2_IO07, 0U); 
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_09_GPIO2_IO09, 0U); 
    IOMUXC_SetPinMux(IOMUXC_GPIO_SD_10_GPIO2_IO10, 0U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_06_GPIO2_IO06, 0x10A0U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_07_GPIO2_IO07, 0x10A0U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_09_GPIO2_IO09, 0x10A0U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_SD_10_GPIO2_IO10, 0x10A0U);
}

C 指令和 E 指令显然是结伴而行的,当从 i.MXRT 执行过 C,E 指令且仍处于激活状态时,如果主 i.MXRT 想正常执行 C,E 指令,要么先执行 B 指令直接将从 i.MXRT 复位保持住(FlexSPI 相关引脚配置也自动复位了),要么让从 i.MXRT 先执行下 D 指令。

三、在板卡上测试

现在给板卡供电,将包含 boot_app 的 boot_loader 程序下载进 Flash,主板串口是 COM43,从板串口是 COM50,我们做一个快速测试,给主板直接发送 A 指令发现从板没有启动,但是执行过 D 指令后再发送 A 指令,这时候从板就正常启动了。此外主/从板也都能对 Flash 进行正常擦写,这证明我们的创新连接方法是切实可行的。

e0ff7a42-41a7-11f0-b715-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    462

    文章

    53534

    浏览量

    458997
  • FlaSh
    +关注

    关注

    10

    文章

    1715

    浏览量

    154696
  • 开发板
    +关注

    关注

    25

    文章

    6122

    浏览量

    113254
  • GPIO
    +关注

    关注

    16

    文章

    1313

    浏览量

    55721

原文标题:多个i.MXRT共享一颗Flash启动的方法与实践(下)

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    多个i.MXRT共享一颗Flash启动方法实践(上)

    有些客户应用会采用多颗 i.MXRT 芯片设计主多从的硬件架构(目的不,或仿多核 MCU 系统、或拓展 GPIO 数量),因为 i.MXRT 片内无非易失性存储器,这时候为整个系统
    的头像 发表于 06-05 10:01 1003次阅读
    <b class='flag-5'>多个</b><b class='flag-5'>i.MXRT</b><b class='flag-5'>共享</b><b class='flag-5'>一颗</b><b class='flag-5'>Flash</b><b class='flag-5'>启动</b>的<b class='flag-5'>方法</b>与<b class='flag-5'>实践</b>(上)

    FlashDummy Cycle设置方法的差异

    今天痞子衡给大家介绍的是同厂商不同系列Flash型号Dummy Cycle设置方法的差异。  上篇文章 《在
    发表于 12-13 06:29

    i.MXRT系列FlexSPI驱动Flash页编程执行时间

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT系列FlexSPI驱动Flash页编程执行时间。  痞子衡之前写过篇文章 《串行NOR Flash的页
    发表于 12-21 07:30

    i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动怎么解决?

    i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动怎么解决?
    发表于 01-19 07:19

    IAR开发环境i.MXRT的串行NOR Flash下载算法设计

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是IAR开发环境i.MXRT的串行NOR Flash下载算法设计。  在i.MXRT硬件那些事系列之《在串行NOR
    发表于 01-26 07:46

    i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决

    《串行NOR Flash的Continuous read模式软复位后i.MXRT无法启动问题解决方案之RESET#》,利用RESET#引脚复位功能是痞子衡找到的第
    发表于 01-26 06:52

    FlexSPI复位方式不当会导致i.MXRT系列OTFAD加密启动失败怎么解决?

    FlexSPI复位方式不当会导致i.MXRT系列OTFAD加密启动失败怎么解决?
    发表于 02-07 08:11

    介绍i.MXRT启动头FDCB里的lookupTable

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT启动头FDCB里的lookupTable。个MCU内部通常有很多外设模块,这些外设模块是各MCU厂商做差异化产...
    发表于 02-17 07:47

    J-Link工具i.MXRT的串行NOR Flash下载算法设计

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 J-Link 工具 i.MXRT 的串行 NOR Flash 下载算法设计。 、J-Link 各版本对
    的头像 发表于 12-08 10:07 1702次阅读

    Flash不支持SFDP,如何下载适用i.MXRT

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是导致串行 NOR Flashi.MXRT 无法正常下载 / 启动的常见因素之 SFDP。
    的头像 发表于 10-30 10:30 1408次阅读

    痞子衡嵌入式:MCUXpresso IDE使用J-Link下载算法在Flash调试注意事项(i.MXRT500为例)...

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MCUXpresso IDE使用J-Link下载算法在Flash调试注意事项。  痞子衡前段时间写过篇小文《为i.MXR
    发表于 10-29 10:36 0次下载
    痞子衡嵌入式:MCUXpresso IDE<b class='flag-5'>下</b>使用J-Link下载算法在<b class='flag-5'>Flash</b>调试注意事项(<b class='flag-5'>i.MXRT</b>500为例)...

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

    《串行NOR Flash的Continuous read模式软复位后i.MXRT无法启动问题解决方案之RESET#》,利用RESET#引脚复位功能是痞子衡找到的第
    发表于 12-02 12:51 1次下载
    痞子衡嵌入式:串行NOR <b class='flag-5'>Flash</b>的Continuous read模式<b class='flag-5'>下</b>软复位后<b class='flag-5'>i.MXRT</b>无法<b class='flag-5'>启动</b>问题解决方案之SW Reset...

    痞子衡嵌入式:FlexSPI复位方式不当会导致i.MXRT系列OTFAD加密启动失败

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是FlexSPI复位方式不当会导致i.MXRT系列OTFAD加密启动失败问题。  本篇是《系统时钟配置不当会导致
    发表于 12-04 17:36 9次下载
    痞子衡嵌入式:FlexSPI复位方式不当会导致<b class='flag-5'>i.MXRT</b>系列<b class='flag-5'>下</b>OTFAD加密<b class='flag-5'>启动</b>失败

    i.MXRT上提升代码执行性能的十八般武艺

    SBL 项目是支持全系列 i.MXRT 平台的,为了具体化问题,我们就选取 i.MXRT1062 型号为例,官方配套 MIMXRT1060-EVK 板子上搭配了一颗四线串行 NOR Flash
    的头像 发表于 05-23 09:31 1832次阅读

    深入i.MXRT1050系列ROM中串行NOR Flash启动初始化流程

    我们知道外部串行NOR Flash是接到i.MXRT的FlexSPI外设引脚上,有时串行NOR Flash启动也叫FlexSPI NOR启动
    的头像 发表于 06-02 17:43 2333次阅读
    深入<b class='flag-5'>i.MXRT</b>1050系列ROM中串行NOR <b class='flag-5'>Flash</b><b class='flag-5'>启动</b>初始化流程