2016年8月20日土曜日

Arduino1.6.10と、Arduino UNO R3と、その互換機にプログラムが転送できなくなる

無駄なトラブルシューティングを書き連ねて長くなったので、結果を先に書くと
USB経由で書き込めなくなった原因は、しばらくISP(ICPS)経由でファイルを転送していたのでブートローダーが無効になっていました (^^;
何年Arduino使ってんだーと w

ブートローダーが有効かどうかを見分ける方法は
電源投入直後に基板上にあるD13に接続の繋がLEDが高速に数回点滅するかどうかで見分けることが可能で、点滅すればブートローダーが有効で、点滅しなければ無効。
と判断できる。

蛇足
ブートローダーが有効の場合点滅後に書き込んだプログラムが実行されるので電源投入から実行までにちょっと遅延がある。
それに対し、ISP経由で書き込むとブートローダーが無効になるので、すぐにプログラムが実行される。その代わりに純正のUSBケーブル経由の書き込みが出来なくなる。

電源入れるとすぐにプログラムが実行されるし、書き込みの手間は変わらないしでUSBaspで書き込みするようになったんだったと、思い出す (^^;




帰省中の暇つぶしにCH340という中華チップの載ったArduino UNO互換機を持って帰り、プログラムを転送しようとしたら
 avrdude: stk500_recv(): programmer is not responding ・・・
とかいうエラーで書き込めず・・・。
書き込みプログラムを定番のサンプルプログラムのBlink(Lチカ)にしてみるも相変わらず同じエラー。

でも、Get Board infoでレスポンスがあるのでシリアル通信自体はできているハズ。


んで、レスポンスがどうのというエラーなので、リセットがうまく動いてない?と、タイミングを変えて手動リセットを試すもダメ。

前にうまく動いた時から変わったといえば・・・。
OSが、Windows10 64bitなのは同じだけど、anniversary updateを当てたのと、Arduino:1.6.10にアップデートしたこと。

試しにVer.1.6.9や、Ver.1.6.8に戻してみるも変わらず。帰省中の使用はあきらめる orz



家に戻り、正規品のArduinoUNOで試すも結局同じエラーで、試しにUSBaspを使いICSP、ISP経由で書き込もうとしたら今度は別のエラー orz
Ver.1.6.11が出ていたのでアップデート。Ver.1.6.10は、avrdude周りで不具合が出ていたらしく古いのに戻したようだ?
これで、USBasp経由での書き込みはできるようになったが、USBポート経由の書き込みは相変わらずエラー orz

PCを変え
 Windows10 anniversary update 32bit + Arduino1.6.11
で試したけれども変わらない orz

anniversary updateを疑っているのだけどもロールバックで戻すのめんどくさいし、また入れることを考えるとやりたくない。

ま、USBasp経由で書けば使えるから当面はそれでいいやと (^^;



ちなみにエラーはこんな感じ・・・。


Arduino:1.6.11 (Windows 10), ボード:"Arduino/Genuino Uno"

最大32,256バイトのフラッシュメモリのうち、スケッチが948バイト(2%)を使っています。
最大2,048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2,039バイト使うことができます。
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x28
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x28
マイコンボードに書き込もうとしましたが、エラーが発生しました。
このページを参考にしてください。
http://www.arduino.cc/en/Guide/Troubleshooting#upload

「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。



追記
オリジナルのUNO R3や、UNO R3互換機は全滅。
検索をしてみても同じ状況の人は少ないようで???その上、通常のFAQに埋もれていて。ありきたりの答えが返ってて・・・。

気分転換に、ほかの種類のボードで試したら、問題なくファイルの転送ができました。
UNO系でも最近ブートローダーを自分で焼いた表面実装(SMD)な中華互換機は、ファイルの転送ができる。

問題なかったもの
 MEGA互換機(CH340Gの載った中華ボード)
 Nano互換機(CH340Gの載った中華ボード)
 UNO R3(SMD)互換機(CH340Gの載った中華ボード)

ダメだったもの
 UNO R3(DIP)正規品
 UNO R3(DIP)互換機(CH340Fの載った中華ボード)


ブートローダーが無効になっていると分かり、USBaspを使いICSPポート経由でブートローダーを書き込んだところ、無事プログラムが転送されるようになる。

0 件のコメント:

コメントを投稿