Arduinoのリセットピンの接続方法が問題で以下のようなエラーが出て、スケッチをアップロードできませんでした。その対処方法をメモしておきます。
avrdude: stk500_getsync(): not in sync: resp=0x00
—-2017年12月24日追記—-
タイトルを変更しました。
旧タイトル「ArduinoIDEのスケッチがアップロードできないエラー その2」
このエラーは2013年1月に発生したエラーです。
現在も同じようなミスでこのエラーに遭遇するので大幅に加筆修正しました。
—-追記ここまで—-
概要
Arduinoクローンを作成しました。ATmega328Pのマイコン単体にブレッドボード上で部品を接続して使用しました。
その際、リセットピンの接続方法が違っていたため以下のエラーが出て書き込みができなかった問題に対処しました。
このエラーに対する対処方法をメモしておきます。
avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "D:\arduino\arduino-1.8.3\hardware\tools\avr/etc/avrdude.conf" Using Port : COM5 Using Programmer : arduino Overriding Baud Rate : 115200 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x0a avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x0a avrdude done. Thank you. マイコンボードに書き込もうとしましたが、エラーが発生しました。 このページを参考にしてください。 http://www.arduino.cc/en/Guide/Troubleshooting#upload
「not in sync」の原因
このエラーが発生するのには複数の理由があります。簡単なものからいくつかあげていきます。
- 指定するシリアルポートが間違っている
- Arduinoを外すとそのシリアルポートが認識されなくなるか再度確認してみてください
- 指定するボードが間違っている
- Arduinoクローン(Arduino Diecimila)なのにArduino UNOを指定していませんか?
- 配線が抜けている/基板のパターンが途切れている/半田付けした配線がつながっていない
- テスタで導通確認をしてみてください
- 配線ミス
- 電源はマイコンにつながっていますか?
- MISO/MOSIを逆につないだりしていませんか?
- 外部クロックを使用するようにしている場合、水晶発振子は正しくついていますか?
- マイコンのRESETピンにはリセット信号が届くようになっていますか?
あくまで筆者の経験談ですが、多くの場合はここまで確認するとほとんどの場合「not in sync」のエラーを解消できました。
ここまで来ても解決できていない場合、考えられるのは
- マイコンのリセットがうまくできていない
- マイコンのフューズビットの設定が間違っている
の2点です。
ネット上には旧来のArduinoのリセット信号(RTS信号)と現在のArduinoのリセット信号(DTR信号)の情報が混在しているので注意してください。
DTR信号をダイレクトにAVRマイコンに接続していると信号がGNDレベルになっている時間が長すぎて書き込みができません。
そこで、以下のようにFT232シリーズICのDTRピンとマイコンのRESETピンの間に0.1uFのコンデンサを挟みます。
FT232シリーズICのDTRピン <---> 0.1uFコンデンサ <---> マイコンのRESETピン
これで無事にリセットできるようになったと思います。
ここまでたどり着く際に参考にしたサイトをいくつか紹介しておきます。
USB<->シリアル (USB to TTL)
https://ht-deko.com/arduino/usb2serial.html
さらに、これでもだめな場合、ブートローダを書き直してみます。
書き込み環境の設定は次のサイトを見ながら行いました。Kosakaさん、ありがとうございます。
外付けAVRライタ無しでBootloaderを書き込む
http://make.kosakalab.com/arduino/bootloader/
ATmega328Pで設定したフューズビットは以下の通りです。
ATmega328P + ATmegaBOOT_168_atmega328.hex lfuse:0xFF hfuse:0xDA efuse:0xFD lockbit:0xCF
ここまでたどり着く際に参考にしたサイトを紹介しておきます。
外付けAVRライタ無しでBootloaderを書き込む
http://make.kosakalab.com/arduino/bootloader/
1チップマイコン AVR で、遊んでみる | 情報通信技術コンサルタント くわ ICT-Kuwa
http://ict-kuwa.net/tech/avr1/
まとめ
「not in sync」のエラーが出た場合、まず、ここを見て落ち着いて順番に1つずつ確認してみてください。
ほとんどの場合、ここでエラーが解決すると思います。
それでもだめな場合、リセット信号を疑ってみてください。
FT232のDTRピンとマイコンのRESETピンの間には0.1uF程度のコンデンサを挟まないとリセットできない場合があります。
それでもだめな場合、おそらくマイコンのフューズビットが違うと思いますので、確認してみてください。
参考までにATmega328Pのフューズビットの設定をここに記載しておきます。
ATmega328P + ATmegaBOOT_168_atmega328.hex lfuse:0xFF hfuse:0xDA efuse:0xFD lockbit:0xCF
おまけ
エラー解決方法
たまに「どうやってこのようなエラーを解消しているのか」を聞かれるので、聞かれる前に書いておきます。
まず、自分の書いた回路図と実物を見比べます。
今回は秋月電子通商のArduino Pro Mini互換機とほとんど同じでした。Arduino Pro Mini互換機の回路図
ですが、設計する際はArduino Diecimilaの回路図(http://www.arduino.cc/en/uploads/Main/Arduino-Diecimila-schematic.pdf)を見ながら回路図を書いていたので一部異なりました。具体的には秋月電子通商のArduino Pro Mini互換機の回路図のC2に該当するコンデンサがありませんでした。
Arduino.ccにあるArduino UNOの回路図(http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf)を見てみると、ATmega328PのRESETにC6としてコンデンサが挟まれています。
また、Arduino Duemilanoveの回路図(https://www.arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf)にもC13としてコンデンサが挟まれています。
どうやらこのコンデンサがなくてはリセットがうまくできない場合があるのでは……???と推測してコンデンサを入れてみたところ、無事に動いたという具合です。
昔の話
昔はエラーメッセージも簡素だったようです。
Using Port : \\.\COM13 Using Programmer : arduino Overriding Baud Rate : 115200 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.
コメント
コメント一覧 (1件)
解決しました!