Skip to content

askn37/multix-zinnia-updi4avr-firmware-builder

Repository files navigation

MultiX Zinnia UPDI4AVR Firmware Builder

このブランチはUPDI4AVR Programmerファームウェアサポートを含んでいる。 同時に任意のスケッチをファームウェアと置き換えて書き込むビルド環境も提供する。

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

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

(0.2.11以降) SERIAL/UPDI-MANAGER(SUM) のファームウェアもこのSDKで同時に提供される。

対象AVR

[megaAVR] tinyAVR-0/1/2

系統 pin 2KiB 4KiB 8KiB 16KiB 32KiB
tinyAVR-0
8 ATtiny202 ATtiny402
14 ATtiny204 ATtiny404 ATtiny804 ATtiny1604
20 ATtiny406 ATtiny806 ATtiny1606
24 ATtiny807 ATtiny1607
tinyAVR-1
8 ATtiny212 ATtiny412
14 ATtiny214 ATtiny414 ATtiny814 ATtiny1614
20 ATtiny416 ATtiny816 ATtiny1616 ATtiny3216
24 ATtiny417 ATtiny817 ATtiny1617 ATtiny3217
tinyAVR-2
14 ATtiny424 ATtiny824 ATtiny1624 ATtiny3224
20 ATtiny426 ATtiny826 ATtiny1626 ATtiny3226
24 ATtiny427 ATtiny827 ATtiny1627 ATtiny3227

太字 は実物確認済

[megaAVR] megaAVR-0

系統 pin 8KiB 16KiB 32KiB 48KiB
megaAVR-0
28 ATmega808 ATmega1608 ATmega3208 ATmega4808
32 ATmega808 ATmega1608 ATmega3208 ATmega4808
40 ATmega4809
48 ATmega809 ATmega1609 ATmega3209 ATmega4809

太字 は実物確認済

[modernAVR] AVR DA/DB/DD/DU/EA/EB

系統 pin 8KiB 16KiB 32KiB 64KiB 128KiB
AVR_DA
28 AVR32DA28 AVR64DA28 AVR128DA28
32 AVR32DA32 AVR64DA32 AVR128DA32
48 AVR32DA48 AVR64DA48 AVR128DA48
64 AVR64DA64 AVR128DA64
AVR_DB
28 AVR32DB28 AVR64DB28 AVR128DB28
32 AVR32DB32 AVR64DB32 AVR128DB32
48 AVR32DB48 AVR64DB48 AVR128DB48
64 AVR64DB64 AVR128DB64
AVR_DD
14 AVR16DD14 AVR32DD14 AVR64DD14
20 AVR16DD20 AVR32DD20 AVR64DD20
28 AVR16DD28 AVR32DD28 AVR64DD28
32 AVR16DD32 AVR32DD32 AVR64DD32
AVR_DU
14 AVR16DU14 AVR32DU14
20 AVR16DU20 AVR32DU20
28 AVR16DU28 AVR32DU28 AVR64DU28
32 AVR16DU32 AVR32DU32 AVR64DU32
AVR_EA
28 AVR16EA28 AVR32EA28 AVR64EA28
32 AVR16EA32 AVR32EA32 AVR64EA32
48 AVR16EA48 AVR32EA48 AVR64EA48
AVR_EB
14 AVR16EB14 AVR32EB14
20 AVR16EB20 AVR32EB20
28 AVR16EB28 AVR32EB28
32 AVR16EB32 AVR32EB32

太字 は実物確認済、斜体 は暫定対応

導入方法

  • Arduino IDE の「環境設定」「追加のボードマネージャーのURL」に以下のリンクを追加
  • メニューバーから「ツール」「ボード選択」「ボードマネージャー」ダイアログパネルを開き、検索欄に "multix" と入力
  • MultiX Zinnia UPDI4AVR Firmware Builderを選択して「インストール」

ボードマネージャー設定

  • メニューバーから「ツール」「ボード選択」からMultiX Zinnia UPDI4AVR Firmware Builderを選択
  • メニューバーから「ツール」「シリアルポート」でUPDI4AVR Programmerに接続されたポートを選択

ファームウェアアップデート(推奨される手順)

  • UPDI4AVR ProgrammerSW3FW側にセットして作業PCにUSBケーブルで接続
    • UPDI4AVR ProgrammerのLEDがハートビート明滅を始める
  • メニューバーから「ツール」「Variant」で望むファームウェアを選択
  • メニューバーから「ツール」「書込装置」でSerialUPDI over USBを選択
  • メニューバーから「ツール」「ブートローダーを書き込む」を選択
    • ファームウェア書換中はUPDI4AVR ProgrammerのLEDは消灯する
    • ファームウェア書換が完了するとUPDI4AVR ProgrammerのLEDはハートビート明滅を始める
  • UPDI4AVR Programmerを作業PCから取り外しSW3RUN側に戻す

