本文描述如何在現有 RT1170 SDK 的範例,透過移植 Boot ROM API 完成在不調整硬體架構下進入 SDP Mode 達到更新 Firmware 的目的。
用途說明 : 開發環境,本文使用版本 11.3.0_5222。
用途說明 : 驅動及範例,本文使用版本SDK_2.9.2_MIMXRT1170-EVK。
3. NXP 驅動 fsl_flexspi、fsl_romapi、fsl_rtwdog、fsl_wdog
用途說明 : 提供 ROM API 所需檔案。
用途說明 : 提供更新 Firmware 所需功能,目前提供 UART1 及 USB 更新 Firmware功能。
用途說明 : 功能驗證。
用途說明 : 提供程式燒錄與Debug。
本章節說明如何利用 MCU Boot Utility 創建 Image File,方便後續使用 boot ROM API 進入 SDP Mode 下載更新,把預設範例的 blinky 綠燈改為紅燈。
1.點選 Import SDK example(s)…,在 SDK Import Wizard點選 MIMXRT1170 à MIMXRT1170xxxxx 後,在點選右邊開發版圖示,再點選 Next。
圖 3.1.
2.在 Examples 輸入 blinky,以此範例作為更新 Firmware 的範本,點選 iled_blinky_cm7 後再點選 Finish。
圖 3.2.
3.新增紅燈的 pin config,在 Project Explorer 點選 evkmimxrt1170_iled_blinky_cm7 後點選 MCUXpresso Config Tools>> à Open Pins,。
圖 3.3.
4.在 filter 處輸入 L14 後點選 L14 後在 Pin 處勾選 GPIO9_IO25。
圖 3.4.
5.在 Routing Details for BOARD_InitPins 在 L14 欄的 Direction 項選擇 Output,此處可確認 L14 為 GPIO9,IO25。
圖 3.5.
6.點選 Update Code 更新程式碼,之後出現的 Update Files 視窗會顯示更新的檔案,以此例來說調整的為 pin_mux.c,點擊 change 會顯示修改的部分,確認無誤後點選 OK。
圖 3.6.
圖 3.7.
7.點選 board à board.h 修改第 72 行修改為 25U
#define BOARD_USER_LED_GPIO_PIN (25U) |
圖 3.8.
8.點選 Build (槌子圖案)產生燒錄檔。
圖 3.9.
9.建立完成後在 console 顯示 0 error 及 0 warning。
圖 3.10.
10. Build 完成後,在 debug 資料夾中對 evkmimxrt1170_iled_blinky_cm7.axf 點擊右鍵 à Binary Utilities à Create Binary
圖 3.11.
11.確認 Work Space 下 evkmimxrt1170_iled_blinky_cm7 à Debug 資料夾下有產生燒錄用 Bin 檔,此檔案在下一章節將用於更新 Firmware。
圖 3.12.
本章節在於說明透過 Boot ROM API 達成在 application 中不修改硬體架構下進入 SDP Mode,進行後續 Firmware Update。
1.參考第三章步驟 1 及步驟 2 建立新的 blinky 範例,因之前已經載入一次 blinky 範例導致名稱重複,故在 project name suffix 中輸入任意名稱即可。
圖 4.1.
2.載入 SDK Example ROMAPI
3.將 ROM API 資料夾中下列檔案複製到 blinky 專案的 Drivers 資料夾。
l fsl_romapi.c
l fsl_romapi.h
圖 4.2.
4.開啟 led_blinky.c 開頭加入以下片段
圖 4.3.
5.在 main 中新增 ROM_API_Init
圖 4.4.
6.將 while(1){…} 修改為以下程式,此將程式改為 LED 閃爍二次後,呼叫 ROM_RunBootloader 進入 SDP Mode
for(int i = 0 ; i < 5 ;i++) {
/* Delay 1000 ms */ SysTick_DelayTicks(200U); if (g_pinSet) { GPIO_PinWrite(GPIO9, 3U, 0U); g_pinSet = false; } else { GPIO_PinWrite(GPIO9, 3U, 1U); g_pinSet = true; } } uint32_t arg = 0xeb100000; ROM_RunBootloader(&arg); |
圖 4.5.
7.點選 Build (槌子圖案),產生燒錄檔。
圖 4.6.
8.使用 Micro USB Cable 連接 RT1170 J11 及 J20 到電腦。
圖 4.7.
9.在專案點擊右鍵 à Debug As à MCUXpresso IDE LinkServer… 開始燒錄。
圖 4.8.
10.燒錄完成後點選 Terminate
圖 4.9.
本章節介紹如何使用上一章的範例在不修改硬體架構下進入 SDP Mode 並透過MCU Boot Utility 更新 Firmware 。
1.在 NXP-MCUBootUtility-3.3.0 資料夾中點選 bin à NXP-MCUBootUtility.exe
圖 5.1.
圖 5.2.
2.將板子上電後會看到板子綠燈閃爍二次後停止,此時回到 MCU Boot Utility 畫面看到 USB-HID 更新出 Vendor ID 及 Product ID 的參數,點選 Connect to ROM。
圖 5.3.
3.此時看到藍色 ICON 並且 Vendor ID 及 Product ID 更新。
圖 5.4.
4.切換到 Boot Device Memory 分頁點選 Browse。
圖 5.5.
5.選擇第三章創建的 bin file 進行更新
圖 5.6.
6.點擊 Write(Auto Erase)
圖 5.7.
7.當下面進度條跑完時,點選 Reset Device 後即可看到紅燈不斷閃爍,此時韌體已更新完畢。
圖 5.8.
l i.MX RT1170 Processor Reference Manual _ Document Number: IMXRT1170RM Rev. 1, 05/2021
參考來源