痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT開發板(2) - 在Flash調試及離線啟動
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1062 TencentOS Tiny EVB_AIoT開發板在Flash調試與離線啟動。
騰訊 TencentOS 團隊于2021年12月8日聯合恩智浦半導體、安謀科技發起了一個線上開發者活動 - TencentOS Tiny AIoT 應用創新大賽。為了這個大賽,騰訊 TencentOS 團隊聯合恩智浦半導體、厚德物聯網設計了一款高性能 AIoT 評估板,用于 TencentOS tiny 基礎內核和 AIoT 應用功能體驗和評估。
痞子衡受邀為這個大賽準備一場直播課程(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
4.2 MCUXpresso Secure Provisioning Tool
至此,i.MXRT1062 TencentOS Tiny EVB_AIoT開發板在Flash調試與離線啟動痞子衡便介紹完畢了,掌聲在哪里~~~
歡迎訂閱
文章會同時發布到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡杰(痞子衡),目前就職于恩智浦(NXP)半導體MCU系統應用部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請注明出處:http://www.rzrgm.cn/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 hengjie1989@foxmail.com
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。
浙公網安備 33010602011771號