Skip to content

askn37/UPDI4AVR-Software

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UPDI4AVR Software

UPDI (Unified Program and Debug Interface) host firmware over serial
For AVR DA/DB, megaAVR-0, tinyAVR-2 series from using avrdude, Arduino IDE
/// High-Voltage programing FUSE fixed supported (hardware support required) ///

UPDI対応AVR系列のためのシリアル通信ホストファームウェア
AVR Dx, megaAVR, tinyAVR系列を対象に avrdude と Arduino IDEで応用可能
/// 高電圧プログラミングによる FUSE 書換対応(要ハードウェア支援) ///

UPDI4AVRプロダクトには以下の三種類があるが、このブランチはその最初のものである。

  • UPDI対応Arduino互換機で動作する汎用ソフトウェアとしての UPDI4AVR Software <--
  • 専用HV制御回路を含むオープンソースハードウェアとして設計された UPDI4AVR Programmer
  • その専用ハードウェア用に作成された UPDI4AVR Firmware

最新の更新は UPDI4AVR Firmware が先行している。

特徴

  • UPDI対応 AVR のための、プログラミングホストファームウェア
    • megaAVR-0系列、tinyAVR-2系列、AVR DA/DB/DD/DU/EA/EB系列用
    • ホスト側、ターゲット側の双方を同系列の UPDI対応デバイスで統一できる
  • Arduino IDE および avrdude コマンドラインから使用可能
    • JTAGmkIIプロトコル準拠(JTAG2UPDI 互換)
    • ホスト/ターゲット間は対象系列固有のハードウェアUART伝送
    • ホスト/PC間は 1.5M bps 対応(要 avrdude 7.0、ホスト側F_CPU=16Mhz以上)
    • デバッガ機能なし(不揮発メモリプログラミング&FUSE書換専用)
    • フラッシュメモリ以外の EEPROM / USERROW 等の特殊領域書換も可能
  • 高電圧プログラミング対応(要ハードウェア支援)
    • HV印加は自動制御(avrdude -F オプション付加時)
    • チャージポンプ用PWM逆相ピン出力付
  • UARTパススルー対応
    • ライタとして動作しない間はターゲットの UARTが PCと繋げられる

UPDI4AVR Hardware

ハードウェアとしての UPDI4AVR の例

UPDI4AVR Firmware Builder 版との相違点

  • タイマー周辺機能の使い方が大幅に異なる。WatchDogTimer は積極的には使われていない。
  • 汎用的かつ多種のインストール先デバイスに対応するためコードの最適化がされていない。
  • RTS/DTR信号はパルス検出のみ行う。即応性が低いため、操作開始時の待機時間が長くなることがある。
  • 外部高電圧制御ピンが1本だけのため、対象デバイス毎に異なる制御電圧や、印加対象ピンの自動切り替えに対応していない。
    • 従って tinyAVR と AVR_DD/DU/EA/EB それぞれの対応グループ切り替えは、外部ジャンパーピンに依存する。

Arduino IDE への導入

askn37 / Multix Zinnia Product SDKをインストール済の場合、 このライブラリは既に用意されている。

  • ファイル -> スケッチ例 -> UPDI4AVR を選ぶ
    重要!ビルド可能なボード選択をしていなければ、メニューにこの選択肢は表示されない

そうでなければ次のようにする。

  1. .ZIPアーカイブをダウンロードする。Click here
  2. ライブラリマネージャで読み込む
    スケッチ -> ライブラリをインクルード -> .ZIP形式のライブラリをインストール...
  3. ツールメニューのボード選択で、UPDIホストにする 適切なターゲットを選ぶ(次節)
  4. ファイル -> スケッチ例 -> UPDI4AVR を選ぶ
    重要!ビルド可能なボード選択をしていなければ、メニューにこの選択肢は表示されない

ライタホストに選択可能なボード種別

このファームウェアは次の要件を満たす AVR にアップロード(インストール)できる。

megaAVR-0 シリーズ、tinyAVR-2 シリーズ、AVR DA/DB/DD シリーズのうち、

  • 8KB 以上の FLASH 領域
  • 1KB 以上の SRAM 容量
  • 2組の ハードウェアUSART サポート

