2010年12月14日火曜日

Fastbootのネタ配布

ソースコードと私がコンパイルしたHEXファイルです。
ここ

中身はこんな感じ

Fastboot_tiny13_9MhzR1T0.hex Fastboot_tiny45_8MhzR1T0.hex
Fastboot_tiny2313_10MhzRxD0TxD1.hex Fastboot_tiny84_1MhzR1T0.hex
Fastboot_tiny2313_12MhzRxD0TxD1.hex Fastboot_tiny84_8MhzR1T0.hex
Fastboot_tiny2313_16MhzRxD0TxD1.hex Fastboot_tiny85_1MhzR1T0.hex
Fastboot_tiny2313_1MhzRxD0TxD1.hex Fastboot_tiny85_8MhzR1T0.hex
Fastboot_tiny2313_20MhzRxD0TxD1.hex Fastboot_tiny861_1MhzRxB0TxB1.hex
Fastboot_tiny2313_8MhzRxD0TxD1.hex Fastboot_tiny861_8MhzRxB0TxB1.hex
Fastboot_tiny45_1MhzR1T0.hex

ややこしいファイル名なのは、8ピン系は、Bポートしか無いので、R1T0は、RxPort RB1 TxPort PB0 の意味です。tiny84 tiny861とかもPortBです、Tiny2313だけ本来のRxTxに当ててます。(でもソフトシリアルです・・起動後、普通にUARTでコード書いて平気です)
2313だけは周波数バリエーションを増やしました。他は、内蔵クロック用です。(あんまり意味無いとおもってるから)

コンパイルは、ここを参照


UNIX MAC のローダーソフトはここのリンクに有ります。個々のMakeしなきゃいかんので、添付してません。
Windows版は、上のソースと一緒に入ってます。(元々入ってたから)

私が適当に作った時の、AVRStudioのプロジェクトファイルも入ってますから、それ開いて、Fboot21_a.asmの使いたいMCUを書き換えて、使いたいポートを決め、(別のファイルのFASTLOAD.Hの)周波数書き込めば、コンパイル出来ます。

Fboot21_a.asm内の、xxxxxx.incは、AVRStudioが持ってるファイルなので、Fboot21_a.asm内に記載の内、m328p,incとか書いてもビルド出来ます。

このまんま処理出来るのは、tiny13からmega2561までですが、フォーラムに、ATxmegaの説明も有りました。

一線式にするには、もう二カ所書き換えが必要だとフォーラムに有りました。

でんし研氏のとこに有る、Tiny45のISPの半二重に回路の方が簡単なので、私はそれを採用する気です。
Stk500自体が元々、半二重通信だそうで、これもFastbootも同じ論理で出来てるらしいです。

フォーラムに、AVRDUDEのパッチが有るのですが・・「すいません、私この分野は専門じゃ無いので解りません。」・・・差分バイナリーをパッチするとか、ネット検索したら出てきました。

ここの置いた、Fastboot ブートローダーは、試しに作って見た物で・・ピンアサインとか最終的に変えると思います。
(別な物で試した時に、Tiny45は、Rx=PB1でしか動かなかったので、それを継承してしまってます)
本国のフォーラムだと、Rx=PB5も有りって言う感じなので・・ポート番号を分断されるよりは、末番あたりの置いた方が楽だろうと感じてます。

tiny45/85のArduino コアはここに有ります。

Fastbootに書き込む場合、Boads.txtを
Tiny45
arduino_attiny45s.upload.maximum_size=3327
Tiny85
arduino_attiny85_8m.upload.maximum_size=7424
に書き直しておけば、これより大きなHEXが出来そうなら警告が出ます。

現在そのまんま書き込みは出来ないので、コンパイルして、FBOOTで、書き込む感じになります。

ダウンロード出来るようにした、HEXでもPB5を止められるのは確認済みですが、止めると、ISP出来なくなりますので、お試しは、RESETをI/Oにしない事をお勧めします。(高電圧書き込み出来るライターやら、リセッターをお持ちで意味が解る方なら、試してみて下さい。・・そこまで持ってれば、AVRstudioで自前でコンパイル出来る人だと思いますし・・)


Optibootより、圧倒的に守備範囲が広く、BPS指定が必要無い自動認識なので・・こっちの方が便利だけど・・Arduinoや、Avrdudeが対応してないから、直接書き込めない事はご理解下さい。

tiny13に書いて、何かに使えないか考えるのも、一興だと思います。



コードで私がいじった処は、待ち時間を、1秒に延ばした処だけです。
(私はそんなに急いで無いので・・原型は0.3秒でした)


書き込みタイミングは
Reset端子が生きてれば、Arduino互換のDTRリセット機構で、大丈夫です。
Optibootと違って、電源投入時にも、Bootloaderが、1秒(ここは私の改造)起動しますから電源のあたりにスイッチ付けてリセット代わりにも出来ます。
(このDTRの件と、電源断リセットで意味が解る方なら、回路は簡単ですね、トランジスタで、電源切っちゃえばいいだけです)
これに半二重通信モードを使えば、全部で3本しか電線は必要有りません。
(これやる場合は、再コンパイルしないとダメです)


0 件のコメント:

コメントを投稿