FC2ブログ

爪車

ブートローダ

RS485経由でファームウェアのアップデートができるようにブートローダを作りました。
STM32にはもともと組み込みのブートローダがあるのですが、RS485ドライバ送受信切り替えのためのDriverEnable信号が操作できないので自前で実装しました。

ROMをブートローダとメインのプログラムとブート情報を保存する領域に分けて、ブートローダはブート情報領域を読んで、メインプログラムの情報が書き込まれていれば、メインプログラムを起動。
ブートローダでのファームアップデートは、ビルドしたメインプログラムのバイナリの先頭にブート情報をくっつけて、STM32CubeProgrammer経由でFLASH書き換えするようにしました。
(ブートローダのファーム書き換えプロトコルはSTMのアプリケーションノートAN3155をもとに実装)

ブート情報は、ブート情報の識別子としてのマジックナンバー(8byte)と、メインプログラムのサイズ(4byte)、チェックサム(CRC32)(4byte)、ブート情報のチェックサム(CRC32)(4byte)で構成。

ROMの配置はいまのところこんな感じです。(RAMは共用)(STM32L432KB)
FLASH_BOOT   (rx)  : ORIGIN = 0x8000000,  LENGTH =  18K
FLASH_INFO   (rx)  : ORIGIN = 0x8004800,  LENGTH =   2K
FLASH_MAIN   (rx)  : ORIGIN = 0x8005000,  LENGTH = 100K
FLASH_DATA   (rx)  : ORIGIN = 0x801E000,  LENGTH =   8K

メインのプログラム起動中にファームアップデートする場合は、ブート情報の領域を消去してからリセットし、ブートローダを起動するようにしてそこからアップデートするようにしています。

Top

HOME

tsumehashi

Author:tsumehashi
FC2ブログへようこそ!

12 | 2019/01 | 02
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -