痞子衡嵌入式:超級下載算法RT-UFL v1.0在IAR EW for Arm下的使用


  痞子衡主導的"學術"項目 《RT-UFL - 一個適用全平臺i.MXRT的超級下載算法設計》 v1.0 版發佈近 4 個月了,部分客戶已經在實際項目開發調試中用上了這個超級下載算法,目前反饋還可以,但這個超級下載算法遠未到成熟狀態,痞子衡正在策劃 v2.0 版本。

  超級下載算法 RT-UFL v1.0 版本主要針對 Segger J-Link 調試器,開發測試也都是在 J-Link Commander 和 J-Flash 軟件下進行的,但其實它也適用各大常用 IDE,今天我們就來聊聊它在 IAR EW for Arm 下的使用:

一、準備測試環境

  首先需要準備好測試環境,包含必要的軟件和硬件,痞子衡的環境如下:

  • 集成開發環境: IAR EW for Arm v8.50.6,點此下載
  • 軟件開發包: SDK_2.10.0_EVKB-IMXRT1050(Toolchain需包含IAR),點此下載
  • 軟件驅動: J-Link driver v6.86f,點此下載
  • 硬件工具: J-Link Plus調試器
  • 硬件開發板: MIMXRT1050-EVKB (Rev.A1)

  上述軟件環境裏,IAR 版本與 SDK 軟件包版本之間沒有明確依賴關係,但 J-Link 軟件驅動版本與 IAR 版本之間有一些關聯,具體在下面 2.2 節裏會提及。

  J-Link 軟件驅動不是一定限制在 v6.86f,只是超級下載算法 v1.0 是在這個版本下詳細測試的,其他 J-Link 版本也可能適合,具體需要進一步測試。

二、在IAR EW for Arm下使用步驟

2.1 將超級下載算法包打進J-Link驅動

  第一步其實跟 IAR 無關,因爲是基於 J-Link 的超級下載算法,所以要給 J-Link 軟件驅動先打個更新包,具體參照 《超級下載算法RT-UFL v1.0發佈,附J-Link下安裝教程》 一文。

  • Note: IAR 安裝過程中會順便在 \IAR Systems\Embedded Workbench 8.50.6\arm\bin\ 路徑下安裝一個默認的 J-Link 驅動(版本不可控,應該是跟 IAR 版本匹配的),但爲了避免不可預見的問題發生,最好自己手動安裝一個明確的 J-Link 驅動版本來使用(痞子衡安裝在了 C:\tools_mcu\SEGGER\JLink_V686f)。

2.2 爲IAR指定包含超級下載算法的J-Link驅動

  在默認情況下,所有 IAR 工程都統一使用 IAR 安裝目錄下自帶的 J-Link 軟件驅動及其下載算法(假定 App 工程選項設置裏仿真器選擇的是 J-Link,且不用 IAR 下載算法),但是我們爲了超級下載算法額外安裝了一個指定版本的 J-Link 軟件驅動(v6.86f),因此我們需要指定 IAR 去使用包含超級下載算法的 J-Link 驅動,這裏不是在 App 工程選項裏設置,而是需要藉助 JLinkDLLUpdater.exe 工具。

  在我們額外安裝的包含超級下載算法的 C:\tools_mcu\SEGGER\JLink_V686f 目錄下,有一個名爲 JLinkDLLUpdater.exe 的小工具,雙擊這個工具,便可看到其搜索到了當前 PC 環境下安裝的 IDE 列表,有我們正在使用的 IAR v8.50.6,勾選上 IAR 便能完成 J-Link 驅動的指定。

  其實痞子衡當前 PC 上安裝了兩個版本的 IAR,分別是 v8.50.6 和 v9.10.2,不過 J-Link v6.86f 版本下的 JLinkDLLUpdater.exe 僅識別出了 IAR v8.50.6,這意味着,如果你安裝的是 IAR v9.10.2,可能無法去指定使用 額外安裝的 J-Link v6.86f 版本驅動。後來痞子衡安裝了最新的 J-Link v7.56b,它下面的 JLinkDLLUpdater.exe 能將兩個版本的 IAR 都識別出,這就是文章前面提及的 J-Link 驅動版本與 IAR 版本的關聯限制。

2.3 使用IAR打開一個SDK工程

  現在我們需要一個 IAR 工程,這裏我們直接打開 \SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky 工程,注意將工程切換到 flexspi_nor build,即代碼 XIP 執行版本。

