燒錄演算法制作

一月一星辰發表於2024-07-28

前言

在使用Keil的時候,我們一般會透過一個下載器與目標晶片連線,這樣就可以實現的程式碼下載或除錯。那麼下載器是如何將我們的應用程式燒寫在我們晶片內部Flash當中的呢,是否可以同樣的方式燒錄在外部Flash上呢?這是此片文章所要說明的。

MDK下載演算法原理

透過MDK建立一批與地址資訊無關的函式,實現的功能主要有初始化,擦除,程式設計,讀取,校驗等,然後MDK除錯下載階段,會將演算法檔案載入到晶片的內部RAM裡面(載入地址可以透過MDK設定),然後MDK透過與這個演算法檔案的互動,實現程式下載,除錯階段資料讀取等操作。

主要流程圖如下:

  • 載入演算法到晶片RAM。
  • 執行初始化函式Init。
  • 執行擦除操作,根據使用者的MDK配置,這裡可以選擇整個晶片擦除或者扇區擦除。
  • 執行Uinit函式。
  • 操作完畢。

製作燒錄演算法(FLM檔案)步驟

  1. 將ARM:CMSIS Pack資料夾(通常是C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的工程複製到一個新資料夾中,取消資料夾的只讀屬性,重新命名專案檔案NewDevice.uvprojx以表示新的flash 裝置名稱,例如MyDevice.uvprojx。
  2. 開啟工程,從工具欄中,使用下拉選擇目標來選擇處理器架構。
  3. 開啟對話方塊Project - Options for Target - Output並更改Name of Executable欄位的內容以表示裝置,例如MyDevice。
  4. 調整檔案FlashPrg中的程式設計演算法。
  5. 調整檔案FlashDev中的裝置引數。
  6. 使用Project - Build Target生成新的 Flash 程式設計演算法。

注意此方法制作的燒錄演算法是無法回讀FLASH的資料的,若想實現相關功能,可以使用Segger官方的燒錄演算法的工程,IDE使用的是SEGGER的Embedded Studio。

應用案例介紹

首先將工程copy出來,並將工程重新命名整理好,如圖所示:

1721961956259.png

首先可以先測試一下能否正常,讀取,寫入,擦寫FLASH。這些驗證完成後,首先現在FlashDev.c上,設定修改好相關引數:

1721962953831.png

下一步,將相關介面函式實現分別為Init、EraseChip、EraseSector、ProgramPage、Verify

1721963680079.png

1721963690639.png

1721963701056.png

1721963715856.png

1721963727905.png

編譯完成後將生成的.axf檔案改成.flm的檔案,至此燒錄演算法制作完成。

最後只需要在Jflash/keil測試一下能否正常燒錄程式即可。

相關文章