DFUの復元

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の点滅パターンが異なります。