Arduinoのリセットピンの接続方法が問題で以下のようなエラーが出て、スケッチをアップロードできませんでした。その対処方法をメモしておきます。
avrdude: stk500_getsync(): not in sync: resp=0x00概要
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 : 115200avrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x0aavrdude: stk500_recv(): programmer is not respondingavrdude: 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:0xFFhfuse:0xDAefuse:0xFDlockbit: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:0xFFhfuse:0xDAefuse:0xFDlockbit: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 : 115200avrdude: 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.関連記事
- (Updated )ATmega328Pにoptifixを書き込む方法ブートローダを書き込んでいない、生のATmega328Pに「optifix」と呼ばれるoptibootの改良版のブートローダを書き込む方法をメモしておきます。
- (Updated )秋月の通過型フォトインタラプタ、CNZ1023(ON1023)を使う秋月電子の通過型フォトインタラプタ、CNZ1023。
- (Updated )Arduinoに書き込めない問題を修正する方法[invalid device signature]ArduinoIDEからスケッチをアップロードしようとすると、以下のようなエラーが出てアップロードできませんでした。 boards.txtを修正して対処したのでその方法をメモしておきます。
- 2025年6月以降ROS環境でapt-get updateするときにGPG errorが発生する場合の対処方法2025年5月末にROS/ROS 2の署名鍵が期限切れになったことで発生するGPG errorの原因と、公開鍵を差し替えて解消する手順をまとめたメモ。
- Jetson Orin NanoをUSB接続のSSDから起動するmicroSDカードで動作確認済みのJetson Orin NanoをUSB接続SSDから起動する手順。SDK Managerが不要で、extlinux.confを書き換えるだけで移行できる方法を解説する。