を有していること。

リファレンス AVR は ATtiny824 とその上位品種である。 周辺機能が不足するため tinyAVR-0/1と AVR DU/EA/EBには対応していない。

その他にこのファームウェアは 以下の製品でインストールできる。

Arduiono / Arduino megaAVR Boards

  • Arduino UNO WiFi Rev 2 (ATmega4809)
  • Arduino Nano Every (ATmega4809) -- 注意事項有り。(後述)

askn37 / Multix Zinnia Product SDK -- megaAVR-0, tinyAVR-0/1/2, AVR DA/DB/DD/DU/EA/EB series support

デフォルトSDK。HV書込対応。

  • megaAVR-0 / tinyAVR-2 / AVR DA/DB/DD/DU/EA/EB
  • Microchip Curiosity Nano ATmega4809 (DM320115)
  • Microchip Curiosity Nano ATtiny1627 (DM080104)
  • Microchip Curiosity Nano AVR128DA48 (DM164151)
  • Microchip Curiosity Nano AVR128DB48 (EV35L43A)

Microchip Curiosity Nano 系列製品中、対象となるのは上記4種。

MCUdude / MegaCoreX -- megaAVR-0 series support

  • megaAVR-0

SpenceKonde / megaTinyCore -- tinyAVR-0,1,2 series support

  • tinyAVR-2

SpenceKonde / DxCore -- AVR DA,DB,DD series support

  • AVR DA/DB/DD/EA

Arduino megaAVR Borads はボードマネージャーから追加インストールする。
その他はそれぞれのサポートサイトの指示に従って、インストールする。

サブメニューで主クロック設定が可能な場合は、
16Mhz、20Mhz、24Mhz (オーバークロック時 28Mhz、32Mhz) から選択する。

卵と鶏の関係

この UPDI4AVRファームウェアを対象MCUに書き込むには、他のUPDI書込環境が必要である。 つまりまだ何も用意していない状況で、第一選択に UPDI4AVR を選ぶことは出来ない。 従ってまず次の選択をすべきである。

  • SerialUPDI 装置を用意/自作する。
    • おそらくもっとも簡単かつ低コスト。
    • 適当なUSB-UARTアダプタと配線材、ダイオード、ブレッドボード等があれば作れる。
  • オンボード書込器を搭載した既製品を購入/入手する。
    • Microchip Curiosity Nano製品のうち、前述の型番のものなど。
    • 一見簡単そうだがそうでもない。これらをライタにするには制御信号が被るので快適にはならない。
  • UPDI書込器完成品を入手する。
    • 色々あることはあるが、HV書込対応品(ましてAVR DD対応)は世界全体を見回しても稀有。

UPDI難民という言葉すらあるのがこの界隈である。

Arduino Nano Every について

オンボード搭載プログラムライタチップが JTAG2UPDI over UART 下位互換の特殊品である。 UPDI4AVR を書き込んでも制御が横取りされるために期待した動作をしないことが多い。

オンボードUSB を使わずに追加の UART を JTAG通信用に別途用意し、DTR/RTS信号も配線すれば良いが ほぼ同じ部材で SerialUPDI 書込器を作れてしまうので、それだと価値がない。

ターゲットに選択可能な modernAVR 品種

2022年前期時点で発表済の品種のみ記載。実物検証済は 太字 で示す。

