番外 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と接続

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

[テスト用サンプルプログラム]
アセンブラで以下のサンプルHEXを作成しました。Cで作成したHEXでもサイズが0x00000EF7以下に収まれば使用可能です。
1.LEDブリンキング (前ページのものをバージョンアップ、コード短縮)
2.シリアルエコー (前ページのものをバージョンアップ、コード短縮)
3.フラッシュメモリーダンプ
4.ブートRomダンプ
5.Ramダンプ
ブートローダーで書き込んだフラッシュメモリーダンププログラムを実行(上下)通信は9600bps


[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が使用する一時バッファー
ソース一式のダウンロード先
http://hp.vector.co.jp/authors/VA058115/
https://drive.google.com/file/d/1Cw1nMKWCrwQcrK9Qh43Qrt-5WRE-owcy/view?usp=drivesdk
ダウンロードしたZIPファイル中のZIPファイルは圧縮プロジェクトとしてLPCXpressoからインポートすることが可能です。
.
個人的な見解ですがこれはブートローダーというよりは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と接続

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

[テスト用サンプルプログラム]
アセンブラで以下のサンプルHEXを作成しました。Cで作成したHEXでもサイズが0x00000EF7以下に収まれば使用可能です。
1.LEDブリンキング (前ページのものをバージョンアップ、コード短縮)
2.シリアルエコー (前ページのものをバージョンアップ、コード短縮)
3.フラッシュメモリーダンプ
4.ブートRomダンプ
5.Ramダンプ
ブートローダーで書き込んだフラッシュメモリーダンププログラムを実行(上下)通信は9600bps


[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のページ(別館)
https://drive.google.com/file/d/1Cw1nMKWCrwQcrK9Qh43Qrt-5WRE-owcy/view?usp=drivesdk
ダウンロードしたZIPファイル中のZIPファイルは圧縮プロジェクトとしてLPCXpressoからインポートすることが可能です。
.
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 1kワードのTINYBASIC STM32L010F4
- やってくれたな!!店長よ
- 東大版TINYBASIC (STM32)
- 1kワードのTINYBASIC STM32版 その2
- 1kワードのTINYBASIC STM32版 その1
- 1kワードのTINYBASIC その8
- 1kワードのTINYBASIC その7
- 1kワードのTINYBASIC その6
- 1kワードのTINYBASIC その5
- 1kワードのTINYBASIC その4
- 1kワードのTINYBASIC その3
- 1kワードのTINYBASIC その2
- 1kワードのTINYBASIC その1
- 電大版TINYBASIC for PIC ミニマムお試し版5
- 電大版TINYBASIC for PIC ミニマムお試し版4
- 電大版TINYBASIC for PIC ミニマムお試し版3
- 電大版TINYBASIC for PIC ミニマムお試し版2
- 電大版TINYBASIC for PIC ミニマムお試し版
- PICで電大版TINYBASIC 実装編その5
- PICで電大版TINYBASIC 実装編その4
- PICで電大版TINYBASIC 実装編その3
- PICで電大版TINYBASIC 実装編その2
- PICで電大版TINYBASIC 実装編その1
- PICで電大版TINYBASIC 準備編その2
- PICで電大版TINYBASIC 準備編その1
- PIC18F24K42をPICKIT2で焼くTIPS その2
- PIC18F24K42をPICKIT2で焼くTIPS
- PIC16F18313ブートローダー書き込み器の製作
- PIC16F18857をPICKIT2で焼くその2
- PIC16F18857をPICKIT2で焼く
- PIC16F18313をPICKIT2で焼くその2
- PIC16F18313をPICKIT2で焼く
- PIC16F5XX USBIO
- HVT-BT200の予約制御
- 再考 PIC16F57 USBIO
- PIC16F5X USBIO
- 続12 8ピンPICでUSB PIC16F18313 HID-シリアルアダプター
- ucontrol.com.arに接続できない
- 続続 LPC1114 USBブートローダー
- 続PIC10F200 電子サイコロ
- PIC10F200 電子サイコロ
- LPC1114 8ch簡易ロジックアナライザー USB版
- 続 LPC1114 USBブートローダー
- LPC1114 8ch簡易ロジックアナライザー
- LPC1114 USBブートローダー
- LPC1114でUSB
- 続LPC810でUSB
- LPC810でUSB
- USB_NCO
- USB出力の周波数カウンター
- HIDアダプターについてのまとめ その2
- HIDアダプターについてのまとめ
- 極小ブートローダー まとめ
- 極小ブートローダー ATTiny 其の2
- 極小ブートローダー PIC10F322 其の6
- 極小ブートローダー PIC10F322 其の5
- 極小ブートローダー PIC10F322 其の4
- 極小ブートローダー PIC10F322 其の3
- 極小ブートローダー ATTiny13A
- 極小ブートローダー PIC10F322 其の2
- 極小ブートローダー PIC10F322
- 続11 8ピンPICでUSB PIC16F57_USBIO (その3)
- 続10 8ピンPICでUSB PIC16F505_USBIO (その2)
- 続9 8ピンPICでUSB PIC16F57_USBIO (その2)
- 続8 8ピンPICでUSB PIC16F505_USBIO
- 続7 8ピンPICでUSB PIC16F57_USBIO
- 続6 8ピンPICでUSB PIC16F570_USBIO
- 続5 8ピンPICでUSB PIC12F615_USBIO
- 続4 8ピンPICでUSB 16FUSBの改良版
- 続続続8ピンPICでUSB -30MHz+ソフトシリアル-
- 続続8ピンPICでUSB -16FUSBを30MHzで動かす-
- 続8ピンPICでUSB -ターミナルソフトからの操作-
- 8ピンPICでUSB -16FUSBの移植-
- 番外 MSP430 タイニーブートローダー
- 番外 C8051 タイニーブートローダー
- 続続続 Tiny AVR/PIC Bootloader+
- 続続 Tiny AVR/PIC Bootloader+
- 続 Tiny AVR/PIC Bootloader+
- Tiny AVR/PIC Bootloader+
- 番外 続ATTINY13A OSCCAL の簡易校正
- 番外 ATTINY13A OSCCAL の簡易校正
- 番外 続ATTINY13A ソフトシリアル
- 番外 ATTINY13A ソフトシリアル
- 番外 続Arduinoからタイニーブートローダーを使用する
- 番外 Arduinoからタイニーブートローダーを使用する
- 番外 LPC1114FN28/102 アセンブラサンプル
- 番外 LPC810 タイニーブートローダーの自己書き換え
- 番外 LPC810 EEPROM エミュレーション
- 番外 LPC810 タイニーブートローダー
- 番外 LPC810でアセンブラ
- 続続続PIC10F322 ソフトシリアル一考察
- 続続PIC10F322 ソフトシリアル一考察
- 続PIC10F322 ソフトシリアル一考察
- PIC10F322 ソフトシリアル一考察
- 84ワードのPICブートローダー
- 続PIC10F322 Ring-DDS
- Tinybldの自己更新プログラム
- プログラム領域をROMのように使う
- PIC10F322 256ビットプログラム発振器
- PIC18F EEPROM エミュレーション Jタイプ
- PIC18F EEPROM エミュレーション
- PIC16F EEPROM エミュレーション
- PIC10F322専用 周波数カウンター
- PIC18F Jタイプ ブートローダー
- PICの制約を取り除く
- 番外 ATTINY2313A用ブートローダー
- 続番外 ATTINY13A用ブートローダー
- 番外 ATTINY13A用ブートローダー
- 続PIC10F322 フラッシュメモリの操作
- PIC10F322 フラッシュメモリの操作
- PIC10F322 PIC_WAIT
- ビット列の並び替え その2
- ビット列の並び替え その1
- 故障した温水便座を使えるようにする
- PIC10F322 RA3を出力ポートとして使用
- PIC10F322 周波数カウンタ Part2
- PIC10F322 AN592準拠 周波数カウンタ
- PIC10F322 Ring-DDS
- microchipのAN592に関する一考察
- PIC10F322 3-ch リモコンライン切り替え器
- PIC10F322 4-SW リモコン送信器
- PIC10F322 二相発振器
- PIC_DELAY
- 続PIC_WAIT
- PIC_WAIT