ページへ戻る

− Links

 印刷 

LPC84x Bootloader のソース :: Besttechnology

knowledge:LPC84x Bootloaderのソース

« Prev[3]  
TITLE:LPC84x Bootloader
#norelated
#contents
**はじめに [#h3cf836e]
LPC84xに対応した弊社オリジナルブートローダです。~
マイコンに備わったUSARTを経由してホストからマイコンボードのフラッシュROMへユーザプログラムを転送及び書き込んだり、書き込まれたユーザプログラムを実行するといった機能を持ちます。~
GCC Developer Liteにてソースプログラムからコンパイルでき、ユーザ自身による改造も可能です。~
ファイルの送受信にはXMODM-1Kプロトコルを使用します。

**基本仕様 [#r62ea0f7]
***コンパイル方法 [#kdc2554b]
弊社提供の[[GCC Developer Lite]]がインストールされている必要があります。

ソースをダウンロードし適宜解凍し、GCC Developer Liteでソースを開き、コンパイルオプションにて「LPC845 (ROM)」の設定リストを選択し、さらに隣家スクリプトファイルを「lpc845_rom_tiny.x」に変更してコンパイルします。コンパイル後に生成される.binファイルをISPやSWD等を介してフラッシュROMに書き込んだら準備完了です。

***ソース及びコンパイル済みバイナリのダウンロード [#DOWNLOAD]
#ref(LPC84x_BL_1.0.ZIP)
バージョン: 1.0~
公開日: 2021/1/21
更新内容:初期リリース

***メモリマップ [#fd1295e9]
本ブートローダはフラッシュROM上で動作するプログラムであり、一般のプログラムと何ら相違はありません。そのため、ブートローダ自身のサイズが大きいと、ユーザが使用できる領域が圧迫されてしまいます。~
現在リリースしているバージョンでは占有フラッシュROM領域が3kbyte以下である前提とします。
#ref(bl_memmap.png,100%)
ユーザが使用できるフラッシュROMの領域は、ブートローダの後ろ0x00000C00からフラッシュROMの最終アドレスまでとなります。

***ユーザプログラム [#a1597f0a]
ブートローダから実行を遷移させる事ができるユーザプログラムは、以下の条件を満たしていなければなりません。
-先頭アドレスが0x00000C00にオフセットしており、ベクタテーブルがその先頭アドレスより配置されている
-0x00000000~0x00000BFFのフラッシュROM領域に対して書き込み操作を行わない

GCCを使用している場合は、リンカスクリプトファイルにてROMとして予約しているアドレスを修正すれば大抵のプログラムは動作するはずですが、それでも動作しない場合は広範な修正が必要になる場合もあります。

***注意事項 [#c853261b]
-ブートローダ自身は単純なローダに過ぎませんので、GDB等のデバッガとの接続は考慮されていません。

**使用方法 [#d84bf868]

***ブートローダの動作フロー [#BOOTFLOW]
#ref(LPC84xBL_BOOT_FLOW.png,100%)
ユーザプログラムへ実行が遷移するか、ブートローダがコマンドモードになるかの2つの状態に動作が分岐します。~
ユーザプログラムへ実行が遷移する前にユーザ自らの操作でコマンドモードに遷移させる場合は、起動直後の0.15秒以内に「!」を3回連続して受信する必要があります。ユーザプログラムが書き込まれていなければ、常にコマンドモードとなります。~
ユーザプログラムがユーザプログラムに実行が遷移している時のブートローダの条件を以下に示します。
-ソフトリセット~
ブートローダのコマンドモードへ遷移
-ハードリセット~
ユーザプログラムへ遷移
-WDTリセット~
ユーザプログラムへ遷移
-BODリセット~
ユーザプログラムへ遷移
***コマンド [#sb3ccc22]
[[SIMPLE TERM>GDL#STERM]]からのキー入力にて各種機能を実行します。

****ヘルプ '?' [#k1c5df53]
コマンドのリストを表示します。
 >?
 LPC84x BL1.0
 w:write e:erase d:dump g:go
 >

****書き込み 'w' [#ddb17d72]
ホストからフラッシュROMへファイルを転送及び書き込みを行います。また、必要に応じてセクタイレースを行います。
 >w
即時転送を待ち受ける状態となりますので、STERMから任意のファイルを選択しXMODEM-1Kプロトコルで転送を開始させます。~
成功すればOK、失敗するとNGと表示されます。
 >w
 OK
 >
本コマンドはユーザプログラムの実行は行わず、処理が完了するとコマンドモードに戻ります。

****実行 'g' [#u539eceb]
フラッシュROMに書き込まれたユーザプログラムを実行します。
 >g
実行可能なユーザプログラムでないと判断されると、
 >g
 NG
 >
というメッセージを表示してコマンドモードに戻ります。

****メモリダンプ 'd' [#pa71dd4c]
メモリを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のメモリ領域を超えてダンプするとハードフォルトします。

****消去 'e' [#a03e16d8]
フラッシュROMのユーザプログラム領域を完全消去します。
 >e
 OK
 >

« Prev[3]