痞子衡主導(dǎo)的"學(xué)術(shù)"項目 《RT-UFL - 一個適用全平臺i.MXRT的超級下載算法設(shè)計》 v1.0 版發(fā)布近 4 個月了,部分客戶已經(jīng)在實際項目開發(fā)調(diào)試中用上了這個超級下載算法,目前反饋還可以,但這個超級下載算法遠(yuǎn)未到成熟狀態(tài),痞子衡正在策劃 v2.0 版本。
- RT-UFL v1.0下載地址:https://github.com/JayHeng/RT-UFL/archive/refs/tags/v1.0.zip
超級下載算法 RT-UFL v1.0 版本主要針對 Segger J-Link 調(diào)試器,開發(fā)測試也都是在 J-Link Commander 和 J-Flash 軟件下進(jìn)行的,但其實它也適用各大常用 IDE,今天我們就來聊聊它在 Keil MDK 下的使用:
一、準(zhǔn)備測試環(huán)境
首先需要準(zhǔn)備好測試環(huán)境,包含必要的軟件和硬件,痞子衡的環(huán)境如下:
上述軟件環(huán)境里,J-Link 軟件驅(qū)動、Keil 版本、SDK 軟件包版本之間沒有明確依賴關(guān)系。J-Link 軟件驅(qū)動也不是一定限制在 v6.86f,只是超級下載算法 v1.0 是在這個版本下詳細(xì)測試的,其他 J-Link 版本也可能適合,具體需要進(jìn)一步測試。
二、在Keil MDK下使用步驟
2.1 將超級下載算法包打進(jìn)J-Link驅(qū)動
第一步其實跟 Keil 無關(guān),因為是基于 J-Link 的超級下載算法,所以要給 J-Link 軟件驅(qū)動先打個更新包,具體參照 《超級下載算法RT-UFL v1.0發(fā)布,附J-Link下安裝教程》 一文。
- Note: Keil 安裝過程中會順便在 Keil_v5ARMSegger 路徑下安裝一個默認(rèn)的 J-Link 驅(qū)動(版本不可控,應(yīng)該是跟 Keil 版本匹配的),但為了避免不可預(yù)見的問題發(fā)生,最好自己手動安裝一個明確的 J-Link 驅(qū)動版本來使用(痞子衡安裝在了 C:tools_mcuSEGGERJLink_V686f)。
2.2 為Keil指定包含超級下載算法的J-Link驅(qū)動
在默認(rèn)情況下,所有 Keil 工程都統(tǒng)一使用 Keil 安裝目錄下自帶的 J-Link 軟件驅(qū)動(假定 App 工程選項設(shè)置里仿真器選擇的是 J-Link),但是我們?yōu)榱顺壪螺d算法額外安裝了一個指定版本的 J-Link 軟件驅(qū)動(v6.86f),因此我們需要指定 Keil 去使用包含超級下載算法的 J-Link 驅(qū)動,這里不是在 App 工程選項里設(shè)置,而是需要借助 JLinkDLLUpdater.exe 工具。
在我們額外安裝的包含超級下載算法的 C:tools_mcuSEGGERJLink_V686f 目錄下,有一個名為 JLinkDLLUpdater.exe 的小工具,雙擊這個工具,便可看到其搜索到了當(dāng)前 PC 環(huán)境下安裝的 IDE 列表,有我們正在使用的 Keil MDK,勾選上 Keil 便能完成 J-Link 驅(qū)動的指定。
2.3 使用Keil打開一個SDK工程
現(xiàn)在我們需要一個 Keil 工程,這里我們直接打開 SDK_2.10.0_EVKB-IMXRT1050boardsevkbimxrt1050demo_appsled_blinky 工程,注意將工程切換到 flexspi_nor build,即代碼 XIP 執(zhí)行版本。
2.4 確保板卡處于Flash啟動模式且SDK工程能夠XIP
然后將板卡供上電,確保板卡處于 NOR Flash 啟動模式(Boot Mode 以及 Boot Cfg 要設(shè)置正確),然后再檢查一下 Keil 工程里的 Flash 啟動頭是否與板卡上的實際 Flash 型號相匹配。
- Note:要想在 IDE 設(shè)置的 Hardware Reset 復(fù)位類型下實現(xiàn)在 Flash 調(diào)試,上述條件必須要滿足,但如果改為 Software/Core Reset 類型,則板卡啟動模式以及工程里 Flash 啟動頭并不影響調(diào)試。
2.5 在SDK工程設(shè)置里使用J-Link下載算法
Keil 支持非常多種類的硬件仿真器,這里我們首先需要在工程選項 Debug 下的 Use 下拉菜單里選擇 J-LINK / J-TRACE Cortex,表明目標(biāo)板卡上連接的是 J-Link 型硬件仿真器。選定后點(diǎn)擊 Settings 可以識別到當(dāng)前 J-Link 仿真器序列號(如果仿真器連接上 PC 的話),并且檢查下 dll 版本是不是打了超級下載算法的 J-Link 驅(qū)動版本(v6.86f)。
然后就來到了全文中最關(guān)鍵的設(shè)置了,工程選項 Utilities 下的 Use Target Driver for Flash Programming 選項保持勾選,但是需要將 Update Target before Debugging 這個勾選給去掉(該選項表面意思是僅當(dāng)鏡像文件自上一次下載后發(fā)生變化才啟動新一次下載,但實測下來還有隱含功能,勾選上則一定會用 Keil 自身下載算法,不勾選則會使用 J-Link 驅(qū)動里的算法),因為我們要用指定的 J-Link 軟件驅(qū)動下的超級下載算法。
- Note: Keil 安裝目錄 Keil_v5ARMFlash 下(或者 Pack Installer 安裝的 DFP 包目錄下)自帶的 .FLM 格式下載算法同時適用 CMSIS-DAP 型和 J-Link 型硬件仿真器,因此哪怕連接的是 J-Link 仿真器,也可以有兩種不同類型下載算法選擇,這點(diǎn)上 Keil 與之前介紹的 MCUXpresso IDE 算法使用設(shè)計不太一樣。
2.6 選擇合適的超級下載算法進(jìn)行在線下載調(diào)試
還差最后一步就可以愉快地在 Flash 調(diào)試了,前一步我們在工程選項里設(shè)置完之后,再次打開工程選項時會彈出 J-Link device 選擇窗口,這時候是讓你選擇合適的下載算法,選擇完之后會在工程目錄下(SDK_2.10.0_EVKB-IMXRT1050boardsevkbimxrt1050demo_appsled_blinkymdk)生成一個 JLinkSettings.ini 文件,用文本編輯器打開這個 .ini 文件,檢查 Override 為 1,然后設(shè)置 Device 的值為超級下載算法代號就可以啦。本次測試我們需要的是 MIMXRT1050_UFL_L1 算法。
- Note: 超級下載算法具體代號詳見 C:tools_mcuSEGGERJLink_V686fJLinkDevices.xml 文件,代號后綴 _L0 適用 QSPI 和 Octal Flash,代號后綴 _L1/L2 適用 Hyper Flash。
現(xiàn)在我們將 J-Link 仿真器連接上板卡,點(diǎn)擊 Keil 菜單欄 Start/Stop Debug Session 按鈕(藍(lán)圈標(biāo)出的按鈕)進(jìn)行下載調(diào)試就可以了。注意不能使用 Download 按鈕(紅圈標(biāo)出的按鈕)去下載,因為 Download 按鈕永遠(yuǎn)調(diào)用的是 Keil 自帶下載算法。