LPC84xに対応した弊社オリジナルブートローダです。
マイコンに備わったUSARTを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。
GCC Developer Liteにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。
ファイルの送受信にはXMODM-1Kプロトコルを使用します。
弊社提供のGCC Developer Liteがインストールされている必要があります。
ソースをダウンロードし適宜解凍し、GCC Developer Liteでソースを開き、コンパイルオプションにて「LPC845 (ROM)」の設定リストを選択し、さらに隣家スクリプトファイルを「lpc845_rom_tiny.x」に変更してコンパイルします。コンパイル後に生成される.binファイルをISPやSWD等を介してフラッシュROMに書き込んだら準備完了です。
本ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。そのため、ブートローダ自身のサイズが大きいと、ユーザが使用できる領域が圧迫されてしまいます。
現在リリースしているバージョンでは占有フラッシュROM領域が3kbyte以下である前提とします。
ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x00000C00からフラッシュROMの最終アドレスまでとなります。
ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。
GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。
ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、起動直後の0.15秒以内に「!」を3回連続して受信する必要があります。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。
ユーザプログラムがユーザプログラムに実行が遷移している時のブートローダの条件を以下に示します。
SIMPLE TERMからのキー入力にて各種機能を実行します。
ホストからフラッシュROMへファイルを転送及び書き込みを行います。また、必要に応じてセクタイレースを行います。
>w
即時転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEM-1Kプロトコルで転送を開始させます。
成功すればOK、失敗するとNGと表示されます。
>w OK >
本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。
フラッシュROMに書き込まれたユーザプログラムを実行します。
>g
実行可能なユーザプログラムでないと判断されると、
>g NG >
というメッセージを表示してコマンドモードに戻ります。
メモリを16進数でダンプ表示します。ブートローダ内で想定しているユーザープログラムが保存されているアドレスの先頭から表示します。
[BS]で前ページ、その他のキーで次ページを表示し、[ESC]で終了します。
>d 00000C00:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C10:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C20:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C30:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C40:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C50:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C60:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C70:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C80:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000C90:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CA0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CB0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CC0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CD0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CE0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 00000CF0:FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
なお、MCUのメモリ領域を超えてダンプするとハードフォルトします。