前言
在使用Keil的時候,我們一般會透過一個下載器與目標晶片連線,這樣就可以實現的程式碼下載或除錯。那麼下載器是如何將我們的應用程式燒寫在我們晶片內部Flash當中的呢,是否可以同樣的方式燒錄在外部Flash上呢?這是此片文章所要說明的。
MDK下載演算法原理
透過MDK建立一批與地址資訊無關的函式,實現的功能主要有初始化,擦除,程式設計,讀取,校驗等,然後MDK除錯下載階段,會將演算法檔案載入到晶片的內部RAM裡面(載入地址可以透過MDK設定),然後MDK透過與這個演算法檔案的互動,實現程式下載,除錯階段資料讀取等操作。
主要流程圖如下:
- 載入演算法到晶片RAM。
- 執行初始化函式Init。
- 執行擦除操作,根據使用者的MDK配置,這裡可以選擇整個晶片擦除或者扇區擦除。
- 執行Uinit函式。
- 操作完畢。
製作燒錄演算法(FLM檔案)步驟
- 將ARM:CMSIS Pack資料夾(通常是C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的工程複製到一個新資料夾中,取消資料夾的只讀屬性,重新命名專案檔案NewDevice.uvprojx以表示新的flash 裝置名稱,例如MyDevice.uvprojx。
- 開啟工程,從工具欄中,使用下拉選擇目標來選擇處理器架構。
- 開啟對話方塊Project - Options for Target - Output並更改Name of Executable欄位的內容以表示裝置,例如MyDevice。
- 調整檔案FlashPrg中的程式設計演算法。
- 調整檔案FlashDev中的裝置引數。
- 使用Project - Build Target生成新的 Flash 程式設計演算法。
注意此方法制作的燒錄演算法是無法回讀FLASH的資料的,若想實現相關功能,可以使用Segger官方的燒錄演算法的工程,IDE使用的是SEGGER的Embedded Studio。
應用案例介紹
首先將工程copy出來,並將工程重新命名整理好,如圖所示:
首先可以先測試一下能否正常,讀取,寫入,擦寫FLASH。這些驗證完成後,首先現在FlashDev.c上,設定修改好相關引數:
下一步,將相關介面函式實現分別為Init、EraseChip、EraseSector、ProgramPage、Verify
編譯完成後將生成的.axf檔案改成.flm的檔案,至此燒錄演算法制作完成。
最後只需要在Jflash/keil測試一下能否正常燒錄程式即可。