この手順はビルド済のファームウェアをUPDI4AVR Programmer本体に書き込む。 「アップロード」ボタンをクリックすると現在IDEで表示中の任意のスケッチが書き込まれるが、これは誤った手順になるので注意。

UPDI4AVRのファームウェアバージョン確認方法

  • Arduino IDEの場合:対象デバイスを繋がず、書込装置にUPDI4AVR over UARTを選択して「ブートローダーを書き込む」
  • CLIの場合:avrdudeにパスが通っているなら、対象デバイスを繋がずに次のようなコマンドを実行する。
avrdude -p avr64ea32 -c updi4avr -P <実際のCOMポート> -v

何れの場合も(対象デバイスがないため)エラーで終了するが、それに先立ってUPDI4AVRの個体情報をコンソールに表示する。

Programmer Type : JTAGMKII_UPDI
Description     : JTAGv2 to UPDI bridge
M_MCU HW version: 2
M_MCU FW version: 7.53
S_MCU HW version: 2
S_MCU FW version: 6.34
Serial number   : xx:xx:xx:xx:xx:xx
Vtarget         : 5.2 V

S_MCU FW versionが現在実行中のUPDI4AVRFWバージョン、Serial numberUPDI4AVRハードウェア固有識別子を示す。 Vtargetは実際にVDD/VTG端子で観測される電源電圧を示す。

Serial numberはFWを変更しても(消去しても)失われることなく不変。

UPDI4AVR Software との相違

  • UPDI4AVR Software は汎用の Arduino 互換機向けに書かれている。
    • USB-UARTのRTS信号は、互換機の制約により端検出のみしか行えない。
    • 各種信号の制御は、多様なチップで共通する機能のみで行う。
    • JTAG2プロトコルサブバージョンは 6系 で、JTAG2UPDIと同じ。
    • シリアル番号、制御電圧情報はダミー。
    • ~~近日、UPDI4AVR Firmware からのバックポートを予定している。~~完了。
    • ~~JTAG2UPDI(clone)へもバックポートされたクローンの公開も予定している。~~完了。
  • UPDI4AVR Firmware は Macro/Micro_API環境で記述され、専用設計のハードウェア向けに書かれている。
    • USB-UARTのRTS信号のレベル検出ができるため状態遷移が高速。
    • 各種信号の制御にほぼ GPIOを使わず、CCL/LUT を活用している。
    • FW753Bでは JTAG2プロトコルサブバージョンは 7系 で、avrdude から対象デバイスの追加情報を取得できる。 よってHV制御電圧の自動切換えと、USERROW特殊書込は UPDI4AVR Firmware にしか実装されていない。
    • FW634Bでは JTAG2プロトコルサブバージョンは 6系 で、JTAG2UPDIと同じに戻った。HV制御電圧の自動切換えは avrdude.conf に制御情報を追記することで対応する。つまり標準の構成ファイルでは、HV制御は有効化されない。USERROW特殊書込はより汎用性の高い実装に変更された。

ファームウェアビルド&アップロード

  • メニューバーから「ファイル」「スケッチ例」から「UPDI4AVR firmware」を探す
  • サブメニューで望むファームウェアを選択
  • メニューバーから「スケッチ」「マイコンボードに書き込む」あるいは「アップロード」ボタンをクリック

この手順は選択したファームウェアをソースからビルドしてUPDI4AVR Programmer本体に書き込む。

カスタムファームウェア

UPDI4AVR Programmer本体はArduino互換機としても動作するので、このブランチでも任意のスケッチをビルドして書き込むことができる。

しかしこのブランチでのスケッチビルドでは必要最小限の機能だけ (だがAVR-LIBCは備えているのでMicrochip純正環境とほぼ等価) を含みFUSE等は推奨設定に固定されている。 以下のビルド環境に切り替えればこれらを任意に変更して機能を拡張することができる。

以下のボードマネージャーサポートをインストールする。

  • MultiX Zinnia Product SDK [megaAVR] ->HERE

