STM32F373に対応した弊社オリジナルブートローダです。
マイコンに備わったUSBを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。
GCC Developer Liteにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。
ファイルの送受信にはXMODMプロトコルを使用しますが、全てのXMODEMに対応したターミナルクライアントに対応するものではありません。
弊社提供のGCC Developer Lite最新版のインストールコンポーネントとして「STM32F373でのみ使用」、もしくは「フルインストール」が選択されている必要があります。
ソースをダウンロードし適宜解凍し、GCC Developer Liteでソースを開き、コンパイルオプションにて「STM32F373 (Flash)」の設定リストを選択し、さらに最適化レベルを「-Os」にしてコンパイルします。コンパイル後に生成される.binファイルをJTAG I/F等を介してフラッシュROMに書き込んだら準備完了です。
JTAGで接続する環境が無い場合は、まずバイナリ(.bin)ファイルではなくヘキサ(.hex)ファイルを生成させておきます。次に、STから提供されるDfuSeを使用します。DFU File Managerを起動してHEXファイルからDFU変換を選択します。
「S19 or Hex...」でコンパイル済み.hexファイルを読み込み、「Generate...」で.dfuファイルが生成されます。
最後に書き込みですが、ターゲットのブートモードをSystem memory(BOOT0を3.3Vに接続)にした後、USBケーブルでPCと接続します。本モードに対応したUSBのデバイスドライバ(STM Device in DFU Mode)はDfuSeをインストールした際にコピーされている筈なので、自動的に認識されると思います。
DfuSe Demonstrationを起動し、「Verify after download」にチェックをし、「Choose...」で先ほど生成した.dfuファイルを指定したら「Upgrade」を押して書き込みを行います。successfulが表示されたら作業完了です。
本ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。そのため、ブートローダ自身のサイズが大きいと、ユーザが使用できる領域が圧迫されてしまいます。
現在リリースしているバージョンでは占有フラッシュROM領域が16kbyte以下である前提とします。
ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x08004000からフラッシュROMの最終アドレスまでとなります。
ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。
GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。
USBを仮想シリアルポートとして認識させるためのWindows用デバイスドライバは、GCC Developer Liteをインストールした際にWindowsのシステムフォルダにコピーされます。USBケーブルでマイコンボードとPCを接続するとデバイスドライバを要求されますが、自動検索させる事で自動的にインストールが行われます。
インストール後、新しいCOMポートがWindowsのデバイスとして追加され、SIMPLE TERMから該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「STMicroelectronics Virtual COM Port (COMxxx)」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。
ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、ハードリセット(リセットボタンの押下)を行います。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。
また、ハードリセット以外の条件(WDTやソフトリセット等)でリセットされた場合は、再度ユーザプログラムへ実行が遷移します。
SIMPLE TERMからのキー入力にて各種機能を実行します。
コマンドのリストを表示します。
>? --< TIMSTM32F3 USB Ver.1.0 by BestTechnology >-- [w]UPLOAD [r]DOWNLOAD [g]BOOT [d]DUMP [i]FLASH INFO [e]ERASE >
ホストからフラッシュROMへファイルを転送及び書き込みを行います。
>w START UPLOAD... ARE YOU SURE? (Y/N)
ここでyを入力すると転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEMプロトコルで転送を開始させます。
成功すれば<SUCCESS>、失敗すると<ERROR>と表示されます。
>w START UPLOAD... ARE YOU SURE? (Y/N) y <SUCCESS> >
本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。
なお、既にユーザプログラムが書き込まれていると書き込みに失敗しますので、書き込む前には消去コマンドでユーザプログラム領域を消去する必要があります。
フラッシュROMに書き込まれたユーザプログラムを実行します。
>g GO !!
ユーザプログラムが書き込まれていなければ、
>g FLASH IS EMPTY >
というメッセージを表示してコマンドモードに戻ります。
メモリを16進数でダンプ表示します。スタートアドレスを入力せずにエンターキーのみを押すと、ブートローダ内で想定しているユーザープログラムが保存されているアドレスの先頭を指定したと見なします。
>d START ADDRESS:$08004000 08004000:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004010:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004020:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004030:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004040:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004050:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004060:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004070:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004080:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 08004090:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040A0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040B0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040C0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040D0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040E0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 080040F0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ ---([u]up [d]down [ESC]exit)---