ファミリ 2KB 4KB 8KB 16KB 32KB 主な外観
tinyAVR-0 ATtiny202 ATtiny402 SOP8
ATtiny204 ATtiny404 ATtiny804 ATtiny1604 SOP14
ATTiny406 ATtiny806 ATtiny1606 VQFN20 SOP20
ATTiny807 ATtiny1607 VQFN24
tinyAVR-1 ATtiny212 ATtiny412 SOP8
ATtiny214 ATtiny414 ATtiny814 ATtiny1614 SOP14
ATtiny416 ATtiny816 ATtiny1616 ATtiny3216 VQFN20 SOP20
ATtiny417 ATtiny817 ATtiny1617 ATTiny3217 VQFN24
tinyAVR-2 ATtiny424 ATtiny824 ATtiny1624 ATtiny3224 SOP14 TSSOP14
ATtiny426 ATtiny826 ATtiny1626 ATtiny3226 VQFN20 SOP20
ATtiny427 ATtiny827 ATtiny1627 ATTiny3227 VQFN24
8KB 16KB 32KB 48KB
megaAVR-0 ATmega808 ATmega1608 ATmega3208 ATmega4808 TSOP28 TQFP32
ATmega809 ATmega1609 ATmega3209 ATmega4809 DIP40 TQFP48
16KB 32KB 64kB 128KB
AVR DA AVR32DA28 AVR64DA28 AVR128DA28 DIP28 TSOP28
AVR32DA32 AVR64DA32 AVR128DA32 TQFP32 VQFN32
AVR32DA48 AVR64DA48 AVR128DA48 TQFP48 VQFN48
AVR64DA64 AVR128DA64 VQFN64
AVR DB AVR32DB28 AVR64DB28 AVR128DB28 DIP28 TSOP28
AVR32DB32 AVR64DB32 AVR128DB32 TQFP32 VQFN32
AVR32DB48 AVR64DB48 AVR128DB48 TQFP48 VQFN48
AVR64DB64 AVR128DB64 VQFN64
AVR DD AVR16DD14 AVR32DD14 AVR64DD14 SOP14 TSSOP14
AVR16DD20 AVR32DD20 AVR64DD20 VQFN20 SOP20
AVR16DD28 AVR32DD28 AVR64DD28 DIP28 TSOP28
AVR16DD32 AVR32DD32 AVR64DD32 TQFP32 VQFN32
AVR DU AVR64DU28 SOIC28 VQFN28
AVR64DU32 TQFP32 VQFN32
AVR EA AVR16EA28 AVR32EA28 AVR64EA28 VQFN28
AVR16EA32 AVR32EA32 AVR64EA32 TQFP32 VQFN32
AVR16EA48 AVR32EA48 AVR64EA48 TQFP48 VQFN48
AVR EB AVR16EB14 TSOP14
AVR16EB20 VQFN20
AVR16EB28 VQFN28
AVR16EB32 TQFP32 VQFN32
AVR16EB48 TQFP48 VQFN48

似たような型番だが以下の品種は本表のUPDI系ファミリに該当しない PDI/TPI系の別系統別品種。
Attiny102/104 ATtiny828/1628/3228

基本的な使い方

もっとも簡単な ターゲット 〜 UPDI4AVR 間配線は、VCC、GND、UPDI の3本を配線するだけ。


Target AVR     UPDI4AVR      Host PC
  +------+     +------+     +------+
  |  UPDI|<--->|PROG  |     |      |
  |      |     |    TX|---->|RX    |
  |   VCC|<----|VCC   |     |      |
  |      |     |    RX|<----|TX    |
  |   GND|---->|GND   |     |      |
  +------+     +------+     +------+

Fig.1 Programing Bridge Wireing

UPDI4AVR の UPDIプログラムピンは、品種(およびコンパイルオプション)によって異なる。以下は一例。

HOST PIN PORT
Arduino UNO WiFi Rev.2 D6 PF4
Curiosity Nano AVR128 -- PC0
ATtiny824 -- PB2

その他のピン接続は 設定ファイル詳細な使い方 を参照のこと

Arduino IDE ツールメニューでは 書込装置に JTAG2UPDI を指定する。

現行の Arduino IDE 1.8.x 同梱の avrdude は古いため、 最高通信速度は 115200 bps に制限される。

ターゲット品種を適切に指定し、ブートローダーの書込に成功すれば正常に動作している。
実際に書込を試みる前に、正常接続性を確認するには avrdude操作例 を参照のこと。

