5年振りにArduino Nano(互換機)を触ったら書き込みできなーい!
あら、壊れたのかしら?
「マイコンボードに書き込もうとしましたが、エラーが発生しました。」と出るのよ
アリエクでまた買えば
200円くらいでしょ?
いやはや、5年も触っていないといろいろ完璧に忘れています。ArduinoNanoという小さなArduino があるんですが、それにLチカでも書き込んで動作確認しようとしたら、書き込めずエラーが出てしまいました。持っているNano互換機はこれです。
JunkHack : arduino hello world! 投稿日: 2015年3月15日
https://hack.gpl.jp/2015/03/15/arduino-hello-world/
6年くらい前の記事で、$3でアリエクでポチったもの
今回のエラーログは以下のようになります。
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
User configuration file is "/Users/junkhack/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/cu.wchusbserial14120
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=0x00
::(省略)
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
avrdude done. Thank you.
マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。
http://www.arduino.cc/en/Guide/Troubleshooting#upload
通信が出来ていないような感じですね。キーワード「avrdude: stk500_recv(): programmer is not responding」でググってみるとブートローダーが壊れたとか、いろいろ出て来て壊れたのかなと。でも、実は違うようです。
プロセッサ:ATmega328P(Old Bootloader)を選べば大丈夫!
Arduino / micro:bit / M5Stick勉強会の電録簿
http://www.umek.topaz.ne.jp/mameduino/boardupdate_error/
ボード・アップデートで書き込みエラー
このサイトによれば、どうやら、ボード設定メニューのプロセッサー種別選択のサブメニューにて「ATmega328P(Old Bootloader)」を選択するだけでいいようです。
はい、ちゃんと書き込めました。どうやら、Nanoの新しいやつは、通信速度が112.5kbps ということで、古いNanoは57.6kbpsということのようです。
ブートローダーを新しくすることもできるようで、もう一台arduinoがあれば以下のように書き込めるようです。
Arduino as ISP and Arduino Bootloaders
https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoISP
また今度やってみようかな。今日はいろいろ違う目的がありますので。
いや、こういうのはわかった時に即実行が良いですね。ブログのネタにもなるし少し休憩後、書き込んでみました。
UnoをISPにしてNanoに書き込みする!
こういうのは全体の流れを把握するのが大事です。大きくは以下と理解。
(1) UnoをISPにして、Nanoに書き込む
→ 手持ちにUnoがあったのですが、それ以外でもOK
(2) まず、UnoにArduinoISPのスケッチを書き込む
→ スケッチ例>11.ArduinoISP>ArduinoISP
※書き込んだら、次に配線をしますのでUSBを外します
(3) UnoとNanoを配線する
→ 配線は6本
(4) IDEのツールからブートローダーを書き込む
→ UnoをUSBでPCに接続。その後書き込みます
(1) UnoをISPにして、Nanoに書き込む
ISPとは、インサーキットシリアルプログラマーということで、ICSPとも略されるようですね。基板に繋いだまま内蔵メモリにプログラムを書き込むことを言うようです。今回の例だと、Nanoのブートローダーを書き込むにあたり、UnoをISPにして書き込むわけです!
(2) まず、UnoにArduinoISPのスケッチを書き込む
アリエクで昔、本物のUnoをポチっていました。裏が白い基板のです。
まずは、ISPのスケッチをIDEから引っ張りだしてきて、Unoに書き込みます。
スケッチ例 > 11.ArduinoISP > ArduinoISP
次に配線しますので、USBを外しておきます。
(3) UnoとNanoを配線する
配線は6本で、こんな感じです。写真ではUSBが接続さていますが書き込みが終わったときに撮ったからです。配線するときは、外してやってくださいね。
ISP UNO | 書込ターゲットNANO |
---|---|
D13 | D13 |
D12 | D12 |
D11 | D11 |
D10 | RST |
+5V | +5V |
GND | GND |
実体配線図だとこういうことですね。
さて、書き込みましょうか! USBをUno(ISP)に接続します。
(4) IDEのツールからブートローダーを書き込む
ツールからボート、プロセッサ、シリアルポート、書込装置を程よく選択して「ブートローダを書き込む」でOKです。ログには以下のように流れました。
/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -cstk500v1 -P/dev/cu.usbmodem14111 -b19200 -Uflash:w:/Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:i -Ulock:w:0x0F:m
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
User configuration file is "/Users/junkhack/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/cu.usbmodem14111
Using Programmer : stk500v1
Overriding Baud Rate : 19200
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xFD"
avrdude: writing efuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xFD:
avrdude: load data efuse data from input file 0xFD:
avrdude: input file 0xFD contains 1 bytes
avrdude: reading on-chip efuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xDA"
avrdude: writing hfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDA:
avrdude: load data hfuse data from input file 0xDA:
avrdude: input file 0xDA contains 1 bytes
avrdude: reading on-chip hfuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):
Writing | ################################################## | 100% 0.01s
avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lfuse verified
avrdude done. Thank you.
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500
Description : Atmel STK500 Version 1.x firmware
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex"
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 0.00s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: load data flash data from input file /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex:
avrdude: input file /Applications/Arduino1.8.12.app/Contents/Java/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.00s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: reading input file "0x0F"
avrdude: writing lock (1 bytes):
Writing | ################################################## | 100% 0.02s
avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x0F:
avrdude: load data lock data from input file 0x0F:
avrdude: input file 0x0F contains 1 bytes
avrdude: reading on-chip lock data:
Reading | ################################################## | 100% 0.01s
avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude done. Thank you.
新しいブートローダをNanoで確認
今書き込んだNanoの動作確認です。ボード設定メニューのプロセッサー種別選択のサブメニューにて「ATmega328P」を選択します。Old Bootloaderじゃないやつです。
LEDブリンクをNanoに書き込み! 以下がログですが、115200kbpsで通信していますね。
avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/Applications/Arduino1.8.12.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf"
User configuration file is "/Users/junkhack/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/cu.wchusbserial14120
Using Programmer : arduino
Overriding Baud Rate : 115200
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Arduino
Description : Arduino
Hardware Version: 3
Firmware Version: 4.4
Vtarget : 0.3 V
Varef : 0.3 V
Oscillator : 28.800 kHz
SCK period : 3.3 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: reading input file "/var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex"
avrdude: writing flash (924 bytes):
Writing | ################################################## | 100% 0.48s
avrdude: 924 bytes of flash written
avrdude: verifying flash memory against /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex:
avrdude: load data flash data from input file /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex:
avrdude: input file /var/folders/f1/5d6ycdnj6v58mcq9kn4b3ksm0000gn/T/arduino_build_539320/Blink.ino.hex contains 924 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.45s
avrdude: verifying ...
avrdude: 924 bytes of flash verified
avrdude done. Thank you.
flash verified が出ていますね。うまくいったようです! ログをよく見てみるとファームウェアバージョンは4.4ということのようです。
Hardware Version: 3
Firmware Version: 4.4
まとめ
今回、なんとなくわかったのは以下となります。
・ブートローダが古ければ、Arduino を書込機器(ISP)にして新しくできる
・古いArduinoなら、プロセッサー種別選択で「ATmega328P(Old Bootloader)」を選択
・違いは、通信速度のようです。それ以外の違いはまだ不明
あとがき
5年も使っていなかったので、扱いが悪くて壊れたのかな? と思っていましたが、対応方法があってよかったです! まさかブートローダが新しくなっていてIDEから古いのを選択しないとダメだとは思っていませんでした。壊れていなくてよかったです。
5年経過しているので、いろいろな環境が変わっていますね。5年前よりいろいろ進化しているので、ハマることもあるかもですが以前より楽しいことができそうな気がします。
著者にメッセージ
間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。
できました
ありがとう