壊れたArduinoを中途半端に直す

前にここ一ヶ月のあらすじでさらっと触れたArduino UNOが壊れた話ですが、微妙に直ったので、壊れた過程と直した過程について詳しく。

まず、壊れた時の話。

avrdude: stk500_getsync(): not in sync: resp=0x00

というエラーメッセージが出て、マイコンへの書き込みができなくなりました。
最後に書き込んだスケッチに関しては、Arduinoに挿しても動作するし、マイコンチップを取り外してブレッドボードに挿しても動作する。書き込みのみが出来ないという状態。

Arduino IDEの[ファイル]→[環境設定]から「より詳細な情報を表示する」の「書き込み」をONにして再度書き込み。

avrdude: Send: 0 [30] [20] avrdude: Send: 0 [30] [20] avrdude: Send: 0 [30] [20] avrdude: Recv:
avrdude: stk500_getsync(): not in sync: resp=0x00

avrdude done. Thank you.

「PCからArduino UNOを認識はしているが、書き込みに行くと返答が返ってこない」という状態です。
このエラーメッセージ自体はものすごくよく発生することで、例えばD0(RX)やD1(TX)に頻繁にアクセスするスケッチを実行していたり、D0,D1に何かしら接続している最中に書き込みしようとするとこのエラーを目にすることになります。
rxtxこれね。
その場合はD0,D1に接続してる何かを外して書き込みをするだとか、リセットボタンを押してD0,D1にアクセスが始まる前に急いで書き込みをするとかいう手段で直る場合があります(後者はちと強引ですが……)。

ウチの場合はD0,D1を使うタイプのスケッチではなかったので、別の原因です。
Arduino IDEの[ツール]→[マイコンボード]がArduino UNO以外になっているとか、[ツール]→[シリアルポート]がArduino UNOが刺さっているのと別のポートになっている、ということもありません。

結論から言うと、USBシリアル変換用のチップであるATmega16u2のファームウェアが壊れたのでしょう。
16u2ATmega16u2
なぜ分かったかというと、USBを使わずにICSP(ISP)ピン経由で書き込みに行ったら正常に書き込めたから。

ISPで書き込むには、書き込み用のライタが必要になります。
最初はAVRライタの製作 (4種)を見ながら自作したり格安の書き込み器でどうにかしようと思いましたが、不器用な私にはうまくいかなかったので、結局Atmel本家の書き込み器を買いました。

秋月で3,200円

PC→AVRISPをUSBでつなぎ、AVRISPから生えている6ピンをArduino UNOの6ピンにつなぎます。
UNO+AVRISP1
AVRISP自体は電源を供給してくれないので、Arduinoに別個でUSB経由かACアダプタ経由で電源を供給してやらないといけません。電源をくれてやらないとAVRISPの赤LEDが点灯して、書き込みができません。
UNO+AVRISP2 後ろから前から
赤が消えて緑色になったら書き込みOK。
Arduino IDEの[ツール]→[書込装置]で「AVRISP mkII」を選択。
[ファイル]→[書込装置を使って書き込む]を選択。
……普通に書き込みが成功しました。

ということで、中途半端ながらも壊れたArduino UNOが復活したわけですが、壊れた原因は何だったのか。
何しろ半年近く前の話なのであいまいな記憶しかないんですが、恐らくACアダプタでArduinoを動かしてた時に、電源を逆刺ししてしまったんでしょうね。
Arduinoは6V~20V(推奨は7V~12V)のACアダプタで動作が可能ですが、センタープラスのACアダプタじゃないといけません。
多くのギター・ベースのエフェクターで使われているのは9VのセンターマイナスのACアダプタです。Arduinoに使うとこのようにぶっ壊れる可能性があります。アダプタの使い回しには注意しましょう。
AC
これはファミコン互換機のACアダプタ。センターマイナス(赤い四角で囲ったところ)なのでArduinoに使っちゃダメです。

ちなみに、Atmel FLIPというソフトでATmega16u2のファームウェアを書き込むことができるようなのですが、やはり私には敷居が高くて無理でした。無念。

※追記
AVRISP mkIIで経由でArduinoに書き込むための工程が抜けてました。

  • AtmelのサイトからAtmel Studioか、AVR Studioをダウンロードしてインストール→これでAVRISP mkIIのドライバがインストールされる
  • SourceForge.JPからlibusb-win32-devel-filterをダウンロードしてインストール→これで、Arduino IDEからAVRISP mkIIが使用可能になる

以下のサイトを参考にさせて頂きました。
AVRISP mkIIでArduinoのスケッチを書き込む | なんでも独り言
Arduino IDEでATtiny他の開発(AVRISP編) | Make | kosakalab

3 thoughts on “壊れたArduinoを中途半端に直す”

  1. メガドラのアダプターがセンタープラスなんじゃなかったっけ

  2. 手元にメガドラがないので分からないんですが、ファミコン/スーパーファミコンのアダプタはセンタープラスでした、確か。
    んで、メガドラのアダプタはファミコンでも使えたので、多分そうですね。

ImpactDrill へ返信するコメントをキャンセル