大家好,我是痞子衡,是正經搞技術的痞子,今天痞子衡給大家介紹的是i.MXRT1062 TencentOS Tiny EVB_AIoT開發板在Flash除錯與離線啟動,
騰訊 TencentOS 團隊于2021年12月8日聯合恩智浦半導體、安謀科技發起了一個線上開發者活動 - TencentOS Tiny AIoT 應用創新大賽,為了這個大賽,騰訊 TencentOS 團隊聯合恩智浦半導體、厚德物聯網設計了一款高性能 AIoT 評估板,用于 TencentOS tiny 基礎內核和 AIoT 應用功能體驗和評估,
- 大賽主頁:https://cloud.tencent.com/developer/competition/introduction/10032
痞子衡受邀為這個大賽準備一場直播課程(12月30日晚7點),主題是板載主控恩智浦 i.MXRT1062 芯片快速開發指南,由于課程時間限定在40分鐘,要講的內容又比較多,注定只能走馬觀花,所以這個系列文章就圍繞 EVB_AIoT 開發板給這場直播做一個鋪墊和補充,上一篇我們講了 《開發環境搭建與點燈》,本文是第二篇,我們來講講在 Flash 除錯與離線啟動:
一、跑通串口列印
上一篇文章我們借助板載 DAP-Link 除錯器在芯片內部 RAM 里以在線除錯的方式跑通了最入門的點燈實驗,今天我們換個同樣也非常經典的串口列印例程,恩智浦 SDK 包里有模板工程(記得用 MCUXpresso IDE 匯出):
- 串口例程:\SDK_2.10.1_EVK-MIMXRT1060\boards\evkmimxrt1060\demo_apps\hello_world
hello_world 模板工程里使能的是 i.MXRT1062 UART1(管腳是 GPIO_AD_B0[13:12]]),我們查看 EVB_AIoT 板原理圖,這兩個 UART1 信號同樣被引了出來(即下圖 AT_PC_UART 信號),不過用了模擬開關 BCT4699 做了切換設計,這里我們需要改一下默認設定,將母板上 SW1 開關撥到 1-2,這樣 UART1 就被連到了板載除錯器虛擬串口上:
1. 開關 SW1 選擇 2-3(出廠默認設定):
- 母板接插無線模塊連通母板 DAP-Link 除錯器虛擬串口
2. 開關 SW1 選擇 1-2:
- 子板主控 UART2 連通母板接插無線模塊
- 子板主控 UART1 連通母板 DAP-Link 除錯器虛擬串口

雖然不用更改 hello_world 模板工程的源代碼,但是我們還是要按照第一篇文章 《開發環境搭建與點燈》 第 2.3 小節里指示在工程屬性里勾選上 Link application to RAM 選項,此外還要調整一下工程屬性 Memory details 視窗里 SRAM_DTC 的位置,不同于 led_blinky 模板工程默認用 SRAM_DTC 作主鏈接 RAM,這個 hello_world 模板工程默認是用外接 SDRAM 作為主鏈接 RAM,這個會涉及 SDRAM 初始化腳本加載問題,我們先不考慮這個問題,直接將 RAM3 移動到 RAM 位置:

改完后編譯工程,使用板載 DAP-Link 下載工程除錯,然后用串口除錯助手軟體打開板載 DAP-Link 除錯器虛擬出的 mbed Serial Port,在 IDE 里按 F8(Resume)鍵讓程式跑起來,這時候應該能看到 'hello world.' 的列印輸出,

二、i.MXRT1062 離線啟動
目前為止,我們跑的兩個例程 led_blinky 和 hello_world 均是在 i.MXRT1062 內部 TCM 里在線除錯,板子斷電后程式就丟失了,那么如何去使能離線啟動呢?
這里就開始涉及 i.MXRT1062 啟動話題了,建議先通讀痞子衡舊文 《i.MXRT Boot簡介》,i.MXRT1062 內部并沒有非易失性代碼存盤器,所以你會在 EVB_AIoT 子板上看到有兩顆華邦 W25Q64JVSIQ Flash,一顆連到了芯片 FlexSPI1 外設(管腳 GPIO_SD_B1[11:06],這并不是唯一的啟動連接 pinmux 選擇,詳見 《i.MXRT1060 FlexSPI NOR啟動連接方式大全》 ),另一顆連到了芯片 LPSPI3 外設(管腳 GPIO_AD_B0[3:0]),這兩顆 Flash 都可以用于存盤應用程式代碼去啟動,只不過前一種連接方式能支持 XiP,后者不支持 XiP,一般情況下我們更多是用 FlexSPI 連接的 NOR Flash 去做離線啟動:

