jtag2updi
code:README.md
# jtag2updi
これはファームウェアであり、ATmega328Pまたは類似のAVRマイクロコントローラ(ATmega1280/2560への実験的対応、および32ピン以上のLogic Green LGT8F328P/D AVRクローンを含む)にアップロードすると、シリアルリンクを介してjtagice Mk2プロトコルを使用したavrdudeとのインターフェース機能が有効になります。特に、Arduino Uno/Nanoをホストとしてこのファームウェアを動作させることが可能です(Arduino MegaおよびLGTベースのArduinoクローンへの実験的対応も含まれます)。このファームウェアは、UPDIインターフェースを採用した新しいattiny817ファミリーのマイクロコントローラをプログラムするためのブリッジ機能を提供します:
avrdude -> HW Serial interface -> Programmer MCU (e.g. Mega328P) -> SW Serial on PD6 -> Target MCU (e.g. tiny817)
現在のところ、このソフトウェアをレベルシフターと組み合わせてテストしたことはありませんが、UPDIピンは高電圧耐性を備えているため、V_prog > V_targetの構成は問題ありませんが、その逆は推奨されません。<strong>警告:高電圧プログラミングに対応したデバイスのUPDIピンのみが高電圧耐性を持つと想定してください。これはMegaAVR 0シリーズやAVR-DAシリーズには当てはまりません!</strong> ただし、これらのデバイスのI/Oピンに対する電流注入仕様は、従来のAVRデバイスよりもはるかに寛容であるため、UPDIピンがこの仕様に含まれるかどうかは明確ではありません。
ただし、論理レベルが互換性を持っていることがプログラミング成功の条件となります:V_targetはV_progの約60%未満に設定してはいけません(60%であれば動作する可能性が高く、70%であれば確実に動作します)。したがって、5.0Vのプログラマーで2.5Vのターゲットをプログラムすることは不可能です。通信エラーが発生するためです(ただし電気的な損傷は生じません)。ただし、V_targetが3.3V(5.0Vの66%)であれば、正常に動作する可能性が高くなります。
<pre>
V_prog V_target
+-+ +-+
| |
+----------+ +---------------------+ | | +--------------------+
| PC | | Programmer +-+ +-+ Target |
| avrdude | | | +----------+ | |
| TX +----------+ RX PD6 +------+ 4k7 +---------+ UPDI |
| | | | +----------+ | |
| RX +----------+ TX | | |
| | | | | |
| | | | | |
| | | +--+ +--+ |
+----------+ +---------------------+ | | +--------------------+
JTAGICE MkII +-+ UPDI +-+
Protocol GND Protocol GND
</pre>
別の方法として、USB/シリアルアダプタを内蔵していないArduino(pro-miniなど)を使用することも可能です。この場合、DTRワイヤーを切断するだけで自動リセット機能を無効化できます。ただし、UPDIチップはArduinoのMCUと同じ電源電圧に接続されている必要があることに注意してください。
## Building with avr-gcc
(略)
## Building with Arduino IDE
(略)
## Using with avrdude
このファイルは avrdude 6.3 で動作するように以下の変更が施されています、互換性のない設定項目を削除(実際にはコメントアウト)、「jtag2updi」プログラマタイプを追加。
UPDI チップ用の定義は若干修正されており、avrdude がこれらのチップを UPDI ではなく PDI プログラミングインターフェースを使用していると認識するように変更されています(つまり、avrdude はこれらのチップを一種の XMegas として扱うようになっています)。
これにより、UPDI チップのプログラミングに jtagice mk2 プロトコルを使用できるようになります。このプロトコルは UPDI よりも先行して開発されており、公式には UPDI と互換性がありません。当初は STK500v2 プロトコルを使用し、ISP インターフェースをエミュレートする計画でしたが、実際にはプログラマ用ソフトウェアの ISP バージョンを実際に実装しました。
ただし、この場合 avrdude.conf ファイル内で UPDI チップ用の定義を完全に新規に作成する必要が生じます。一方、jtagice2 を使用する場合は、Atmel(現 Microchip)が提供する定義に対してごくわずかな変更を加えるだけで済みます。
<b>注記:</b>
Arduino IDE に "Nano Every" ボードをインストールすると、jtag2updi に対応した avrdude および avrdude.conf ファイルが自動的にインストールされます。これらのファイルは、ここで提供している旧バージョンの avrdude 向け互換性ファイルの代わりに使用できます。
jtagice mk2 は、USB ではなく UART シリアル接続をサポートする Atmel のプログラミングプロトコルの中で最も先進的な規格です。このため、このソフトウェアを実行する任意の Arduino ボードや、avrdude を実行する任意の OS と容易に互換性を持たせることができます。
唯一の大きな制約は通信速度で、プロトコルが高速通信用の定義をサポートしていないため、115200 ボー以上の速度は実現できません。この点において、より古い規格である STK500v2 プロトコルの方が優れており、この規格では avrdude が指示する任意の速度で動作可能です。
幸いなことに、現在の UPDI チップはフラッシュメモリ容量がそれほど大きくないため、この制約は大きな問題にはならないと考えられます。
<b>Example command line (windows):</b>
<pre>
avrdude -c jtag2updi -P com7 -p t1614
</pre>
すべての接続が正しく、対象デバイスが実際に*ロック解除*状態の tiny1614 である場合、出力結果は以下の通りになります:
<pre>
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.03s
avrdude: Device signature = 0x1e9422 (probably t1614)
avrdude done. Thank you.
</pre>
チップがロックされている場合、出力結果は以下のようになります:
<pre>
avrdude: jtagmkII_reset(): bad response to reset command: RSP_ILLEGAL_MCU_STATE
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude: jtagmkII_close(): bad response to sign-off command: RSP_ILLEGAL_MCU_STATE
avrdude done. Thank you.
</pre>
チップのロックを解除するには、avrdude コマンドで -e オプションを使用して消去する必要があります:
<pre>
avrdude -c jtag2updi -P com7 -p t1614 -e
</pre>
別の方法として、インタラクティブモードからチップを消去し、"-t" オプションで再入力した後に "-F" オプションを使用してエラーを無視することも可能です:
注意: 端末モードで動作させるには、DISABLE_HOST_TIMEOUT が定義された状態でビルドする必要があります。タイムアウトに関する詳細については以下を参照してください。
<pre>
avrdude -c jtag2updi -P com7 -p t1614 -t -F
</pre>
avrdude プロンプトが表示されます:
<pre>
avrdude: jtagmkII_reset(): bad response to reset command: RSP_ILLEGAL_MCU_STATE
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0xffff00
avrdude: Expected signature for ATtiny1614 is 1E 94 22
avrdude: NOTE: Programmer supports page erase for Xmega devices.
Each page will be erased before programming it, but no chip erase is performed.
To disable page erases, specify the -D option; for a chip-erase, use the -e option.
avrdude>
</pre>
「erase」(消去)に続いて「quit」(終了)を入力すると、チップがロック解除され(かつ消去されます)。
<pre>
avrdude> erase
>> erase
avrdude: erasing chip
avrdude> quit
>> quit
avrdude done. Thank you.
</pre>
(以下略)
(Plamo 翻訳)