このブランチと同等の設定にするには、以下のようにボードマネージャーを変更する。

  • ボードマネージャーでMultix Zinnia Product SDK [megaAVR]中のtinyAVR-0/1/2 w/o Bootloaderを選択(必須)
  • Variant中のtinyAVR-2 20pin ATtiny1626 (16KiB+2KiB)を選択(必須)
  • Clock中のInternal 10 MHzを選択(任意)
  • BOD Mode中のBOD Enabledを選択(任意)
  • BOD Level中のLevel 1.8V (default)を選択(任意)
  • FUSE PF6中のUPDI and PB4 pin=RESET (tinyAVR-2 20/24pin only)を選択(任意)
  • Console and LED中のUART1 TX:PC2 RX:PC1 LED=PA7 (tinyAVR-2 alt)を選択(USBサイド)
    • あるいはUART0 TX:PB2 RX:PB3 LED=PA7(TP1サイド)

ブードローダーを組み込む場合はTP1サイドをPC接続に使用しSW1の#3と#4はオフにしなければならない。 CN3:USBサイドはブートローダーでのスケッチアップロードに対応していない。

Arduino API対応環境

このブランチおよび前述のビルド環境は Arduino API をサポートしていない。 従って一般的な多くのArduinoスケッチはサポートされていない。 フルサポートを欲する場合は以下のビルド環境を用意すると良い。 ただし設定可能項目は増大するので取り扱いには注意が必要。 またArduino API対応と引き換えにコードがとても大きく遅くなる。

  • megaTinyCore - Arduino support for all tinyAVR 0/1/2-Series ->HERE

AVR_DU/EA/EB 系統への対応

  • AVR_EA/EB 系統の正式サポートには avrdude 7.3 以降のリリースが必要
    • ただし AVR_EB の BOOTROW 書き込みには書込器側ファームウェア対応の制約がある。
  • AVR_DU 系統の正式サポートには avrdude 7.4 以降のリリースが必要(計画)

23/12現在、avrdude 7.2 内蔵の SerialUPDI は、AVR_DU/EA/EB 系統を正しく操作することができない。暫定的に AVR_DU/EB/EA 系統の不揮発メモリを読み書きできるプログラムライターは、UPDI4AVRJTAG2UPDI(Clone)PICkit4/5 (要 Firmware アップグレード)だけである。 本SDKに付属の avrdude.conf.UPDI4AVRUPDI4AVR および JTAG2UPDI(Clone) でのみ正しく動作する記述であることに注意されたい。

AVR_DU/EB系統のメモリマップ変更

AVR_DU/EB系統では新たな不揮発メモリとしてBOOTROWが設定された。 これは 64byteのFlashメモリにしてFUSEに追加された保護ビットにより フラッシュ消去と連動消去するか保護されるか選べるものである。 そしてその配置アドレスは従来のSIGNATURE領域を指している。

Symbol tinyAVR / megaAVR AVR_DA/DB/DD/EA DU/EB
SIGNATURES_START / SIGNATURE_0 0x1100 0x1100 0x1080
USER_SIGNATURES_START (USERROW) 0x1300 0x1080 0x1200
BOOTROW_START (BOOTROW) - - 0x1100

このためBOOTROWに本来のSIGNATUREの内容が転写されており、 かつFUSEで消去保護がされているならば、 AVR_EA以前とは互換性があるように振る舞う。 2023/10時点での最新の avrdude.conf (GitHUB) は、この互換性を期待した記述であることに注意されたい。

BOOTROWSIGNATUREを共に0x1100とし、 -U bootrowでアクセスできるようにしている。 一方でUSERROWは0x1080のままであるため正常に処理できない。 PRODSIGBOOTROWから読み出される。

一方で本リポジトリに付属の avrdude.conf.UPDI4AVR での配置アドレス指定は、 AVR_DU/EB ネイティブである。 これはBOOTROWを特殊ではないメモリアクセスと、 USERROWへの正しいメモリアクセスを保証する。

前述の表の通りに記述されており、 BOOTROWSIGNATUREは別の領域である。 PRODSIGSIGNATUREの次アドレスから正しく読み出される。

AVR_EA 系統の制約

  • FUSE_SYSCFG0.CRCSRC を既定値の NOCRC 値以外に変更してはならない。初期生産ロット(B1)は回路の不具合により正常な動作をしない。この不具合は二次生産ロット(B2)以降で解消されている。

AVR_EB 系統の制約

  • 初期生産ロット(A0)は、LOCK.KEY または FUSE.PDICFG を既定値以外に変更すると、以後の UPDI NVMPROG 制御が(HV制御と無関係に)全面的に困難または不可能となる。これは公開データシートの記述と異なる挙動である。
  • FUSE_SYSCFG0.CRCSRC を既定値の NOCRC 以外に変更してはならない。初期生産ロット(A0)は回路の不具合により正常な動作をしない。
  • HV制御の推奨投入電圧が 7.5V に変更(低下)した。RESET/PF6 パッドの絶対定格は 8.5V なので、AVR_DD 用に設計された HV制御回路では電圧が高すぎる恐れがある。

