1: 2014-08-20 (水) 13:26:06 yoshida[5] [6] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:STM32F3 Bootloader | ||
+ | #norelated | ||
+ | #contents | ||
+ | **はじめに [#h3cf836e] | ||
+ | STM32F373に対応した弊社オリジナルブートローダです。~ | ||
+ | マイコンに備わったUSBを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。~ | ||
+ | GCC Developer Liteにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。~ | ||
+ | ファイルの送受信にはXMODMプロトコルを使用しますが、全てのXMODEMに対応したターミナルクライアントに対応するものではありません。 | ||
+ | **基本仕様 [#r62ea0f7] | ||
+ | ***コンパイル方法 [#kdc2554b] | ||
+ | 弊社提供の[[GCC Developer Lite]]最新版のインストールコンポーネントとして「STM32F373でのみ使用」、もしくは「フルインストール」が選択されている必要があります。 | ||
+ | |||
+ | ソースをダウンロードし適宜解凍し、GCC Developer Liteでソースを開き、コンパイルオプションにて「STM32F373 (Flash)」の設定リストを選択し、さらに最適化レベルを「-Os」にしてコンパイルします。コンパイル後に生成される.binファイルをJTAG I/F等を介してフラッシュROMに書き込んだら準備完了です。 | ||
+ | |||
+ | JTAGで接続する環境が無い場合は、まずバイナリ(.bin)ファイルではなくヘキサ(.hex)ファイルを生成させておきます。次に、[[ST>http://www.st.com/web/jp/home.html]]から提供される[[DfuSe>http://www.st.com/web/jp/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916]]を使用します。DFU File Managerを起動してHEXファイルからDFU変換を選択します。 | ||
+ | #ref(dfu_filemanage1.png,100%) | ||
+ | 「S19 or Hex...」でコンパイル済み.hexファイルを読み込み、「Generate...」で.dfuファイルが生成されます。 | ||
+ | #ref(dfu_filemanage2.png,100%) | ||
+ | 最後に書き込みですが、ターゲットのブートモードをSystem memory(BOOT0を3.3Vに接続)にした後、USBケーブルでPCと接続します。本モードに対応したUSBのデバイスドライバ(STM Device in DFU Mode)はDfuSeをインストールした際にコピーされている筈なので、自動的に認識されると思います。~ | ||
+ | DfuSe Demonstrationを起動し、「Verify after download」にチェックをし、「Choose...」で先ほど生成した.dfuファイルを指定したら「Upgrade」を押して書き込みを行います。successfulが表示されたら作業完了です。 | ||
+ | #ref(DfuSe.png,100%) | ||
+ | |||
+ | ***ソース及びコンパイル済みバイナリのダウンロード [#DOWNLOAD] | ||
+ | #ref(STM32F3_BL_1.0.ZIP) | ||
+ | バージョン: 1.0~ | ||
+ | 公開日: 2014/08/20 | ||
+ | 更新内容:一般向けリリース | ||
+ | |||
+ | ***メモリマップ [#fd1295e9] | ||
+ | 本ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。そのため、ブートローダ自身のサイズが大きいと、ユーザが使用できる領域が圧迫されてしまいます。~ | ||
+ | 現在リリースしているバージョンでは占有フラッシュROM領域が16kbyte以下である前提とします。 | ||
+ | #ref(bl_memmap.png,100%) | ||
+ | ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x08004000からフラッシュROMの最終番地までとなります。 | ||
+ | |||
+ | ***ユーザプログラム [#a1597f0a] | ||
+ | ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。 | ||
+ | -起動アドレスが0x08004000番地である | ||
+ | -0x08000000~0x08003FFF番地のフラッシュROM領域に対して書き込み操作を行わない | ||
+ | |||
+ | GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。 | ||
+ | |||
+ | ***注意事項 [#c853261b] | ||
+ | -ブートローダ自身は単純なローダに過ぎませんので、GDB等のデバッガとの接続は考慮されていません。 | ||
+ | |||
+ | **使用方法 [#d84bf868] | ||
+ | |||
+ | ***デバイスドライバ [#c1a78e7c] | ||
+ | USBを仮想シリアルポートとして認識させるための[[Windows用デバイスドライバ>http://www.st.com/web/jp/catalog/tools/PF257938]]は、GCC Developer Liteをインストールした際にWindowsのシステムフォルダにコピーされます。USBケーブルでマイコンボードとPCを接続するとデバイスドライバを要求されますが、自動検索させる事で自動的にインストールが行われます。~ | ||
+ | インストール後、新しいCOMポートがWindowsのデバイスとして追加され、[[SIMPLE TERM>GDL#STERM]]から該当するCOMポートを選択(COMポート番号はPCの環境によって変わるが、デバイス名に「STMicroelectronics Virtual COM Port (COMxxx)」が表示されたポートを選択)しオープンするとブートローダの各種コマンドが使用可能となります。 | ||
+ | |||
+ | ***ブートローダの動作フロー [#BOOTFLOW] | ||
+ | #ref(SAM7BL_BOOT_FLOW.png,100%) | ||
+ | ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。~ | ||
+ | ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、ハードリセット(リセットボタンの押下)を行います。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。~ | ||
+ | また、ハードリセット以外の条件(WDTやソフトリセット等)でリセットされた場合は、再度ユーザプログラムへ実行が遷移します。 | ||
+ | ***コマンド [#sb3ccc22] | ||
+ | [[SIMPLE TERM>GDL#STERM]]からのキー入力にて各種機能を実行します。 | ||
+ | |||
+ | ****ヘルプ '?' [#k1c5df53] | ||
+ | コマンドのリストを表示します。 | ||
+ | >? | ||
+ | --< TIMSTM32F3 USB Ver.1.0 by BestTechnology >-- | ||
+ | [w]UPLOAD [r]DOWNLOAD [g]BOOT [d]DUMP [i]FLASH INFO [e]ERASE | ||
+ | > | ||
+ | |||
+ | ****書き込み 'w' [#ddb17d72] | ||
+ | ホストからフラッシュROMへファイルを転送及び書き込みを行います。 | ||
+ | >w | ||
+ | START UPLOAD... | ||
+ | ARE YOU SURE? (Y/N) | ||
+ | ここでyを入力すると転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEMプロトコルで転送を開始させます。~ | ||
+ | 成功すれば<SUCCESS>、失敗すると<ERROR>と表示されます。 | ||
+ | >w | ||
+ | START UPLOAD... | ||
+ | ARE YOU SURE? (Y/N) y | ||
+ | <SUCCESS> | ||
+ | > | ||
+ | 本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。 | ||
+ | |||
+ | なお、既にユーザプログラムが書き込まれていると書き込みに失敗しますので、書き込む前には消去コマンドでユーザプログラム領域を消去する必要があります。 | ||
+ | |||
+ | ****実行 'g' [#u539eceb] | ||
+ | フラッシュROMに書き込まれたユーザプログラムを実行します。 | ||
+ | >g | ||
+ | GO !! | ||
+ | ユーザプログラムが書き込まれていなければ、 | ||
+ | >g | ||
+ | FLASH IS EMPTY | ||
+ | > | ||
+ | というメッセージを表示してコマンドモードに戻ります。 | ||
+ | ****ソフトリセット 'x' [#of05b130] | ||
+ | マイコンをソフトリセットします。ユーザプログラムが既に書き込まれている場合は、リセットから復帰後ユーザプログラムが実行されます。 | ||
+ | ****メモリダンプ 'd' [#pa71dd4c] | ||
+ | メモリを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)--- | ||
+ | |||
+ | ****消去 'e' [#a03e16d8] | ||
+ | フラッシュROMのユーザプログラム領域を消去します。 | ||
+ | >e | ||
+ | ERASE ALL FLASH | ||
+ | ARE YOU SURE? (Y/N) | ||
+ | ここでyを入力すると消去を開始します。 | ||
+ | >e | ||
+ | ERASE ALL FLASH | ||
+ | ARE YOU SURE? (Y/N) y.......................................... | ||
+ | COMPLETED. | ||
+ | > | ||
+ | 書き込まれているユーザプログラムのサイズやデバイスのメモリ容量によって消去時間は異なります。 | ||
+ | |||
+ | ****フラッシュステータス 'i' [#ie72fbc6] | ||
+ | FSRレジスタ及びユーザプログラムの書き込み状況を表示します。ユーザプログラムが実行不可の場合は、Empty or Not Executableと表示されます。 | ||
+ | >i | ||
+ | FLASH: Empty or Not Executable | ||
+ | OPTION BYTE: $00FF55AA $00FF00FF $00FF00FF $00FF00FF | ||
+ | ユーザプログラムが書き込まれているとEMPTYの表示はなされません。 | ||
+ | >i | ||
+ | FLASH: Not Empty | ||
+ | OPTION BYTE: $00FF55AA $00FF00FF $00FF00FF $00FF00FF |
(This host) = http://www.besttechnology.co.jp