ATmega3209 を買ってきたら いつものAVRISP MK2 では書き込めず、 新しい方式の UPDI 書き込み機が必要 とのことだったので、 Universalno で書き込み機を作ってみました。
旧Atmel 現Microchip の 新型AVR 0-Series はプログラムの書き込みに 従来のAVRISP MK2 で使われていた ISP書き込みの代わりに UPDI という1線通信で書き込みからデバッグまでできるようです。
ちょうど買ってきた ATmega3209 がこれだったので、手持ちの書き込み機で対応できず 困ったのですが、 ネットを探すと avrdude と Arduino を使って書き込みが出来るようだったので、挑戦してみました。
構成
構成はAVR Studio 等でコンパイルしたHex を avrdude というコマンドラインのソフトを使ってシリアルポートを制御し、USB-Serialアダプタで接続された Arduino を操作して Arduino のポートから UPDIによって ATmega3209 のプログラムを書き換える。 という構成です。
ハードウェア
まずハードウェアですが、 通常Arduino はシリアルポートを開いたときにDTRによってリセットがかかるようになっています。 これが avrdudeによって操作される際に障害になるようで、 USB Serial 変換部分か、Arduino本体の DTR – Reset 信号線をパターンカットします。
その場合ファームウェアの書き換えの際にはタイミングよくリセットボタンを押さなければならなくなります。
Universalno の場合は書き込み端子が用意されていますが、そのすぐ横に avrdude用接続端子を作るのがおすすめです。 そちらの端子はDTR以外を通常の書き込み端子に接続しておけば、 avrdude を使うときはそちらに、 通常のスケッチ変更する場合は通常の書き込み端子に差し替えるだけで良いので便利です。
UPDI 信号線は 6番ピンに 4.7kΩの抵抗を介して取り出します。 UPDIで書き込みする場合は この信号線の他、VCCとGNDの3本が必要です。
ファームウェア(スケッチ)
Arduino に書き込みスケッチは以下のの github からダウンロードしてきました。
https://github.com/ElTangas/jtag2updi
そのままデスクトップにzipをダウンロードしてきて解凍し Arduino で sourceフォルダの中の jtag2updi.ino を開くと何も書かれていませんが、そのままコンパイルして転送すると問題なくファームウェアがArduino に入ります。
なお Arduino IDE で開く際には source フォルダの名前を jtag2updi に変更しておきましょう。
また、シリアルポートの番号を avrdude で使用するので一緒に確認しておきましょう。
ソフトウェア (avrdude)
avrdude は実は Arduino IDE でも使用されています。 私はダウンロードしてくるのが面倒だったので、 Arduino に入っている avrdude を使うことにしました。
Windows の場合それは 以下のフォルダに入っています
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin
ここに 先程 github でダウンロードしてきた zip の中にある avrdude.conf ファイルを入れておきます。 ちなみにこのavrdude.conf のファイル内にある ATmega3209 のシグネチャは間違っていて、 本当は 0x1E9531 なのに 0x1E9553 になっていました。
これはnotepad++ などのエディタを使って書き換えておきましょう。
※16075行目 の部分。 ちなみに ATmega3208 も間違っていたので,合わせてPull-requestを投げておいた。
avrdude の使い方
実際の使い方ですが、 コマンドプロンプトを起動して avrdude のあるディレクトリまで行き、以下のコマンドを叩きます。
avrdude.exe -c jtag2updi -P com7 -p m3209
これで正しく接続されていれば以下のような応答が返ってきます
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.06s avrdude: Device signature = 0x1e9531 (probably m3209) avrdude done. Thank you. |
ファームウェアを書き込むには以下のように打ち込みます。
avrdude.exe -c jtag2updi -P com7 -p m3209 -U flash:w:example.hex
そして以下のような表示が出れば書き込みは成功です。
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.04savrdude: Device signature = 0x1e9531 (probably m3209) avrdude: 298 bytes of flash written Reading | ################################################## | 100% 0.08s avrdude: verifying … avrdude done. Thank you. |
ヒューズビットについてですが、 AVR 0-Series では HFUSE や LFUSE というものは存在しないようです。 AVR Studio を見てもこのような画面になっていました。
これは avrdude からは このようにアクセスするようです。
avrdude.exe -c jtag2updi -P com7 -p m3209 -U fuse0:r:con:h (0番目をHexで読み取りの例)
対応はデータシートにこのようにリストされていたので、これが正しいと思います。
もし Atmel ICE を持っているなら
純正の 書き込み機を持っているなら, 下の図のように接続すると Atmel Studio をつかって書き込む事もできます。
1: UPDI
2: GND
6: VCC (5V or 3.3V)
最後に
これで ATmega3209 へのファームウェア書き込みは完了です。
ところで この度 ATmega3209 を使った 16x16LED マゾバッチ を作りました。
QFP または QFN を手半田し、さらに256個の 0603 LED が実装できます。
Ogaki Mini Maker Faire 2018 で実装タイムアタックを実施するので ぜひ起こしください。
Ogaki Mini Maker Faire 2018 の配置は 1F の17 です。
みんなのラボ も一緒に出ています。 よろしくおねがいします。