SERIAL/UPDI-MANAGER(SUM)

SERIAL/UPDI-MANAGER(SUM)は、SerialUPDIプログラム機能を混載した UARTパススルー対応 USBシリアル変換アダプタだ。高度な機能は持たないが、UPDI4AVR に近い操作性を低コストで提供する。

  • UARTパススルーと tinyAVR リセット機能(URP)を専用FWで実現している。
  • 対応する AVRDUDE は、v7.3以降を推奨(v7.1以降も一部制約付きで使用可能)
  • pymcuprg も使用可能(UPDI固定モード使用時)
  • ハードウェアの制約により、HV機能には非対応。
  • AVRDUDE の実装上の都合により -Dによる部分領域書き換えは非対応。

24/04/21 現在のFWバージョンは、FW2401Aである。

更新履歴

  • 0.3.0 (24/11/06)

    • AVRDUDEを8.0-arduino.1に更新。
    • toolchainを7.3.0-avr8-gnu-toolchain-241029に更新。
  • 0.2.14 (24/06/17)

    • 各ファイルの MITライセンスリンク対応
    • UPDI4AVR: AVRDUDE>=8.0対応の微修正(24/08/22)
  • 0.2.13 (24/05/12)

    • 7.3.0-avr8-gnu-toolchain-240510に更新。
  • 0.2.12 (24/04/29)

    • 動作確認済に AVR64DU28 を追加。
  • 0.2.11 (24/04/21)

    • 動作確認済に AVR128DB28AVR64DD28 を追加。
    • SERIAL/UPDI-MANAGER(SUM) のファームウェア対応を同梱。
  • 0.2.10 (24/01/16)

    • 7.3.0-avr8-gnu-toolchain-231214に更新。
      • AVR64DU28/32 に暫定対応。
      • 動作確認済に AVR64EA32AVR64EA48AVR16EB32ATtiny1627, ATtiny416 を追加。
  • 0.2.9 (23/12/08)

    • 制御困難デバイスに対するリセット処理の調整。
  • 0.2.8 (23/11/24)

    • 7.3.0-avr8-gnu-toolchain-231113に更新。
    • UPDI4AVR Firmware をUPDI4AVR_FW634Bに変更。
      • AVRDUDE 7.3仕様に準拠。
      • HV制御は添付のavrdude.conf.UPDI4AVRを使用した場合に有効。
  • 0.2.7 (23/10/18)

    • dryrunを書込器選択に追加。
    • avrdude.conf参照ルールの変更。
      • arduino/UPDI4VAR/TPI4AVR/dryrunを書込器に指定した場合のみ、ローカルの特別な設定ファイルを参照する。それ以外は規定の(tools/avrdude/etc内の)avrdude.confを参照する。
      • この変更により、AVR_EA系統のようにまだ他の書込器で未対応/未検証のパーツ設定が分離された。
  • 0.2.6 (23/10/16)

    • 7.2-arduino.1に更新。
    • 7.3.0-avr8-gnu-toolchain-231004に更新。
  • 0.2.5 (23/10/09)

    • AVR_EB系統の対応準備
    • avrdude.conf.updi 記述を avrdude 7.1 準拠に改正
    • 前述に対応したNVM制御の修正
    • 規定の動作主クロックを10Mhz→20MHzに変更
      • 4.5V未満でのNVM書換は未だ可能であるが非推奨とする
  • 0.2.4 (23/09/09)

    • 7.3.0-avr8-gnu-toolchain-230831に更新。
    • programmers.txtを改正。
      • SerialUPDI-xrtsdtr=Highオプションを有効化。
  • 0.2.3 (23/07/09)

    • 7.3.0-avr8-gnu-toolchain-230628に更新。
  • 0.2.2 (23/05/23)

    • 7.1-arduino.1に更新。
  • 0.2.1 (23/04/29)

    • AVR_DA初期ロット(RIVID=A6/A7)対応
  • 0.2.0 (23/04/10)

    • 新規公開

許諾

各構成要素はそれぞれ異なる配布ライセンスに属する。条件はそれぞれの規約に従う。

  • BSD License
    • avr-libc
  • GNU General Public License v2.0
    • avr-gcc
    • avrdude
  • MIT License
    • other original document and code

著作表示

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

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