コメントがあればこちらから
sorry. japanese only.
AVR(ATtiny2313とATmega328P)のFuseリセッタ
AVRを使って遊んでいるうちに,Fuse設定を飛ばしたチップが何個か溜まってきた。
ミスで飛ばしたのもあるが,どうもリセット周りをサボる(BODリセット設定をしない
など)とかすると割と簡単に飛んでしまうようだ。そうこうするうちにチップの在庫が
切れてかけて,代わりに数個の飛ばしチップが手元に残る有様となってしまった。
まあ,チップは安いし買い足せばいいかとも思ったが,この寒空の中を秋葉くんだり
まで出かけて,チップだけをわざわざ買うのも嫌なので,Fuseのリセッタを作ること
にした。
作るに当っては,うちではtiny2313とmega328以外は使うつもりがないので,この2種
用に絞って両用/兼用できるモノにしようと考えた。先達はおらんものかと,ちょいと
ググってみたがtinyとmegaの兼用のリセッタが見当たらず残念だ。
別々に作るのも面倒だなと思いながら,仕方なく按配を調べようとビールを呑みながら
ハードウェアマニュアルを見比べているうちに,両用のリセッタができそうだったので
適当にでっち上げてみることにした。
AVRのFuseリセッタ概観(部品面からとハンダ面から)
Fuse書き込みのコマンドを発行する制御用のホストMCUには,安いtiny2313を使って,
他に面倒なプログラミング電圧源などは,PCのFD電源から調達するようにした。
+12Vを使うプログラミング電圧の印加制御は,ボタンとスイッチを使って手動で行う
ようにしたため,ほとんど配線だけのシンプルな回路である。
mega328用にパラレルプログラミング用の信号ラインを確保すると,ホストMCUの
tiny2313には,1本しかI/Oピンが空かなくなる。
そんなこともあって,プロセス開始用SWと状態表示用LEDのI/Oピンが兼用となっている。
機能の概要としては,ISPできないMCUを救済するために,チップ消去とFuseの設定
(EXT,HI,LOの3箇所)のみをパラレルモードでプログラムする。万が一ロックビット
がセットされているとFuseの書き換えもできないので,チップ消去もあわせて行う
ことした(手持ちの飛ばしチップが1個ロックビットセットされていた様なので追加)。
留意事項として,tiny2313のリセットライン(1番ピン)をI/OポートにするFuse設定
になってしまうと,もうどうやっても書けなくなるらしい。
消去は,もちろんFuseのリセットもできなくなる。
だからもし,tiny2313のFuseリセットを2,3度やってもダメな場合には,そういう設
定になってしまった可能性があるので,素直に諦めた方がいいと思う。
実際の処理は,簡単にいうと,ターゲットのリセットピンに+12Vの電圧をかけて,
チップ消去と各Fuseバイトを以下の値にプログラムするコマンドを発行するだけの
単純なものである。
また,ターゲットMCUの種類ごとに変えるような事もせずに以下に示す兼用の値で
書き換えて,内蔵OSCによるISP可能な状態へと救済することのみに機能を絞っている。
FuseLowByte=0x62 (tiny2313では内蔵4MHz 1/8設定 ,Mega328Pのデフォルト値)
FuseHighByte=0xdf (tiny2313のデフォルト値,Mega328Pのブートローダ4ページ設定)
FuseExtByte=0xff (tiny2313, Mega328Pのデフォルト値)
詳細については,ハードウェアマニュアルのMemory Programingの章に全部書いて
あるので,不明点はそちらを参照すること。
Fuseリセッタの操作手順は,以下の通りである。
(1) プログラミング電圧スイッチ(S5)をOffにしておく
(2) ターゲットとなるtiny2313かmega328のいずれか一方のみをソケットにセットする
(3) PCあたりからFD電源で空いてるコネクタを調達して刺して電源を投入する
(4) プログラミング電圧スイッチ(S5)をONにする
(5) プロセス開始スイッチ(S6)を押して(LEDが光る)から1秒ほどで離す
(6) 設定が終わるとLEDが点滅するのでプログラミング電圧スイッチ(S5)をOffにしてから
電源コネクタを外す
プログラミング自体は十数msで終わるので開始スイッチを押して離した時点で終わっているはず。
AVRFuseリセッタの回路図
回路図を見てわかるとおり,tiny2313専用のリセッタにすると割りと単純な配線だけで
済ますことができる。特に必要とする動機がなければ,下手に兼用/両用とか考えない方が
シンプルでいいと思う。
材料費\300ほどで,Fuseの飛んだtiny2313が4個とMega328Pが2個救済できた。
ホストMCUのプログラム(ソースとHexファイル)
・ソースはアセンブり言語で,アセンブルにはWinAVRのGNUアセンブラを使用している。
※ホストMCUのFuse設定は,FL=0x62,FH=0xd9,FX=0xff(内蔵OSCでBOD有効)である。
[ご注意]
・このページの記載事項については,一切無保証です。