i.MXRT1062 的啟動作業主要是由固化在芯片內部的 ROM bootloader 來實作的,因為 ROM bootloader 在設計時要求支持非常多種類的存盤器(串并行NOR/串并行NAND/SD卡/eMMC等)去啟動,所以其定義了一套啟動頭來輔助啟動,詳見 《i.MXRT Bootable image格式與加載》一文,
對于連接在 FlexSPI 外設上的串行 NOR Flash,其至少需要三個啟動頭,包括 qspiflash_config、image_vector_table、boot_data,它們需要被燒寫到 Flash 中的固定偏移位置:0x0、0x1000、0x1020,這三個啟動頭已經在模板工程目錄 xip 檔案夾里的源檔案里了,image_vector_table、boot_data 頭正常不需要改動,qspiflash_config 頭因連接的 Flash 而異:

三、MCUXpresso IDE下在Flash除錯
要實作在 Flash 除錯,首先 IDE 要能把應用程式下載進 Flash,其次被下載的應用程式要能夠從 Flash 中正常啟動,前者需要一個合適的 Flash 下載演算法(請閱讀 《MCUXpresso IDE串行NOR Flash下載演算法》一文),后者需要正確的啟動頭以及芯片啟動模式設定(請閱讀 《MCUXpresso IDE下在線除錯時使用不同復位策略的現象總結》 一文),
板級設定方面只需要檢查下子板上的 J2 撥碼開關狀態是不是 1-off, 2-on,即主控芯片 BOOT_MODE[1:0] 為 2'b10 - 從 Flash 啟動模式,注意這個 J2 撥碼開關的設定僅 POR 復位有效,

因為 EVB_AIoT 板上使用的這顆華邦 W25Q64JVSIQ 與恩智浦官方 MIMXRT1060-EVK 評估板上使用的芯成 IS25WP064AJBLE 特性類似,均是符合 JESD216A 標準的四線串行 NOR Flash,而且管腳連接也一致,所以它倆對于 i.MXRT 來說下載演算法和啟動頭是一樣的,我們不需要做任何改動,直接使用模板工程配置就行了,
在 MCUXpresso IDE 工程里去掉 Link application to RAM 選項,再檢查下 LinkServer flash driver 的設定,這個默認 MIMXRT1060_SFDP_QSPI.cfx 下載演算法直接可以用于下載除錯 EVB_AIoT 子板上的華邦 Flash,試試看你可以在 Flash 里單步除錯這個 hello_world 例程的,

四、獨立燒錄工具
除了在 MCUXpresso IDE 里通過除錯器去下載程式進 Flash 啟動,恩智浦還提供了獨立的上位機工具來完成程式燒錄,這主要借助了 i.MXRT1062 的 ROM bootloader 以及二級 Flashloader 設計,這個功能不是依靠 SWD 除錯口來下載程式,而是主控芯片上指定的 UART1(GPIO_AD_B0[13:12]) 或者 USB OTG1 口去下載,
EVB_AIoT 母板上將 USB OTG1 信號引到了 PCIe 接頭上,所以我們不方便用 USB 口去下載程式,只能用連到母板板載 DAP-Link 除錯器虛擬串口上的 UART1 去下載了(這也是第一小節跑通串口列印例程的用意,確認下串口沒問題),
使用獨立燒錄工具下載前,必須先將子板上的 J2 撥碼開關狀態設為 1-on, 2-off,即主控芯片 BOOT_MODE[1:0] 為 2'b01 - 串行下載模式,再次提醒這個 J2 撥碼開關的設定僅 POR 復位有效,下載完成后需要將 J2 切回到 1-off,2-on 看芯片啟動效果,
獨立燒錄軟體均支持常見的應用程式鏡像檔案格式(.elf/.axf/.srec/.hex/.bin),你隨便用哪種格式都可以完成下載,非常方便,
4.1 MCUBootUtility
- 下載地址1:https://github.com/JayHeng/NXP-MCUBootUtility/releases/tag/v3.4.0
- 下載地址2:https://github.com/NXPmicro/mcu-boot-utility/releases/tag/v3.4.0

4.2 MCUXpresso Secure Provisioning Tool
- 下載地址:https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/mcuxpresso-secure-provisioning-tool:MCUXPRESSO-SECURE-PROVISIONING

至此,i.MXRT1062 TencentOS Tiny EVB_AIoT開發板在Flash除錯與離線啟動痞子衡便介紹完畢了,掌聲在哪里~~~
歡迎訂閱
文章會同時發布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上,
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦,

最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式,
衡杰(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師,
專欄內所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式專案,
關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑,
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393832.html
標籤:嵌入式
下一篇:痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT開發板(2) - 在Flash除錯及離線啟動
