新しいAVRはUPDI (Unified Program and Debug Interface) というインターフェースで書き込みをします。
今まではArduino UNO Wi-Fi Rev.2 のメインマイコンであるATmega4809を書き込むためのIC (ATmega32U4)を参考にして作り、ファームウェアを読み出して書き込んで作ったUPDIプログラマを使ってました。
流石にずっとこれを使う訳にはいかない感じもしたので、よく使われる Serial UPDI の基板を作ってみました。
スポンサーリンク
これをずっと使ってます。
まあ使えなくはないですし、機能としては十分ですからね...
ただ、UARTの通信が不安定なところがあって不満はあります。
Serial UPDI ではその部分は解消されます。
少し前の記憶では Serial UPDI で書き込もうとするとめちゃくちゃ遅くて Serial UPDI を使う選択肢はなかったのですが、最近だと改善されて爆速で書き込んでくれるので不安だったところも解消されています。
Serial UPDI の概要は下記URLに書かれています。
簡単に言うとUSB-UART変換ICのTXにダイオードを付けてRXと繋げます。(TX側がカソード)
あとは念のため抵抗を付けるだけで完成です。
これでUPDIの書き込みはできるようになるのですが、UARTで通信はできなくなってしまいます。
TXとRXが実質くっついてしまってますからね。
できなくはないですが、エコーバックが常時ONみたいな状態です。
スポンサーリンク
UARTもちゃんと機能させるためにスイッチやマルチプレクサを入れて切り替えてあげます。
今回はアナログスイッチを使ってその自動切り替えを実現しました。
RTSの端子で切り替えているだけです。
RTSはデータ送信の許可ですが、大体のシリアルモニタを開いたときに"LOW"に落ちます。(負論理)
Serial UPDI で書き込んでいる最中はRTSは"HIGH"のままですので、その違いを利用しています。
RTSは不論理であることに注意です、大事ですので...
実は何回か設計に失敗してまして、大枠は問題なかったのですが凡ミスを繰り返しました。
負論理なのに正論理として扱っていたりしてまして。
基板が手元に届いた瞬間にゴミ箱に投げ入れるときに切なさと言ったら...
まともなUPDIプログラマができたので、あとはUPDIがついているマイコンが Arduino IDE 2.0 に対応してくれると文句がないんですけどね...
まだ対応してないみたいなので、まだまだ開発途上感否めませんが、こういう時期は好きです。
どんどん進化して言ってほしいなと応援しています。
スポンサーリンク
Leave a Comment