極小ブートローダー ATTiny13A
前回、前々回とPIC10F322用の68ワードのブートローダーを紹介しました。
今回は同じことをATTiny13Aで試してみます。
2015.02.22 追記
別館にアップしていたファームウエアにバグがありましたので修正して更新しました。
<考えかた>
1.ATTiny13Aのファームウエア
Tiny Avr/Pic Bootloader+ において、PIC10F322とATTiny13Aのファームウエアの処理の流れはほぼ同じなので
PIC10F322同様、送信部分の簡略化により68ワードのファームウエアが容易に実現できました。
PIC10F322のファームウエアとの相違はATTiny13AではEEPROMの書き込みもサポートしている点です。
2.68ワードのファームウエアに関して
100ワードでなく68ワードのファームウエアにこだわっているのには訳があります。
68ワードのファームウエアは書き込み/消去ページの境界をまたいで4/64と配置しますが、この64に意味があります。
ATTinyの書き込み/消去ページは16の倍数(16ワード,32ワード,64ワード)のいずれかです。(デバイスにより異なる)
ATTinyはPICと異なり初期のデバイスからの設計思想が最近のデバイスまで受け継がれていますので、
デバイスによらず、ほぼ同じサイズのファームウエアが作成できます。
すなわち、最近の32ワードや64ワードの書き込み/消去ページを所有するデバイスに関しても、ファームウエアのサイズが
68ワードであれば、無駄なくフラッシュを使用することが可能となります。 そして、ATTiny13Aのファームウエアとマクロはこれらのテンプレートとなり得ます。

3.通信タイミングの見直し
はじめにPIC10F322用のマクロをATTiny13A用に手直しして書き込みを試みたのですが、書き込みに失敗しました。
どうやらATTiny13Aではフラッシュ/EEPROMの書き込みに時間を要するようです。
書き込みを行う為、ホストから一文字転送毎に2msのディレイを入れたところうまく書き込めました。
マクロ上から一文字転送毎のディレイを変更することができませんので、ATTiny13A用のマクロではTeraTermの初期化ファイル
(INIファイル)を個別に読み出す方式に変更しました。 シリアルポートのCOM番号もINIファイル上で変更します。
スナップショットのオリジナルのINIファイルからの変更箇所
?使用言語
; Language (English/Japanese/Russian/Korean/UTF-8)
Language=English
?COMポート番号
; Serial port parameters
; Port number
ComPort=14
?一文字転送毎のディレイ
DelayPerChar=2
; Transmit delay per line (in msec)
4.データフォーマット
ホストから転送するデータのフォーマットはTiny AVR/PIC Bootloader+と同一
Flash:[AddressH][AddressL][2*N][DataL(1)][DataH(1)]....[DataL(N)][DataH(N)][SUM]
EEPROM:[EEAddressH][EEAddressL][2][EEDataL][EEDataH][SUM]
※ATTiny13Aの場合EEAddressH=0x40,EEDataH=0x00
5.PIC10F322用マクロとの相違
?一文字転送毎のディレイ(前述)
?TeraTermターミナルの起動をコマンドライン記述からINIファイル呼び出しに変更(前述)
?EEPROM書き込みの処理を追加
?ページ転送毎のディレイ(1ms)を廃止
?ブートローダー出口の処理
HEXファイルのリセットベクタのコードを解析して出口のコードを変更
RJMP命令の場合、RCALL命令の場合、その他の命令
(Tiny AVR/PIC Bootloader+のページ内 2.メモリーマップと命令の置換(AVRの場合)を参照)
<まとめ>
68ワードのブートローダーは、ATTiny2313A/4313用に関しては既にTiny AVR/PIC Bootloader+で実現していますが、
今回の検討にてほぼ全てのATTinyに実装する目処が立ちました。(信頼性の問題は残りますが...)
<ターゲット回路図>
[シリアルポート直結方式]

[USBシリアルアダプタ方式]

