Arduino Nano互換機に書き込めないだと!

じゃんくはっく
じゃんくはっく

5年振りにArduino Nano(互換機)を触ったら書き込みできなーい!

あら、壊れたのかしら?

ぴー
ぴー
じゃんくはっく
じゃんくはっく

「マイコンボードに書き込もうとしましたが、エラーが発生しました。」と出るのよ

アリエクでまた買えば

200円くらいでしょ?

ぴー
ぴー

いやはや、5年も触っていないといろいろ完璧に忘れています。ArduinoNanoという小さなArduino があるんですが、それにLチカでも書き込んで動作確認しようとしたら、書き込めずエラーが出てしまいました。持っているNano互換機はこれです。

JunkHack : arduino hello world! 投稿日: 2015年3月15日
6年くらい前の記事で、$3でアリエクでポチったもの

https://hack.gpl.jp/2015/03/15/arduino-hello-world/

今回のエラーログは以下のようになります。

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年前よりいろいろ進化しているので、ハマることもあるかもですが以前より楽しいことができそうな気がします。

著者にメッセージ

間違いのご指摘など、コメントじゃなくて、個人的にやりとりしたい場合はこちらからどうぞ。お返事が遅くなるときもありますが、ご了承を。

Arduino Nano互換機に書き込めないだと!」への1件のフィードバック

コメントは受け付けていません。