大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是多個i.MXRT共享一顆Flash啟動的方法。
有些特殊的客戶應用會采用多顆 i.MXRT 芯片設計一主多從的硬件架構(目的不一,或仿多核 MCU 系統(tǒng)、或拓展 GPIO 數量),因為 i.MXRT 片內無非易失性存儲器,這時候為整個系統(tǒng)配置合適的啟動設備保證每個 i.MXRT 都能加載程序正常啟動是頭等大事。
因為 i.MXRT 支持的啟動設備類型眾多,此處我們暫討論連接在 FlexSPI 外設上的 NOR Flash 作為啟動設備。熟悉 i.MXRT 的 朋友都知道,其片內 ROM 功能強大,這種情況下系統(tǒng)可采用的 Flash 連接啟動方式并不單一,今天痞子衡就和大家討論下這個話題并且給大家介紹一種創(chuàng)新方法:
- Note:本篇是上篇,主要介紹理論方法,下篇為具體實踐。
一、多i.MXRT系統(tǒng)啟動的傳統(tǒng)設計
1.1 每個i.MXRT獨享一個Flash
首先介紹得是大家直覺里第一反應的方案,那就是每個 i.MXRT 都有專屬 Flash,互不干擾,這種方案沒啥好說的,就是簡單粗暴,但是它也有明顯的優(yōu)缺點:
- 優(yōu)點:
1. 系統(tǒng)啟動快,多 i.MXRT 同時啟動
2. 每個 i.MXRT 均可以 XiP 啟動
3. 每個 i.MXRT 單獨更新專屬 Flash(可同時進行,OTA 加速且程序版本管理簡單)
- 缺點:
1. 硬件設計稍復雜,PCB 面積大,Flash 數量多導致成本高
2. 程序燒寫流程增多(需燒寫多顆 Flash),量產不便
1.2 僅主i.MXRT連接一個Flash
當主從系統(tǒng)里從 i.MXRT 數量多到一定程度,上述方法里的缺點就被無限放大了,Flash 數量扎眼,量產時間過長,這時候項目經理一定會跳出來讓你降成本(Flash成本,產線時間成本),于是你就開始想辦法減少 Flash 數量。
此時我們可以借助 i.MXRT 的 ROM ISP 功能,由主 i.MXRT 先啟動運行 Flash 里的 bootloader ,然后由 bootloader 來讀取 Flash 里的應用程序并通過 ISP 接口直接加載到從 i.MXRT 的內部 SRAM 里運行(多個從 i.MXRT 可按序串行下載也可并行下載,從 bootloader 設計角度來說一般是按序串行下載),當然這種方式同樣有明顯的優(yōu)缺點:
- 優(yōu)點:
1. 簡化了硬件設計,PCB 面積減小,僅需一顆 Flash
2. 簡化了程序燒寫流程(僅需燒寫一顆 Flash),方便量產
- 中性:
1. 僅有主 i.MXRT 可以 XiP 啟動,從 i.MXRT 都只能 Non-XiP 啟動
2. 主 i.MXRT 統(tǒng)一負責 OTA 升級任務(loading 較大)
- 缺點:
1. 需要額外設計符合 ROM ISP 協(xié)議的 bootloader 讓主 i.MXRT 執(zhí)行去加載從 i.MXRT 程序
2. 整個系統(tǒng)啟動時間變長(如果從 i.MXRT 程序由 bootloader 按序串行下載,UART 接口速度慢)
3. 如果從 i.MXRT 程序不同,Flash 里會分區(qū)域存儲不同程序,帶來復雜的 OTA 版本管理問題
二、一種共享Flash啟動的創(chuàng)新方法
上述改進方法達到了降硬件成本的目的,但是也帶來了一個無法避免的系統(tǒng)整體啟動時間過長的問題(bootloader 實現 ROM ISP 功能如果選擇 USB 接口,需要額外加 Hub,還是存在硬件成本問題;如果選擇 UART 接口,速度較低,程序加載時間無法忍受)。
有沒有更好的方法?痞子衡既然這么問了,那就一定是有!我們可以創(chuàng)新地把一顆 Flash 同時連到多個 i.MXRT 上,主 i.MXRT 能夠控制所有從 i.MXRT 的 POR_B 電平。系統(tǒng)上電,主 i.MXRT 先 Non-XIP 啟動,然后主 i.MXRT 逐一釋放從 i.MXRT 的 POR_B 讓它們分時占用 Flash 去 Non-XIP 啟動,現在我們再來分析下它的優(yōu)缺點:
- 優(yōu)點:
1. 簡化了硬件設計,PCB 面積減小,僅需一顆 Flash
2. 簡化了程序燒寫流程(僅需燒寫一顆 Flash),方便量產
- 中性:
1. bootloader 可有可無,即使有也非常簡單,無需承擔程序加載任務
2. 整個系統(tǒng)啟動時間可控(分時復用 Flash 啟動,FlexSPI 接口加載速度較高)
3. 系統(tǒng)里僅有一個 i.MXRT(可主可從)可以 XiP 啟動,其余 i.MXRT 都只能 Non-XiP 啟動
4. 每個 i.MXRT 均可承擔 OTA 升級任務,具有一定靈活性
- 缺點:
1. 如果從 i.MXRT 程序不同,Flash 里會分區(qū)域存儲不同程序,帶來復雜的 OTA 版本管理問題
至此,多個i.MXRT共享一顆Flash啟動的方法痞子衡便介紹完畢了,掌聲在哪里~~~