とあることでArduino nano everyの互換品を使っていたのですが、あるときシリアル通信を試みました。するとシリアル通信そのものは見事成功したのですが、なぜかプログラムが書き込めなくなりました。
今回は注意喚起と備忘録も兼ねて、復旧までの経緯を残しておきます。
まず私が使っていた互換品というのが「Thinary Aduino nano every」という商品です。昨年初頭では送料込み500円前後で買えたのですが、現在はほぼ姿を消しています。どうも昨今の半導体不足でメインSOCのAtmega4808も品薄とも聞くので、その辺りが関連しているのでしょう。
さてこの互換品は「Serial.~」の命令ではシリアル通信ができません。
色々試した結果、なぜか「Serial1.~」だと上手く動作しました。しかし直後、USB経由でプログラムの書き込みができない症状に陥ります。
どうやらSerial1とUSBが競合しているらしく、絶え間なくArduno側からデータが送られた結果、PC側からのデータ送信が阻害されている……んじゃないかな?
本家のArduinoの一部シリーズでもこの現象は起きるようですが、起動時にボード側が何もせず受信をするだけの猶予時間を設けるとか、リセットボタンを押しながら起動することで問題のプログラムを起動させずに受信するだけの状態になるなど、対策が採られているようです。
この互換品でも対策が行われている……のですが、よりにもよって方法が「プログラムのコンパイル時にリセットボタンを押したままにし、書き込んでRXランプが光ったタイミングで離す」というもの。もちろん中華製品なので一切の説明も無く、ThinaryのGithubのIssueページでチラッと書かれている程度です。
ちなみに、RXランプが光った後でリセットボタンが押されていると、新しく書き込まれたプログラム諸共リセットになり、問題のプログラムが走ります。
完全な余談ですが、これで直らない場合はUPDIで書き直す方法があるようです。
ブログ一覧 | 日記
Posted at
2022/01/17 21:55:12