Arduino Unoにスケッチをアップロードできません。
- 私はそれを「ブリック」しましたか?
- 何が間違っているのかを解決するためにどのような手順を踏むことができますか
- 修正するにはどうすればよいですか?
Arduino Unoにスケッチをアップロードできません。
回答:
私はかなりの数のArduinoを持っていますが、ここ数年で「ブリック」しているのはこれまでの1つだけです。残念ながら、その特定のものにはSMD(表面実装)プロセッサチップが搭載されていたため、別のチップと交換するのは簡単ではありません。
落ち着いて、次の手順を試してください...
「Arduinoの宇野は」ただものではないこと失敗する可能性があります。複数の主要コンポーネントがあり、おそらく1つだけが失敗しました(ある場合)。この参考写真をご覧ください。
主なコンポーネントは次のとおりです。
RxおよびTx LEDは、ボード上のデジタルピン0および1(RxおよびTxとマーク)に直接接続されていないことに注意してください。USB経由でシリアル通信を行っている場合にのみ点灯します。デジタルピン0および1に何か(GPSなど)が直接接続されている場合は点灯しません。
また、「L」LEDはオペアンプを介して接続されているため、ピン13がスケッチの入力に設定されている場合に点灯する場合があります。これは正常です。何かが誤ってデータを送信しているという意味ではありません。
USBケーブルを使用してボードをコンピューターに接続し、緑色の「オン」LEDが点灯することを確認します。
マルチメータと2本のジャンパリードを使用して、5VピンとGNDピン(下部の矢印)の間をテストします。約5.0 Vの読み取り値を取得する必要があります(私は5.04 Vを取得しました)。
(お持ちでない場合は10ドル前後で安価なマルチメーターを購入できますが、50ドル前後でより良いマルチメーターを入手したほうがよいでしょう。すべての電子機器のWebサイトとストアを確認してください。)
USBケーブルを差し込んだ状態で5 Vにならない場合は、もう一方の端がコンピューターに接続されていることを確認してください。別のケーブルも試してください。
あなたが使用し、または使用することを計画している場合は、電源ジャック(写真上「に力を」マーク)はUSBを切断し、電源のプラグイン-に正で7 DC V 12になるべきセンターピン。
上記のように5 Vおよび3.3 Vピンを測定します。それでも同じ電圧が表示されるはずです。
USBを接続した状態で5 Vを得るが、電源を供給していない場合は、電圧レギュレータ(写真に記載)が破損している可能性があります。または、電源装置が故障している可能性があります。別の電源を試して、どちらであるかを確認してください。
Optibootブートローダーを使用している場合(通常Unoに同梱されています)、リセットボタンを押して放すか、USBまたは電源ケーブルを抜き差しして、「L」LEDが3回すばやく点滅します。「オン」時間と「オフ」時間はそれぞれ50ミリ秒であり、3回のフラッシュは約1/3秒以内に終了します。
そうでない場合は、ブートローダーまたはメインプロセッサチップ(Atmega328P)に問題がある可能性があります。
重要:スケッチのアップロードに問題がある場合は、接続されているデバイス(シールドなど)をすべて取り外します。ボードのソケットに差し込まれているジャンパー線も取り外します。特に、デジタルピン0および1(RxおよびTx)には何も接続しないでください。これは、アップロードするコンピューターとの通信を妨げるためです。
シンプルなサンプルスケッチ(例:点滅)の1つを選択し、アップロードしてみます。これはあなたが見るべきものです:
「L」LEDが3回点滅するはずです。これは、アップロードプロセスからのコマンドによってメインチップがリセットされるためです。
「Rx」LEDが素早く点滅するはずです。これは、ブートローダーをアクティブにしようとするアップロードプロセスからの指示です。
「Tx」LEDがすばやく点滅するはずです。これは、アップロードされたデータを確認するプロセッサです。
アップロードプロセスが失敗した場合でも、上記が表示される場合があります。これは、間違ったボードタイプが選択されていることが原因である可能性があります。
「Rx」LEDのみが点滅する場合は、ブートローダーまたはメインプロセッサチップ(Atmega328P)に問題がある可能性があります。誰かがノックしていますが、誰も家にいません!
LEDが点滅するが、次のようなメッセージが表示される場合:
avrdude: stk500_recv(): programmer is not responding
ボードの種類を確認します。
間違ったボードタイプを選択した場合、おそらく間違ったアップロード手順を送信し、タイムアウトするか、失敗します。あなたが私のようであり、さまざまなボードが横に並んでいる場合、最後にアップロードしたのは別のボードタイプであることを忘れがちです。
LEDがまったく点滅しない場合は、間違った通信ポートが選択されている可能性があります。
通信ポートを確認します。
別のPC / Macをお持ちの場合は、Arduinoをお試しください。これにより、プラグインした特定のコンピューターまたは一般的なコンピューターに問題があるかどうかを絞り込むことができます。
配線:
すべてがエコーバックされる場合:適切な通信ポートがあることを確認し、USBケーブルは正常で、USBインターフェイスチップ(Atmega16U2)はおそらく正常です。
何もエコーバックされない場合は、以下を確認してください。
ボードがループバックテストに失敗し、USBケーブルが正常であることを確認したら、Atmega16U2チップ自体をテストできます。ボードには、Atmega16U2チップに隣接し、USBソケットの近くにICSP(In Circuit Serial Programming)ヘッダーがあります。
最初に電源を切断します(USBケーブルと電源ケーブルをすべて取り外します)。
次に、写真に示すように、ICSPヘッダーを6本のジャンパー線を介して既知の良好なUnoに接続できます。
ICSPヘッダーのピン配列は(上から)です:
Atmega16U2チップの近くのICSPヘッダーのピン1は、「AREF」の「F」の近くの小さな白い点でマークされています。ATmega328Pチップ近くのICSPヘッダーのピン1は、「ON」の「N」の下に小さな白い点でマークされています。
接続する:
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
配線を再確認してください。
次に、「既知の正常な」ボードに、Atmegaブートローダープログラマーページで説明されているように、「Atmega_Board_Detector」スケッチをインストールします。コードはGitHub-nickgammon / arduino_sketchesにあります。そのページの[ダウンロード]ボタンをクリックすると、いくつかの便利なスケッチが表示されます。必要なものは「Atmega_Board_Detector」と呼ばれます。
インストールしたら、シリアルモニターを開いて115200ボーに設定すると、次のように表示されます。
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000
Bootloader:
3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3
First 256 bytes of program memory:
0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...
ただし、次のようなメッセージが表示される場合:
"Failed to enter programming mode. Double-check wiring!"
これは、ATmega16U2が機能していないことを示しているように見えます。
「既知の正常な」Arduino Unoから電源を切断し、この写真に従ってICSPジャンパーを再配線して、それらをUnoの「メイン」プロセッサーに接続します。
ICSPヘッダーのピン配列は(上から)です:
ATmega328Pチップ近くのICSPヘッダーのピン1は、「ON」の「N」の下に小さな白い点でマークされています。
配線は以前と同じです。ただし、USBソケットから最も遠いボードの端にある他のICSPヘッダーに接続します。
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
接続したら、シリアルモニターを開いて115200ボーに設定すると、次のように表示されます。
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...
MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328
First 256 bytes of program memory:
0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...
この場合、メインプロセッサが動作していることを確認し、Optibootブートローダーを搭載しています。
これは簡単に置き換えることはできませんが、電源ジャックを使用する場合にのみ必要です。USBから実行する場合は必要ありません。または、4〜5 Vの電源(たとえば、単3電池x 3)を手配し、ボード上の5 Vソケットに直接接続することもできます。
これは、USBポート経由でスケッチをアップロードし、シリアルデバッグする場合にのみ必要です。SMD(表面実装デバイス)であるため、交換は特に簡単ではありません。ただし、それなしで管理できます。
ICSPプログラミングデバイスを購入すると、ICSPヘッダーを介してスケッチをアップロードできます。
ICSPソケットに差し込まれたそのようなデバイスの例:
(これらの写真はRuggeduinoを撮影したものですが、コンセプトは同じです)。
次のようなFTDIケーブルも入手できます。
次のようにボードのシリアルポートに接続します。
FTDI Arduino Uno
GND GND (black wire on FTDI cable, blue jumper wire)
CTS not connected
VCC 5V
TxD D0 (RX)
RxD D1 (TX)
RTS To RESET with a 0.1 µF capacitor in series with it (green wire)
USBチップをバイパスして、スケッチをメインプロセッサに直接アップロードできるようになりました。
Atmegaチップスタンドアロンプログラマを使用して.hexファイルをアップロードすることもできます。これにより、スケッチ用の.hexファイルをSDカードにコピーし、ICSPヘッダーを介してボードをプログラムできます。
メインプロセッサは、ソケットに取り付けられていればかなり簡単に交換できます。Adafruitのような場所から6ドル前後で交換用チップを入手してください。または、eBayを試してください。面倒を省くために、Optibootブートローダーが既に搭載されているチップを入手してください。
既存のチップを慎重にソケットから取り出し、ピン1の位置に注意して新しいチップを取り付けます。ピン1にはチップにノッチがあり、正しい向きがこの投稿の最初の写真に黄色で記載されていますドット(ボードの端に最も近い)。足を少し真っ直ぐにする必要があるでしょう。チップの両端を持ち、机のような平らな面に少し押し込みます。金属ピンに触れないようにしてください。静電気でそれらを叩く可能性があります。
Optibootブートローダーを置き換えるAtmegaブートローダープログラマーのスケッチがあります。配線は、チップ検出器のスケッチと同じです。コードはGitHub-nickgammon / arduino_sketchesにあります。そのページの[ダウンロード]ボタンをクリックすると、いくつかの便利なスケッチが表示されます。必要なものは「Atmega_Board_Programmer」と呼ばれます。
「既知の良好な」Unoにスケッチをインストールし、先ほど示した配線でターゲットボードに接続します。
「良い」Unoでシリアルモニターを開くと、次のように表示されます。
Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul 9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Uno(Optiboot)ローダーに「U」と入力します。
Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...
「G」と入力して、チップをプログラムします。
見るべき:
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...
これには約1秒かかります。これでブートローダーがインストールされました。
ウォッチドッグタイマー(既定ではオフ)は、一定時間後にプロセッサをリセットするように構成できます。その目的は、現場に配備されたプロセッサの「ハング」から回復することです。ただし、タイマーが短い期間(16ミリ秒など)に設定されている場合、ブートローダーが何かを実行する前に、プロセッサを再度リセットできます。
症状は、新しいスケッチをアップロードできないことです。一部の最新のブートローダー(Optibootなど)は、最初に行うことの1つとしてこの問題を停止するための手順を実行します。しかし、他の人はそうではありません。
これは、スケッチを実行するとリセットされるという問題があり、問題がある場合はスケッチを置き換えることができないため、回復が難しい場合があります。多くの場合、回復するには新しいブートローダーを書き込む必要があると報告されます。ただし、これは副作用として、ブートローダーを書き込むと現在のスケッチが消去されるためです。
そこで回復の道は。次の手順を実行します。
この投稿は実際にUnoボードをターゲットにしているものの、非常に一般的であるため、ここで言及します。
Mega2560ブートローダーの一部のバージョンは、「!!!」を探します。PCからの着信アップロードで、それが表示されたら、デバッグモードに移行します。これにより、アップロードが失敗します。
サンプルコード:
Serial.println ("Furnace overheating!!!");
ソリューション:
または(より簡単に):
メイン(および唯一の)プロセッサとしてATmega32u4を搭載したボードは、アップロードが難しい場合があります。これは、同じチップがアップロードを処理し、コードを実行する必要があるためです。
ボードがリセットされた後、アップロードする新しいスケッチを探すとき、機会の小さなウィンドウがあります。これらのボードにアップロードする方法は次のとおりです。
古いスケッチが実行を開始する前に、これを行うのにわずか数秒しかありません。このプロセスを数回繰り返す必要がある場合は、落胆しないでください。それは正常です。
少なくとも-avrdudeを使用してスケッチをアップロードすると仮定しますが、アップロードの失敗に関する詳細情報(スケッチアップローダーの出力など)を入力してください。
Nick Gammonの素晴らしい答えに加えて、スケッチで感嘆符を検索してください。スケッチに3つ以上の感嘆符を含む文字列が含まれている場合、古いバージョンのArduinoブートローダーがこれらの感嘆符を別の機能として解釈し、アップロードが停止するため、アップロードは失敗します。
アップロードを停止する例:
char* test = "This will stop the upload!!!";
Google Code issueをご覧ください。
私は、Arduino Unoボード上で静的なために2個のATMega328Pをブリックしました(私は思う)。
スタティックはTXピンを殺したように見えるため、プログラムはUSBケーブルを使用してダウンロードできません。
最も簡単な解決策は、マイクロコントローラーを交換することです。Arduinoブートローダーでプログラムされた新しいATMega328P DIP(このようなAdafruit製のもの)を購入すれば、再び準備ができています。
または、AVRISPmkIIプログラマを使用して、ATMega328Pをプログラムすることもできます。すると、Txピン以外はすべて正常に機能します。