STM32のDFUファームウェアは、それ自体が、ユーザ用のプログラム領域に存在する通常のプログラムです。そのため、プログラム領域に他のプログラムを書き込むと、DFUファームウェアは上書きされて消滅します。フラッシュメモリプログラミング機能を使って、マイコンのソフトウェアから、DFUの領域(0x08000000-0x08002FFF)に書き込みをした場合も、DFUファームウェアが損傷します。その後にDFUを使用したい場合には、DFUファームウェアを復元する必要があります。以下の手順によりDFUファームウェアを復元できます。もちろん、最初からDFUファームウェアが入っていないマイコンボードにDFUファームウェアを書き込むためにも使用できます。
用意するもの
マイコンのフラッシュに書き込みができるインターフェース(FT2232ボード/ST-LINK/USBシリアル変換アダプタ)
DFUが書き込まれていないマイコンボード
makefileの設定
DFUを復元するマイコンボードを選択します。
# select board name #STM32_P103 = 1 #STM32_H103 = 1 #CQ_STARM = 1 #CQ_ST103Z = 1 #STM3210E_EVAL = 1 STBee = 1 #STBee_Mini = 1 #STBee_Mini_SWD = 1 #STM32_VLD = 1 |
DFUの復元に使用するインターフェースを選択します。DFUが存在していない状態ですから、DFUを使って復元することはできません。
# select way to write flash # ST-LINK via SWD but not with STVP is done by Debug button # but not by make target #FT2232_JTAG = 1 #STLINK_JTAG_GDB = 1 #STLINK_SWD_STVP = 1 #VERSALOON_SWD = 1 #DFU = 1 UART = 1 |
コンパイルするわけではないのですが、objcopyコマンドを使っていますので、以下の通りYAGARTOを選択しておきます。
# select toolchain YAGARTO = 1 #DEFAULT_PATH = 1 #CODESOURCERY = 1 |
UARTを使用する場合は、マイコンボードに接続しているCOMポートを選択します。
# designate serial port number to connect UART1 using ST Flash Loader FLASH_LOADER_PORT = 25 |
その他の設定項目はどれを選択していても構いません。
復元の実行
画面右側のMake Targetsビュー/STM32ツリー内のrestore_dfuをダブルクリックします。Consoleビュー内のメッセージ/Progressのプログレスバーが終了したら、書き込み完了です。書き込みインターフェースを外してからリセットして、オンボードLEDがピカッ、ピカッと点滅すれば、復元に成功しています。
注意事項
・現在動作を検証したのは、FT2232/UART/ST-LINK(STVP)のみです。
・STBee MiniはまだDFUファームウェアをビルドしていないので、バイナリがありません。
・STBee用のDFUファームウェアは筆者がST社のものをもとにビルドしています。ストロベリーリナックス社で最初から書き込まれているDFUファームウェアとは、DFUモード時のLEDの点滅パターンが異なります。