chakokuのブログ(rev4)

日々のごった煮ブログです

ATTiny45に書き込む(別ツールでリトライ)


先日、USBasp + avrdudeで ATTINY45に接続エラーになったので別ツールで試してみた。今回使ったのは、V850を使ったAVRライタ+AVR Studioである。この組み合わせでは正常に動作した。
となると、評価ボード上のATINY45は正常であるということで、エラーの原因は、USBasp か、avrdudeということに。

そこで、V850ライタ+avrdudeで試してみた。するとこれも動作した。(書き込みまではやっていないが、接続はOK)以下はその時のコマンド引数と応答


$ /usr/local/bin/avrdude.exe -c avrispv2 -p t45 -P com5

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude.exe: Device signature = 0x1e9206
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.

となると、原因は、USBaspのファームが問題か、あるいは、USBasp と avrdudeの相性問題(特定のバージョンでのみ整合性が取れている!?)

まだハッキリとは分からないが、USBaspのReadme.txtをよく読むと、J3 SCK optionというのがあり、低速デバイスに対応するためのジャンパらしい。at45はデフォルトでは内蔵オッシレータで動作しているので、接続速度があわないのかも。

そこで、開発フローからは逸脱するけど、動作確認できている、AVRライタ+AVR Studioを使って、ATtiny45のクロックソースを外部オッシレータに設定、t45を高速に動かすようにしておいて、avrdude + USBaspで接続してみると、、なんと正しく接続された。


$ /usr/local/bin/avrdude.exe -c usbasp -p t45
found 4 busses

avrdude.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude.exe: Device signature = 0x1e9206
avrdude.exe: safemode: Fuses OK
avrdude.exe done. Thank you.

よって、結論としては、FUSEを変更していないATtiny45を使う場合、内部オッシレータで動作するが、この速度では、USBaspのデフォルト動作では追いつかない(ようだ)。よって、この場合は、USBaspのジャンパJ3 (SCK option)を手動で低速にして、ATtiny45の低速に合わせてやる必要がある。。ようだ(J3を設定したテストはまだやっていないので、本当にこれで解消されるのかどうかは未確認)

やはりきっちりとAVRのチップとツールの仕様書、ソースの付属ドキュメントを一通り読んでから作業にかからないと、いろいろ回り道することになる。。それもまた楽しいのだが*1

*1:趣味だから許される。仕事でこんな状態だったらクビでしょうなぁ。。