注意

  • AS IS(無保証、無サポート、使用は自己責任で)
  • UNO WiFi、Nano Every などは PCとの UART通信開始時の自動リセットを無効化することができない。 このため UPDI4AVR 通信開始時に自分自身のリセットを含む、数秒以上の無応答遅延時間がある。
    • オンボードデバッガによって直接リセットされるため、外付部品追加での回避はできない。
    • より高度な機能を活用するにはベアチップと専用の回路とで構築するほうが好ましい。
  • Arduino IDE からは高電圧プログラミング、デバイス施錠、デバイス解錠、 EEPROM書換などの高度な指示をすることは原則出来ない。 これらはコマンドラインから avrdude を操作することで対応する。
  • デバッガインタフェースとしては機能しない。特殊領域書換とチップ消去にのみ対応。
    • UPDIオンボードデバッグ制御プロトコルは非公開のプロプライエタリ。
  • 高電圧プログラミングには、追加のハードウェア支援が絶対に必要。(必然的に)
  • 最高通信速度(USB-シリアル変換速度)は、対象デバイスグループによって大きく異なる。
    • tinyAVR / megaAVR は 1Mbps以上でも問題ないことが多い。(Xeon-MPだと 2Mbpsが使えることもある)
    • AVR_DA/DB/DD は 1Mbpsでのリードで USBパケットロストエラーが観測される。(見かけはタイムアウトと区別できない)
      • readsize=128に減らすと改善するケースがあるので、ホストPC側 USBドライバーのチューニング依存と思われる。
    • AVR_EA は 500kbps でも稀に タイムアウトエラーが観測される。

うまく動かない場合

  • メニュー設定を確認する
    • AVR のボードマネージャー種別
      • megaAVR-0、tinyAVR-2、AVR DA/DB の各系統以外ではビルドできない
      • ATmega328P 等の旧世代 AVR は使用不能
    • サブメニュー選択
    • シリアルポートの選択
    • 書込装置の選択
  • 配線を確認する
    • 電源供給はホスト側かターゲット側のどちらか一方からのみ供給する(電圧を揃える)
    • ファームウェアを書く時、FUSEを書く時は ターゲットの UART線は外す
      • UARTパススルーを併用しない(ターゲットがGPIOを使っているとJTAG通信を妨害する)
    • なるべく短い配線材を使う
  • 復旧に高電圧プログラミングが必要になる FUSE設定を安易に試さない
    • そういう FUSE をくれぐれも間違って書かない

更新情報

  • 2024/01/23 v0.2.10

    • FW607に改正。AVR_EB 系統に対応。AVR_DU 系統に暫定対応。
  • 2023/11/28 v0.2.9

    • UPDI4AVR Firmware (FW634B)からの技術的バックポートで AVR_EB対応準拠に更新。
      • 施錠されたデバイスの場合、擬似署名を返却する。
      • 施錠デバイスへの盲目的 USERROW 書き込み対応と、チップ消去操作の改善。
      • AVRDUDE 7.3に仕様に準拠。
      • AVRDUDE-Dオプションによる、部分メモリブロック書き込みに対応。
  • 2023/05/09

    • 添付 avrdude.conf での規定速度を 460800 230400 に制限。
      • 古いCH3xx用ドライバにて使用不可のため。(現行最新では問題ない)
  • 2023/04/14

    • AVR_EA系統の書換に対応。(UPDI4AVR Firmwareからのバックポート)
    • ファイル配置変更。
    • FUSE書換は以前と同じ値なら何もしないように対応。
  • 2023/03/26

    • 標準通信速度を 912.6kbps に訂正。(多数のUSB-UART変換器での実用限界速度)
    • AVR_Dx系統以降のEEPROM書換不具合修正。(avrdude.conf改定)
    • AVR_Dx系統以降のUSERROW通常書換に対応。
    • AVR_Dx系統以降のFLASH領域への-D使用時の部分書換に対応。(かわりに最高書込速度低下)

関連リンク

その他の情報

Copyright and Contact

Twitter(X): @askn37
BlueSky Social: @multix.jp
GitHub: https://github.com/askn37/
Product: https://askn37.github.io/

Copyright (c) 2023 askn (K.Sato) multix.jp
Released under the MIT license
https://opensource.org/licenses/mit-license.php
https://www.oshwa.org/