上記ソフト一式は以下からダウンロードできます。
ダウンロード先
http://hp.vector.co.jp/authors/VA058115/
https://drive.google.com/file/d/1ECPqqD49e81TTsNC-4JzUx1YTTgks1Sw/view?usp=drivesdk
今回は同じことをATTiny13Aで試してみます。
2015.02.22 追記
別館にアップしていたファームウエアにバグがありましたので修正して更新しました。
<考えかた>
1.ATTiny13Aのファームウエア
Tiny Avr/Pic Bootloader+ において、PIC10F322とATTiny13Aのファームウエアの処理の流れはほぼ同じなので
PIC10F322同様、送信部分の簡略化により68ワードのファームウエアが容易に実現できました。
PIC10F322のファームウエアとの相違はATTiny13AではEEPROMの書き込みもサポートしている点です。
2.68ワードのファームウエアに関して
100ワードでなく68ワードのファームウエアにこだわっているのには訳があります。
68ワードのファームウエアは書き込み/消去ページの境界をまたいで4/64と配置しますが、この64に意味があります。
ATTinyの書き込み/消去ページは16の倍数(16ワード,32ワード,64ワード)のいずれかです。(デバイスにより異なる)
ATTinyはPICと異なり初期のデバイスからの設計思想が最近のデバイスまで受け継がれていますので、
デバイスによらず、ほぼ同じサイズのファームウエアが作成できます。
すなわち、最近の32ワードや64ワードの書き込み/消去ページを所有するデバイスに関しても、ファームウエアのサイズが
68ワードであれば、無駄なくフラッシュを使用することが可能となります。 そして、ATTiny13Aのファームウエアとマクロはこれらのテンプレートとなり得ます。

3.通信タイミングの見直し
はじめにPIC10F322用のマクロをATTiny13A用に手直しして書き込みを試みたのですが、書き込みに失敗しました。
どうやらATTiny13Aではフラッシュ/EEPROMの書き込みに時間を要するようです。
書き込みを行う為、ホストから一文字転送毎に2msのディレイを入れたところうまく書き込めました。
マクロ上から一文字転送毎のディレイを変更することができませんので、ATTiny13A用のマクロではTeraTermの初期化ファイル
(INIファイル)を個別に読み出す方式に変更しました。 シリアルポートのCOM番号もINIファイル上で変更します。
スナップショットのオリジナルのINIファイルからの変更箇所
?使用言語
; Language (English/Japanese/Russian/Korean/UTF-8)
Language=English
?COMポート番号
; Serial port parameters
; Port number
ComPort=14
?一文字転送毎のディレイ
DelayPerChar=2
; Transmit delay per line (in msec)
4.データフォーマット
ホストから転送するデータのフォーマットはTiny AVR/PIC Bootloader+と同一
Flash:[AddressH][AddressL][2*N][DataL(1)][DataH(1)]....[DataL(N)][DataH(N)][SUM]
EEPROM:[EEAddressH][EEAddressL][2][EEDataL][EEDataH][SUM]
※ATTiny13Aの場合EEAddressH=0x40,EEDataH=0x00
5.PIC10F322用マクロとの相違
?一文字転送毎のディレイ(前述)
?TeraTermターミナルの起動をコマンドライン記述からINIファイル呼び出しに変更(前述)
?EEPROM書き込みの処理を追加
?ページ転送毎のディレイ(1ms)を廃止
?ブートローダー出口の処理
HEXファイルのリセットベクタのコードを解析して出口のコードを変更
RJMP命令の場合、RCALL命令の場合、その他の命令
(Tiny AVR/PIC Bootloader+のページ内 2.メモリーマップと命令の置換(AVRの場合)を参照)
<まとめ>
68ワードのブートローダーは、ATTiny2313A/4313用に関しては既にTiny AVR/PIC Bootloader+で実現していますが、
今回の検討にてほぼ全てのATTinyに実装する目処が立ちました。(信頼性の問題は残りますが...)
<ターゲット回路図>
[シリアルポート直結方式]

[USBシリアルアダプタ方式]

上記ソフト一式は以下からダウンロードできます。
ダウンロード先
Bequest333のページ(別館)
https://drive.google.com/file/d/1ECPqqD49e81TTsNC-4JzUx1YTTgks1Sw/view?usp=drivesdk
- ご質問などはこちらからどうぞ
- ページ更新情報
- 最近嬉しかったこと
- 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