痞子衡嵌入式:超級下載演算法RT-UFL v1.0在Keil MDK下的使用

痞子衡發表於2021-10-26

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

  超級下載演算法 RT-UFL v1.0 版本主要針對 Segger J-Link 偵錯程式,開發測試也都是在 J-Link Commander 和 J-Flash 軟體下進行的,但其實它也適用各大常用 IDE,今天我們就來聊聊它在 Keil MDK 下的使用:

一、準備測試環境

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

  • 整合開發環境: Keil uVision v5.31,點此下載
  • 軟體開發包: SDK_2.10.0_EVKB-IMXRT1050(Toolchain需包含Keil),點此下載
  • 軟體驅動: J-Link driver v6.86f,點此下載
  • 硬體工具: J-Link Plus偵錯程式
  • 硬體開發板: MIMXRT1050-EVKB (Rev.A1)

  上述軟體環境裡,J-Link 軟體驅動、Keil 版本、SDK 軟體包版本之間沒有明確依賴關係。J-Link 軟體驅動也不是一定限制在 v6.86f,只是超級下載演算法 v1.0 是在這個版本下詳細測試的,其他 J-Link 版本也可能適合,具體需要進一步測試。

二、在Keil MDK下使用步驟

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

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

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

2.2 為Keil指定包含超級下載演算法的J-Link驅動

  在預設情況下,所有 Keil 工程都統一使用 Keil 安裝目錄下自帶的 J-Link 軟體驅動(假定 App 工程選項設定裡模擬器選擇的是 J-Link),但是我們為了超級下載演算法額外安裝了一個指定版本的 J-Link 軟體驅動(v6.86f),因此我們需要指定 Keil 去使用包含超級下載演算法的 J-Link 驅動,這裡不是在 App 工程選項裡設定,而是需要藉助 JLinkDLLUpdater.exe 工具。

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

2.3 使用Keil開啟一個SDK工程

  現在我們需要一個 Keil 工程,這裡我們直接開啟 \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 要設定正確),然後再檢查一下 Keil 工程裡的 Flash 啟動頭是否與板卡上的實際 Flash 型號相匹配。

  • Note:要想在 IDE 設定的 Hardware Reset 復位型別下實現在 Flash 除錯,上述條件必須要滿足,但如果改為 Software/Core Reset 型別,則板卡啟動模式以及工程裡 Flash 啟動頭並不影響除錯。

2.5 在SDK工程設定裡使用J-Link下載演算法

  Keil 支援非常多種類的硬體模擬器,這裡我們首先需要在工程選項 Debug 下的 Use 下拉選單裡選擇 J-LINK / J-TRACE Cortex,表明目標板卡上連線的是 J-Link 型硬體模擬器。選定後點選 Settings 可以識別到當前 J-Link 模擬器序列號(如果模擬器連線上 PC 的話),並且檢查下 dll 版本是不是打了超級下載演算法的 J-Link 驅動版本(v6.86f)。

  然後就來到了全文中最關鍵的設定了,工程選項 Utilities 下的 Use Target Driver for Flash Programming 選項保持勾選,但是需要將 Update Target before Debugging 這個勾選給去掉(該選項表面意思是僅當映象檔案自上一次下載後發生變化才啟動新一次下載,但實測下來還有隱含功能,勾選上則一定會用 Keil 自身下載演算法,不勾選則會使用 J-Link 驅動裡的演算法),因為我們要用指定的 J-Link 軟體驅動下的超級下載演算法。

  • Note: Keil 安裝目錄 \Keil_v5\ARM\Flash 下(或者 Pack Installer 安裝的 DFP 包目錄下)自帶的 .FLM 格式下載演算法同時適用 CMSIS-DAP 型和 J-Link 型硬體模擬器,因此哪怕連線的是 J-Link 模擬器,也可以有兩種不同型別下載演算法選擇,這點上 Keil 與之前介紹的 MCUXpresso IDE 演算法使用設計不太一樣。

2.6 選擇合適的超級下載演算法進行線上下載除錯

  還差最後一步就可以愉快地在 Flash 除錯了,前一步我們在工程選項裡設定完之後,再次開啟工程選項時會彈出 J-Link device 選擇視窗,這時候是讓你選擇合適的下載演算法,選擇完之後會在工程目錄下(\SDK_2.10.0_EVKB-IMXRT1050\boards\evkbimxrt1050\demo_apps\led_blinky\mdk)生成一個 JLinkSettings.ini 檔案,用文字編輯器開啟這個 .ini 檔案,檢查 Override 為 1,然後設定 Device 的值為超級下載演算法代號就可以啦。本次測試我們需要的是 MIMXRT1050_UFL_L1 演算法。

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

  現在我們將 J-Link 模擬器連線上板卡,點選 Keil 選單欄 Start/Stop Debug Session 按鈕(藍圈標出的按鈕)進行下載除錯就可以了。注意不能使用 Download 按鈕(紅圈標出的按鈕)去下載,因為 Download 按鈕永遠呼叫的是 Keil 自帶下載演算法。

歡迎訂閱

文章會同時釋出到我的 部落格園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

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

相關文章