2.4 確保板卡處於Flash啓動模式且SDK工程能夠XIP

  然後將板卡供上電,確保板卡處於 NOR Flash 啓動模式(Boot Mode 以及 Boot Cfg 要設置正確),然後再檢查一下 IAR 工程裏的 Flash 啓動頭是否與板卡上的實際 Flash 型號相匹配。

  • Note:要想在 IDE 設置的 Hardware Reset 復位類型下實現在 Flash 調試,上述條件必須要滿足,但如果改爲 Software/Core Reset 類型,則板卡啓動模式以及工程裏 Flash 啓動頭並不影響調試。

2.5 在SDK工程設置裏使用J-Link下載算法

  IAR 支持非常多種類的硬件仿真器,這裏我們首先需要在工程選項 Debugger/ Setup 下的 Driver 下拉菜單裏選擇 J-Link/J-Trace,表明目標板卡上連接的是 J-Link 型硬件仿真器。

  然後就來到了全文中最關鍵的設置了,工程選項 Debugger/ Download 下的 Use flash loader(s) 這個選項默認是勾選的,即代表不管外面連接的是哪種硬件仿真器,統一使用 IAR 目錄下自帶的 .out 下載算法,但是我們一定要將這個勾選給去掉,因爲我們要用指定的 J-Link 軟件驅動下的超級下載算法。

  • Note: IAR 安裝目錄 \IAR Systems\Embedded Workbench 8.50.6\arm\config\flashloader\NXP 下自帶的 .out 格式下載算法同時適用 CMSIS-DAP 型和 J-Link 型硬件仿真器,因此哪怕連接的是 J-Link 仿真器,也可以有兩種不同類型下載算法選擇,這點上 IAR 與上一篇介紹的 MCUXpresso IDE 算法使用設計不太一樣。

2.6 選擇合適的超級下載算法進行在線下載調試

  還差最後一步就可以愉快地在 Flash 調試了,我們將 J-Link 仿真器連接上板卡,點擊 IAR 菜單欄 Download and Debug 按鈕進行調試,發現竟然報錯了,似乎有下載過程,但無法單步跑。這其實是可以理解的,因爲我們還沒有選擇合適的超級下載算法,至少在 IAR 工程選項裏沒有顯式的去選。

  其實 IAR 工程設置裏並沒有給我們主動選擇 J-Link 下載算法的機會,它自己偷偷通過工程選項裏的 General Options/Target 下的 Device 設置,根據 MIMXRT1052xxx6B 值到 C:\tools_mcu\SEGGER\JLink_V686f\JLinkDevices.xml 文件中做了匹配,自動選擇了第一個匹配到的 MIMXRT1050_UFL_L0 算法,但其實本次測試我們需要的是 MIMXRT1050_UFL_L1 算法。

  • Note: 超級下載算法具體代號詳見 C:\tools_mcu\SEGGER\JLink_V686f\JLinkDevices.xml 文件,代號後綴 _L0 適用 QSPI 和 Octal Flash,代號後綴 _L1/L2 適用 Hyper Flash。

  如何解決選擇具體超級下載算法的問題?當然根據情況動態調整 C:\tools_mcu\SEGGER\JLink_V686f\JLinkDevices.xml 文件內容是可行的。比如可以將 MIMXRT1050_UFL_L1 算法 <device> 描述塊移到 MIMXRT1050_UFL_L0 算法 <device> 描述塊上面,或者保持它們的位置不變,但臨時將 MIMXRT1050_UFL_L0 算法 <device> 描述塊裏 Aliases 表達式裏的 MIMXRT1052xxx6B 值去掉。但是這種方法太不友好了,有沒有更便捷的方式?

  既然痞子衡這麼問了,那肯定是有啦,當在 IAR 裏用 J-Link 調試過一次,無論成功與否,都會在工程目錄下(\SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky\iar\settings)生成一個 xxProject_flexspi_nor_debug.jlink 文件,用文本編輯器打開這個 .jlink 文件,將 Override 改爲 1,然後設置 Device 的值爲超級下載算法代號就可以啦。現在看看你是不是可以正常下載調試了。

Override = 1
Device="MIMXRT1050_UFL_L1"

歡迎訂閱

文章會同時發佈到我的 博客園主頁CSDN主頁知乎主頁微信公衆號 平臺上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章