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

番外 続Arduinoからタイニーブートローダーを使用する

前ページ「番外 Arduinoからタイニーブートローダーを使用する」では利便性を追求したため、
ブートロ−ダー領域として168バイト(ATtiny13A flash領域の16%)を使用する結果となりました。

Arduinoを使用する上で、フラッシュメモリーの少ないATtiny13Aでは、この数値は致命的かも知れません。
(まぁ、ブートローダーを使わなければいいだけの話かも知れませんが...)

2014.05.30 追記 -----------------------------------------------------------------

ブートローダーのファームウエアを更新しました。
新しいファームウエアではEEPROMの書き込みも行えます。


ファームウエアの使用にあたってソフトシリアルインターフェースのディレイ定数を求める必要があります。
「番外 続ATTINY13A OSCCAL の 簡易校正」のページをご参照ください。


シリアルIAPの概要は以下のとうりです。1文字入出力はr25=0で戻りますのでデータをint型でもやりとりできます。
新しいファームウエアではr23もワークとして使用します。
img_20140530-193540.jpg
スケッチのサイズが大きくブートローダーを使用できない場合でもシリアルIAP(25ワード/50バイト)のみをデータとして
書き込んで使用することができます。

img_20140530-193717.jpg

2014.04.27 追記 -------- (2014.05.30) 以下の追記の内容は変更されました。

本ページで使用したブートローダーファームウエアを別館にアップロードしました。

注意.このファームウエアではEEPROMの書き込みが出来ません。

シリアルIAPの概要は以下のとうりです。1文字入出力はr25=0で戻りますのでデータをint型でもやりとりできます。
img_20140427-122243.jpg

スケッチのサイズが大きくブートローダーを使用できない場合でもシリアルIAP(29ワード/58バイト)のみをデータとして
書き込んで使用することができます。
img_20140427-122404.jpg
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------

そこで、以下の観点からブートローダーの利便性を生かせる開発環境を検討しました。


?ATtiny13Aの動作をマイクロコアに委ねる

ネットで検索するとATTINY用のマイクロコアの開発はいろいろな方により行われているようです。
例えば、

ATTinyCore-master.zip
https://github.com/TCWORLD/ATTinyCore/tree/master/PCREL%20Patch%20for%20GCC

core13_18_5.zip
http://sourceforge.jp/projects/sfnet_ard-core13/releases/

attiny13.zip
http://www.instructables.com/id/Installing-Attiny13-core-files/?lang=ja
http://dl.dropbox.com/u/52513692/attiny13.zip

arduino-tiny-0150-0020.zip
http://code.google.com/p/arduino-tiny/

hardware.zip
http://make.kosakalab.com/make/electronic-work/arduino-ide-arduinoisp/

bitDuino.zip
http://100year.cocolog-nifty.com/blog/


これらの出力するコードを比較したところbitDuinoの出力するコードが最小でしたのでこれを使用しました。


?ブートローダーのシリアル送受信をIAP化する。

bitDuinoの作者であるまりす様は上記ページでbitDuino専用のソフトウェアシリアルライブラリも公開されています。
今回はこのシリアルライブラリをIAPが使用できるように勝手に改造して、使用させていただきました。
※ソフトシリアルに使用するピン、ボーレートはブートローダーファームウエアの設定のまま変更できません。

まりす様、非常にすばらしいものをどうもありがとうございました。

ブートローダーは前ページのものに比べて、送信、受信機能をIAP化するため、EEPROM書き込みの機能を削って
サイズを84ワードに合わせています。

[IAP使用例]  SAH:SALは1バイト送信IAPのアドレス、IAP内でr24(送受信バッファー),r25(ワーク変数)を使用。
(2014.05.30 ファームウエア更新に伴い以下の赤文字部を追加)

void bitSerial::print(uint8_t b)
{
asm volatile ( 
    "push    r30        \n\t"
    "push    r31        \n\t"
    "push    r23        \n\t"
    "push    r24        \n\t"
    "push    r25        \n\t"
    "mov     r24,%0   \n\t"
    "ldi        r31,%1  \n\t"
    "ldi        r30,%2  \n\t"
    "ICALL                \n\t"
    "pop      r25        \n\t"
    "pop      r24        \n\t"
    "pop      r23        \n\t"
    "pop      r31        \n\t"
    "pop      r30        \n\t"
         :: "r"(b),"M"(SAH),"M"(SAL));
}



以下はコンパイル結果です。
◎LEDブリンク (前ページと同じスケッチ)
img_20140427-093851.jpg

◎LEDブリンク2 (pinMode,digitalWriteを使用しない記述)
img_20140426-124857.jpg

◎シリアルエコー
以降bitSerial は bSerial として内部で定義されています。(HardwareSerial と Serial の関係)
begin()関数は使用しません。
img_20140427-171411.jpg

◎"test"+改行を連続表示
img_20140427-171450.jpg
img_20140426-125020.jpg

◎ASCII テーブル表示
img_20140429-113524.jpg
img_20140429-113559.jpg



ブートローダーファームウエアソース一式のダウンロード先

Bequest333のページ(別館)

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

https://drive.google.com/file/d/1DJ237aoN9vGjPLd_gKPD5n0Ql89jt7kR/view?usp=drivesdk




















.