痞子衡嵌入式:在含多个i.MXRT的主从系统中共享一颗Flash启动的方法与实践(上篇)


大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是多个i.MXRT共享一颗Flash启动的方法

有些特殊的客户应用会采用多颗 i.MXRT 芯片设计一主多从的硬件架构(目的不一,或仿多核 MCU 系统、或拓展 GPIO 数量),因为 i.MXRT 片内无非易失性存储器,这时候为整个系统配置合适的启动设备保证每个 i.MXRT 都能加载程序正常启动是头等大事。

因为 i.MXRT 支持的启动设备类型众多,此处我们暂讨论连接在 FlexSPI 外设上的 NOR Flash 作为启动设备。熟悉 i.MXRT 的 朋友都知道,其片内 ROM 功能强大,这种情况下系统可采用的 Flash 连接启动方式并不单一,今天痞子衡就和大家讨论下这个话题并且给大家介绍一种创新方法:

  • Note:本篇是上篇,主要介绍理论方法,下篇为具体实践。

一、多i.MXRT系统启动的传统设计

1.1 每个i.MXRT独享一个Flash

首先介绍得是大家直觉里第一反应的方案,那就是每个 i.MXRT 都有专属 Flash,互不干扰,这种方案没啥好说的,就是简单粗暴,但是它也有明显的优缺点:

text 复制代码
- 优点:
1. 系统启动快,多 i.MXRT 同时启动
2. 每个 i.MXRT 均可以 XiP 启动
3. 每个 i.MXRT 单独更新专属 Flash(可同时进行,OTA 加速且程序版本管理简单)
- 缺点:
1. 硬件设计稍复杂,PCB 面积大,Flash 数量多导致成本高
2. 程序烧写流程增多(需烧写多颗 Flash),量产不便

1.2 仅主i.MXRT连接一个Flash

当主从系统里从 i.MXRT 数量多到一定程度,上述方法里的缺点就被无限放大了,Flash 数量扎眼,量产时间过长,这时候项目经理一定会跳出来让你降成本(Flash成本,产线时间成本),于是你就开始想办法减少 Flash 数量。

此时我们可以借助 i.MXRT 的 ROM ISP 功能,由主 i.MXRT 先启动运行 Flash 里的 bootloader ,然后由 bootloader 来读取 Flash 里的应用程序并通过 ISP 接口直接加载到从 i.MXRT 的内部 SRAM 里运行(多个从 i.MXRT 可按序串行下载也可并行下载,从 bootloader 设计角度来说一般是按序串行下载),当然这种方式同样有明显的优缺点:

text 复制代码
- 优点:
1. 简化了硬件设计,PCB 面积减小,仅需一颗 Flash
2. 简化了程序烧写流程(仅需烧写一颗 Flash),方便量产
- 中性:
1. 仅有主 i.MXRT 可以 XiP 启动,从 i.MXRT 都只能 Non-XiP 启动
2. 主 i.MXRT 统一负责 OTA 升级任务(loading 较大)
- 缺点:
1. 需要额外设计符合 ROM ISP 协议的 bootloader 让主 i.MXRT 执行去加载从 i.MXRT 程序
2. 整个系统启动时间变长(如果从 i.MXRT 程序由 bootloader 按序串行下载,UART 接口速度慢)
3. 如果从 i.MXRT 程序不同,Flash 里会分区域存储不同程序,带来复杂的 OTA 版本管理问题

二、一种共享Flash启动的创新方法

上述改进方法达到了降硬件成本的目的,但是也带来了一个无法避免的系统整体启动时间过长的问题(bootloader 实现 ROM ISP 功能如果选择 USB 接口,需要额外加 Hub,还是存在硬件成本问题;如果选择 UART 接口,速度较低,程序加载时间无法忍受)。

有没有更好的方法?痞子衡既然这么问了,那就一定是有!我们可以创新地把一颗 Flash 同时连到多个 i.MXRT 上,主 i.MXRT 能够控制所有从 i.MXRT 的 POR_B 电平。系统上电,主 i.MXRT 先 Non-XIP 启动,然后主 i.MXRT 逐一释放从 i.MXRT 的 POR_B 让它们分时占用 Flash 去 Non-XIP 启动,现在我们再来分析下它的优缺点:

text 复制代码
- 优点:
1. 简化了硬件设计,PCB 面积减小,仅需一颗 Flash
2. 简化了程序烧写流程(仅需烧写一颗 Flash),方便量产
- 中性:
1. bootloader 可有可无,即使有也非常简单,无需承担程序加载任务
2. 整个系统启动时间可控(分时复用 Flash 启动,FlexSPI 接口加载速度较高)
3. 系统里仅有一个 i.MXRT(可主可从)可以 XiP 启动,其余 i.MXRT 都只能 Non-XiP 启动
4. 每个 i.MXRT 均可承担 OTA 升级任务,具有一定灵活性
- 缺点:
1. 如果从 i.MXRT 程序不同,Flash 里会分区域存储不同程序,带来复杂的 OTA 版本管理问题

至此,多个i.MXRT共享一颗Flash启动的方法痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园CSDN微信公众号知乎与非网电子技术应用AET电子星球51CTO 平台上。

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