99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

一種多MCU分時復用Flash啟動的創新方法(下)

大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是多個i.MXRT共享一顆Flash啟動的方法

在 《多個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)

二、軟件代碼設計

有了硬件平臺,現在開始設計代碼。為了簡單起見,主從 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):

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 啟動。

void bsp_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 進行正常擦寫,這證明我們的創新連接方法是切實可行的。

至此,多個i.MXRT共享一顆Flash啟動的方法痞子衡便介紹完畢了,掌聲在哪里~~~

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 41
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 国产亚洲日韩A欧美在线人成 | 国产精品日韩欧美一区二区 | 国产亚洲h网综合h网 | 国产亚洲一区二区手机在线观看 | 97免费超碰 | 一牛蜜桃色香阁aⅴ | 欧美日韩一区二区三区不卡 | 国产精品午夜爆乳美女 | 午夜精品一区二区三区三上悠亚 | 无人高清视频免费观看在线 | 亚洲欧美日韩Aⅴ在线观看 日本成人影院 | 国产精品免费视频一区二区 | 国外AV无码精品国产精品 | 无码人妻精品一区二区三 | 久久人人槡人妻人人玩夜色AV | 性国产日韩欧美一区二区在线 | 在线免费看av的网站 | 国产亚洲精品A在线看 | 一本大道久久精品 | 92自拍视频 | 小黄文纯肉污到你湿 | 日本巨大的奶头在线观看 | 亚洲乱码一二三四区 | 亚洲精品18| 久久亚洲精品无码爱剪辑 | 免费观看黄色av | 麻豆国产人妻精品无码AV | 中出乱码av亚洲精品久久天堂 | 一区二区三区高清在线视频 | 蜜柚av乱码久久久久久水 | 欧美日韩亚洲中文 | 精品国产乱码一区二区三区麻豆 | 四虎av无码专区亚洲av | 国产在线乱码一区二三区 | 无码人妻精品一区二区三区久久久 | 91精品一区二区三区综合在线爱 | 人人鲁免费播放视频 | 久久久久人妻精品一区 | 日本hdxxxx少妇1819 | 伊甸园永久入口www 加勒比HEZYO无码专区 | 久久99精品国产一区二区三区 |