楽天市場
[無料でホームページを作成] [通報・削除依頼]

番外 LPC810 タイニーブートローダー

LPC810の内臓ブートローダーを使用してみたのですが、ブートローダーと通信するポートが固定されたり、リセット時に所定のピンを接地しなければならない制約もあり、使いずらいと感じました。
個人的な見解ですがこれはブートローダーというよりはICSPそのものです。

そこで、LPC810にタイニーブートローダーを移植しましたのでご紹介します。


2014.04.01 追記 別館のファイルを更新しました。
○ブートローダーの出口で、スイッチマトリックスの値を元に戻す箇所にバグがあり、修正しました。
○ブートローダーの出口の処理を完全にし、ブートローダーで変更したレジスタの値を、出口でリセット時の値に戻すようにしました。
○コードサイズ短縮

考え方
1.前ページでも述べましたがarmのコードは冗長になり易いのでできるだけコードの短縮をはかる。
個人的な見解ですが、1ワードでロングジャンプ可能なBLX命令と、1ワードでシフト演算とレジスタ間の移動が同時に行えるLSLS(LSRS)命令をうまく使いこなすことが重要と思われます。

2.LPC810内臓のIAP(In-Application Programming)の活用
NXPのAN11388(Using LPC800 In-Application Programming)にアセンブラからIAPを呼び出すための手順が記載されています。今回はフラッシュの消去とフラッシュの書き込みにIAPを使用しました。

3.ソースファイルのパラメータの変更により任意のポートを通信に使用できるようにする。


[テスト回路]
前ページのものと一緒です。シリアル入出力にPIO0_0とPIO0_1を使用、LEDはPIO0_1と接続
img_20140323-144404.jpg


[ホストプログラム]
Tiny Avr/Pic Bootloader+ (v0.8.3.1) を使用します。(N81,ボーレート19200bps)
LPC810で動作するように修正が必要です。修正プログラムは別館にアップロードしました。

img_20140323-145342.jpg


[テスト用サンプルプログラム]
アセンブラで以下のサンプルHEXを作成しました。Cで作成したHEXでもサイズが0x00000EF7以下に収まれば使用可能です。

1.LEDブリンキング (前ページのものをバージョンアップ、コード短縮)
2.シリアルエコー
 (前ページのものをバージョンアップ、コード短縮)
3.フラッシュメモリーダンプ
4.ブートRomダンプ
5.Ramダンプ

ブートローダーで書き込んだフラッシュメモリーダンププログラムを実行(上下)通信は9600bps

img_20140323-150156.jpg
img_20140323-150231.jpg


[LPC810ブートローダーの仕様]

1.ブートローダーのサイズ

256+8 = 264 bytes
(128+4 thumb words)

2.ブートローダーの使用リソース

Flash: 0x00000EF8 ~ 0x00000FFF
Ram  : 0x10000000 ~ 0x1000005F

3.フラッシュメモリーマップ

0000:0003 スタックポインタアドレス
0004:0007 リセットベクター
0008:001B 割り込みベクター領域
001C:001F 0000:001Bのチェックサム
[0000:0003]+[0004:0007]+[0008:000B]+[000C:000F]+[0010:0013]+[0014:0017]+[0018:001B]+[001C:001F]=0となる。
0020:00BF 割り込みベクター領域
00C0:0EF7 ユーザープログラムエリア
0EF8:0EFF ブートローダーの出口、ユーザープログラムの開始ポインタを記述、8バイト
0F00:0FFF ブートローダー本体、256バイト

4.ランダムアクセスメモリーマップ

0000:003F ブートローダーが使用するデータバッファー
0040:005F ブートローダーが使用するIAPコマンド/ステータステーブル
0060:03FF ブートローダー未使用、スタック領域、IAPが使用する一時バッファー


ソース一式のダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/

https://drive.google.com/file/d/1Cw1nMKWCrwQcrK9Qh43Qrt-5WRE-owcy/view?usp=drivesdk

ダウンロードしたZIPファイル中のZIPファイルは圧縮プロジェクトとしてLPCXpressoからインポートすることが可能です。



























































.