2013年5月29日 星期三

[STM32] 基於 STM32 的 IAP 程式更新

  In Application Programing (IAP),顧名思義就是可以在運行程式時,更新程式。像是手機就是最好的例子,僅需要下載更新程式,不需要送回原廠燒錄,就可以更新手機上的程式了,但要使用這種方法,裝置必須要具備可以程式讀寫裝置上的 ROM 的功能,像是 FLASH。

  以意法半導體 (STMicroelectronics) 公司所出產的 STM32 系列為例,搭配自己設計的開發板來實現 IAP 的功能。

運作原理:
  程式分 BOOTLOAD 以及 USER 兩部分,BOOTLOAD 負責接收、讀取編譯後的 bin 檔案,並將 bin 檔案寫入已知 FLASH 起始地址的 USER 部分,並跳耀至該 FLASH 地址執行,若啟動時不需更新程式,則直接跳至 USER 起始地址執行,不更新該段程式碼。





實際實現:
  實際使用 STM32F103CBT,擁有 128KBytes 的 FLASH,一頁訂為 1KBytes,共分成 128 頁,FLASH 的起始位置為 0x8000_0000。bootloadSize 設定為 12KBytes,所以實際 USER 可以使用的大小 userSize + un-Use 為 116Kbytes,STM32 的 Bootloader 透過 UART 從電腦下載及接收 bin 檔案,電腦端使用自己所撰寫的 Python 程式,可以讀取 bin 檔案,並透過 UART 傳送至 STM32 上面,當 STM32 確定要更新程式,則會從電腦端讀取 bin 檔案,並更新至已知的 USER 起始位置 0x8000_0000 + bootloadSize,寫入完成則跳至該 FLASH 起始地址上執行。




相關資料
GitHub BSR_IAP