以前紹介したATmega4809が安価で便利なのはとてもいいことですが、まだまだ一般的に使うにはハードルが高いデバイスです。
megaAVR 0シリーズではICSPではなくUPDI(Unified Program and Debug Interface)というインターフェースで書き込みをおこないます。
AVRISP mkIIでは書き込めませんので私はAtmel-ICEを使っています。
我慢できるギリギリラインですが、やっぱり少し面倒です。
そこで Arduino IDE が認識してくれるUPDIプログラマを作れば...と少し考えてみました。
スポンサーリンク
そもそもATmega4809が搭載されている Arduino UNO WiFi Rev2 にはATmega32U4が載っており、それがUPDIプログラマとして働きます。
ということはファームウェアをパクればいいのでは?と思ったのですが、そう簡単にいかないものでまだそういうものを見つけられていません。
AVR Xplained Mini という Microchipから出ているボードのmEDBGファームウェアは見つかりました。
リリースが2014年なんですけどね...
これをATmega32U4に書き込むと、ちゃんと mEDBG Port と認識してくれます。
そして Arduino IDE でも「Arduino UNO WiFi Rev2」と認識してくれるんです!
「これは行ける!」確信したのですが...
ここまできたらArduino UNO WiFi Rev2と同じように配線してプログラムを書き込みます。
ここまで順調だったのですが、さすがに考えが浅かったようです。
下記のようなエラーが出て、書き込みに失敗してしまいます。
avrdude: jtag3_edbg_recv(): Inconsistent fragment number; expect 1, got 0 avrdude: initialization failed, rc=-1 Double check connections and try again, or use -F to override this check.
スポンサーリンク
配線間違ってるんじゃない?と言われていますが、何度見てもあってますし...
おそらくダウンロードしたファームはUPDI用のピンが違うところなのかなと推測しています。
Arduino Uno WiFi Rev2 を入手して、ファームウェアを読み取れたら一番いいんですけどね。
ATmega32U4側には書き込み用のピンが出ておらず、苦労しそうです。
誰か詳しく解析してくれないでしょうかね。
代替案として考えているのがjtag2updiというものがありますので、それを使うことです。
ATmega328Pに書き込むことでUPDIプログラマと使えますが、これをどうにかしてArduino IDEで認識させるという方法もあるのではないでしょうか。
こちらもちょっと考えてみようと思います。
スポンサーリンク
2014年リリースのファームってISP版だと思いますよ。 mEDBGの最新ファームはAtmelStudioに
入っています。 あとupdi/tpi/swdなどISP以外はeeprom0xFEにImageID(updi=0xFC)を
書き込まないといけません。
今はnEDBGに乗り換えました。