Skip to content

AVR-GCC, AVR-LIBC and avrdude toolkit for Arduino IDE

License

Notifications You must be signed in to change notification settings

askn37/multix-zinnia-sdk-modernAVR

Repository files navigation

MultiX Zinnia Product SDK [modernAVR]

このソフトウェア開発キットは、主に新世代のAVRファミリ (Microchipブランド統合以降で発表されたもの) について、Arduino IDEでの開発を支援するために構成されている。 AVR-GCC/AVR-LIBC を用いて書かれた C/C++/アセンブラ プログラムを avrdude を用いて対象MCUにアップロードするまでの作業フローを提供する。

概要

  • Arduino互換APIは提供されない。
    • ごく限られた互換性は配慮されており Blinkスケッチ(標準Lチカ)はそのままビルドできる。
    • 原則として割込や計数器/計時器周辺機能を専有せず、利用者が自由に使える。
      • 協調的マルチタスク 支援ライブラリは RTC周辺機能を必要とする。
        (任意選択:明示的インクルードで有効化)
  • AVRDUDE 8.0 同梱。(0.3.0以降)
  • 超低消費電力超低速駆動対応。
    • 32768Hzの超低消費電力動作を支援。
  • 安価なプログラムライタ(書込器)の利用を想定。
    • 高度なデバッグトレース機能は提供されない。シリアルコンソールだけが使える想定。
  • makeコマンドによる高度なビルド進行は提供されない。
    • Arduino IDE自体が makeコマンドに対応していない。
    • Arduino IDEによる自動ビルド進行は提供される。
    • 大規模開発には不向き。
    • むしろMakefileを書かなくて良いから割り切れて簡単。
    • 単機能テスト、スクラッチビルド、先行検証、各種実験に好適。
  • 改良されたブートローダーの提供。(reduceAVR以外)
    • スケッチプログラムと同時に EEPROM 領域を定数初期化/アップロード可能。
    • フラッシュメモリ領域の自己消去/書換機能を支援。
      • 余っている領域を大容量不揮発メモリストレージとして活用可能。
  • 新規構築・再構築が簡単。
    • セットアップは数分で済む。公式IDEのように何GBも大量ダウンロードすることはない。
    • セミナー講習等での一斉大量導入に向く。

対応AVRアーキテクチャ

現在この SDK は複数の異なる対象アーキテクチャ向けにリポジトリを分けて提供される。

  • MultiX Zinnia Product SDK [megaAVR]
    • megaAVR-0 と tinyAVR-0/1/2 系統。(Atmelブランド世代)
  • MultiX Zinnia Product SDK [modernAVR] <--
    • (Microchipブランド世代)
    • AVR DA 系統
      • AVR32DA28 AVR64DA28 AVR128DA28 AVR128DA28S
      • AVR32DA32 AVR64DA32 AVR128DA32 AVR128DA32S
      • AVR32DA48 AVR64DA48 AVR128DA48 AVR128DA48S
      • AVR32DA64 AVR64DA64 AVR128DA64 AVR128DA64S
    • AVR DB 系統
      • AVR32DB28 AVR64DB28 AVR128DB28
      • AVR32DB32 AVR64DB32 AVR128DB32
      • AVR32DB48 AVR64DB48 AVR128DB48
      • AVR32DB64 AVR64DB64 AVR128DB64
    • AVR DD 系統
      • AVR16DD14 AVR32DD14 AVR64DD14
      • AVR16DD20 AVR32DD20 AVR64DD20
      • AVR16DD28 AVR32DD28 AVR64DD28
      • AVR16DD32 AVR32DD32 AVR64DD32
    • AVR DU 系統
      • AVR16DD14 AVR32DD14
      • AVR16DD20 AVR32DD20
      • AVR16DD28 AVR32DD28 AVR64DD28
      • AVR16DD32 AVR32DD32 AVR64DD32
    • AVR EA 系統
      • AVR16EA28 AVR32EA28 AVR64EA28
      • AVR16EA32 AVR32EA32 AVR64EA32
      • AVR16EA48 AVR32EA48 AVR64EA48
    • AVR EB 系統
      • AVR16EB14 AVR32EB14
      • AVR16EB20 AVR32EB20
      • AVR16EB28 AVR32EB28
      • AVR16EB32 AVR32EB32
  • MultiX Zinnia Product SDK [reduceAVR]
    • 旧世代AVRのうち TPI方式に対応した系統。(Atmelブランド世代)

この分割は NVM書換プロトコルおよび/すなわちブートローダーの相互共有性による。
共通基盤の AVR-GCC/AVR-LIBC toolchain は既知の AVR 8bit 系全種に対応している。
AVR32EBxx は、AVRDUDE 8.0時点では書込不可。

対応するホストOS

  • Windows (32bit/64bit)
  • macOS (64bit)
  • Linux (主にintel系64bit)

対応する主なプログラムライタ

完成品として販売されている製品以外の、工場出荷状態ではブートローダーが書き込まれていないため何らかの書込器準備は必要。

  • UPDI4AVR-USB -- このSDKでもメンテナンスされている。PICKit4互換相当。
    • 廉価な "AVR64DU32 CURIOSITY NANO" を UPDI/TPI/PDI 対応書込器に仕立てるソフトウェア。
    • CMSIS-DAP/EDBGプロトコルによる、JTAG3UPDI/TPI/PDI 対応。
    • 高速CDC/VCPシリアル通信機能付。
    • UPDI/TPI の HV書込 対応可。(要外部回路)
  • UPDI4AVR -- このSDKでもメンテナンスされている。USBシリアル接続。JTAG2UPDI上位互換。
    • HV書込 とUSB-USARTパススルーに対応可。(要外部回路)
    • ゼロからこれを自作する場合は 卵と鶏 の関係になるため注意。
  • SerialUPDI -- 一般のUSB-UARTと簡易な回路による高速書込環境。
    • 準備にはいくらかの部品と配線準備が必要だが難易度は低い。HV書込は望めない。
    • 対象MCUの UART通信とは回路が排他で外部切替が必要。(自動切替は要外付制御回路)
  • PICkit4 -- 公式のプログラム書込装置兼 デバッグトレース 装置。
    • 使用開始前に MPLAB X によるFWアップデートが要求される。購入状態での対応範囲不明。
    • フルスペックの公式開発環境が別途必須なのでエンドユーザーのPC環境によっては難がある。
      Arduino IDEの動作スペックより数倍大きなディスク空容量やハードウェア性能とIDE操作習熟が必要。
  • JTAG2UPDI(Clone)
    • Arduino UNO やその派生バリアント製品を無改造で UPDI対応プログラムライターに転換するファームウェア。
    • リンク先の "Clone" バリアントは、AVR_DA/DB/DDと、AVR_DU/EA/EB に暫定対応する。(UPDI4AVR からのバックポート)
  • プログラムライタ内蔵完成市販品 -- これらはブートローダー書込不要。(あるいは対応不可)
    • Microchip Curiosity Nano Series の一部 -- AVR DA/DB + nEDBG

導入方法

  • Arduino IDE の「環境設定」「追加のボードマネージャーのURL」に以下のリンクを追加
  • 「ボードマネージャー」ダイアログパネルを開き、検索欄に "multix" と入力
  • 目的のアーキテクチャを選択して「インストール」
    megaAVR modernAVR reduceAVR

Developer Preview

ボード選択メニュー

SDK種別と対象ブートローダー使用の有無をここで選ぶ。

  • MultiX Zinnia Product SDK [megaAVR]
  • MultiX Zinnia Product SDK [modernAVR] <--
    • AVR DB with Bootloader
    • AVR DA with Bootloader
    • AVR DD with Bootloader
    • AVR DU with Bootloader
    • AVR EA with Bootloader
    • AVR EB with Bootloader
    • (separator)
    • AVR DU with USB Bootloader
    • (separator) 以下ブートローダーなし
    • AVR DB w/o Bootloader
    • AVR DA w/o Bootloader
    • AVR DD w/o Bootloader
    • AVR DU w/o Bootloader
    • AVR EA w/o Bootloader
    • AVR EB w/o Bootloader
  • MultiX Zinnia Product SDK [reduceAVR]

ボード選択サブメニュー

Arduino IDE でこのSDKを選択すると、 サブメニューでは以下のオプションが選択可能となる;

FUSE設定の変更は 書換器使用時に反映。ブートローダー書込時は変更不能。

  • Variant -- 具体的な製品型番を選択。(必須)
    • 外囲器ピン数+型番+フラッシュメモリ量+SRAM量別になっている。
    • 14pin品種選択時は、Bootloader および Console and LED 選択肢に制限があることに注意。
  • Clock(Dx) -- AVR_DA/DB/DD/DU用の主装置動作基準周波数選択(F_CPUマクロ初期値) -- 既定値は定格内最高速度
    • F_CPUマクロを参照しないプログラムでは効果なし
    • FUSE無関係に常時どれでも変更可能
    • 高周波内蔵発振器による 24MHz〜1MHz
    • 高周波内蔵発振器のオーバークロック 32MHz、28MHz(AVR_DA/DB/DDでは定格外、AVR_DUでは定格内)
    • 超低消費電力発振器による 32.768kHz (OSC-ULP)
  • Clock(Ex) -- AVR_Ex専用の主装置動作基準周波数選択(F_CPUマクロ初期値) -- 既定値は定格内最高速度
    • F_CPUマクロを参照しないプログラムでは効果なし
    • 20MHz系列と16Mhz系列は FUSE書込依存で排他選択
    • 高周波内蔵発振器による 20MHz/10MHz/5MHz -- 20MHz系列用
    • 高周波内蔵発振器による 16MHz/8MHz/4MHz/1MHz -- 16MHz系列用
    • 高周波内蔵発振器による 2MHz -- FUSE設定非依存
    • 超低消費電力発振器による 32.768kHz (OSC-ULP) -- FUSE設定非依存
  • BOD Mode -- Brown Out Detect(FUSE設定)
    • BOD Disabled -- 無効 -- 既定値
    • BOD Enabled -- 有効
    • BOD Sampled -- 各個別データシート参照のこと
    • BOD Enabled hold wakeup -- 各個別データシート参照のこと
  • BOD Level -- BOD監視電圧レベル(FUSE設定)
    • 1.90V or 1.75V -- 既定値
    • 2.45V or 1.90V
    • 2.70V or 2.60V
    • 2.85V or 4.30V
  • FUSE PF6 -- AVR_DA/DB/DD/DU/EA/EB のリセット端子用途変更(FUSE設定)
    • PF6 pin=Reset -- 既定値
    • PF6 pin=GPIO -- 各個別データシート参照のこと
  • FUSE UPDI -- AVR_DD/DU/EA/EBの UPDIピン用途変更(FUSE設定)
    • 原則、既定値からの変更禁止(復元にはHV対応書換器が必須)
    • 各個別データシート参照のこと
  • EEPROM -- EEPROM保護フラグ(FUSE設定)
    • Save guard "Retained" -- チップ消去時保護
    • Save guard "Erase" -- チップ消去時一括初期化
    • Upload ".eep" file -- ブートローダー/書込器でのEEPROMファイル書換有効
  • BOOTROW -- BOOTROWの扱い:DU/EBシリーズのみ
    • Save guard "Erase" -- チップ消去時一括初期化(既定値)
    • Save guard "Retained" -- 何もしない
    • Upload ".brow" file -- ブートローダー/書込器でのBOOTROWファイル書換有効
  • USERROW -- USERROWの扱い
    • Save guard "Retained" -- 何もしない
    • Upload ".urow" file -- ブートローダー/書込器でのUSEROWファイル書換有効
  • FUSE define -- FUSE全体の扱い:書込器モードのみ
    • Specify in the MENU -- メニュー設定に従う
    • Upload ".fuse" file (DANGER) -- FUSEファイルでの書換有効:危険な操作
  • Build Option -- DEBUGマクロ有無(任意選択)
    • Build Release -- 既定値(NDEBUG設定)
    • Build DEBUG=1
    • Build DEBUG=2
  • Build API -- API拡張(任意選択)
    • Macro API Enable -- 既定値
    • Macro API Enable without startup -- 割込テーブルとLIBC初期設定スタートアップ無効
    • Macro API Disable -- 無効
      • Arduino互換APIの導入は要外部支援(本SDKサポート外)
    • Standard Library All Disable
      • フルアセンブラ記述/純粋C言語環境(LIBC無効)
  • Build "printf" -- LIBC printf拡張(任意選択)
    • default -- 浮動小数点フォーマット出力不可
    • Float Support -- 浮動小数点フォーマット出力対応
  • Console and LED -- (任意選択:w/o Bootloader 選択時に表示)
    • 選択肢は系統選択に依存
  • Console -- コンソール既定速度(CONSOLE_BAUDマクロ初期値)任意選択
    • CONSOLE_BAUDマクロを参照しないスケッチプログラムには効果なし
    • 9600 bps -- 標準
    • 38400 bps
    • 57600 bps
    • 115200 bps
    • 230400 bps
    • 1000000 bps
    • 2400 bps -- OSC-LUP対応
  • Bootloader -- ブートローダー選択
    • 選択肢は系統選択に依存
    • w/o Bootloader 選択時は変更不可
  • シリアルポート選択
    • 環境依存
  • 書込装置選択
    • UPDI4AVR-USB
    • SerialUPDI over UART
    • PICkit4 over USB (UPDI) -- ファームウェア更新が必要
    • Curiosity Nano (nEDBG: ATSAMD21E18)
    • JTAG2UPDI over UART (NVM Enhanced) -- リンク先の "Clone" バリアントは AVR_DD/DU/EA/EB も対応
    • dryrun (Emulates programming without a programmer) -- 実際には何もしないダミーの書込器で、各種設定の論理的妥当性を検証するのに使用する

FUSE UPDI -> UPDI (default) 選択以外に書換えた場合の復元は HV対応書込器が必須。
FUSE EEPROM -> "Erase" and "Replace" 選択は、対応するブートローダーか書込器使用時のみ可。
Build API -> Standard Library All Disable 選択は、一切の既定コンパイル前提を除去する。

プログラム書込

ブートローダーでのスケッチ書込 Ctrl+U ⌘+U

ボードメニューでブートローダー有を選んだ場合はこのモードが標準。 書込器は不要。MCUの UART経由でスケッチを書き込む。 FUSEを書き換えることは出来ない。 Arduino IDE のシリアルコンソールを閉じる必要はない。

以下のサブメニュー設定は必須;

  • Bootloader
  • シリアルポート選択

EEPROM対応ブートローダーを使用しているならば以下の選択も可能。

  • EEPROM -> Upload ".eep" file
  • BOOTROW -> Upload ".brow" file(DU/EBシリーズのみ)
  • USERROW -> Upload ".urow" file

tinyAVR/megaAVR系統では Clock 選択と現在の真のFUSE設定が一致していないと UARTが正しく動作しない。 FUSE現在値が不明な場合は 2MHz を選択するとよい。

書込器でのブートローダー付スケッチ書込 Ctrl+Shift+U ⌘+Shift+U

ボードメニューでブートローダー有を選んでおり、かつ書込器も併用している場合に有効。 FUSEも同時に更新される。 Arduino IDE のシリアルコンソールを閉じる必要はない。 スケッチとブートローダー導入を一括で行える。

以下のサブメニュー設定が必須;

  • Bootloader
  • シリアルポート選択(over UART 書込器の場合)
  • 書込装置選択
  • すべてのFUSE関連

EEPROM対応書込器を使用しているなら以下も選択可能。

  • EEPROM -> Upload ".eep" file
  • BOOTROW -> Upload ".brow" file(DU/EBシリーズのみ)
  • USERROW -> Upload ".urow" file

tinyAVR/megaAVR系統では任意の Clock 選択が有効となる。

書込器でのブートローダー無スケッチ書込 Ctrl+U ⌘+U

ボードメニューでブートローダー無を選んだ場合はこのモード。 FUSEも同時に更新される。 Arduino IDE のシリアルコンソールを閉じる必要はない。

以下のサブメニュー設定が必須;

  • シリアルポート選択(over UART 書込器の場合)
  • 書込装置選択
  • すべてのFUSE関連

EEPROM対応書込器を使用しているなら以下も選択可能。

  • EEPROM -> Upload ".eep" file
  • BOOTROW -> Upload ".brow" file(DU/EBシリーズのみ)
  • USERROW -> Upload ".urow" file
  • FUSE define -> Upload ".fuse" file (DANGER)

tinyAVR/megaAVR系統では任意の Clock 選択が有効となる。

書込器でのブートローダー単独書込

IDEメニューで選択

ボードメニューでブートローダー有を選んでおり、かつ書込器も併用している場合に有効。 FUSEも同時に更新される。 Arduino IDE のシリアルコンソールは 閉じていなければならない。 ブートローダー無の設定でこれを行うとチップ消去が為される。

以下のサブメニュー設定が必須;

  • Bootloader
  • シリアルポート選択(over UART 書込器の場合)
  • 書込装置選択
  • すべてのFUSE関連

tinyAVR / megaAVR系統では任意の Clock 選択が有効となる。 FUSE変更以後は 20MHz / 16MHz 各系統内の選択のみが FUSE変更なしで可能となる。

ビルド出力確認 Ctrl+Alt+S ⌘+Alt+S

(書込み可能な場合の)スケッチフォルダに、 スケッチがビルドされた HEX ファイル、 ブートローダーも一体に結合された HEX ファイル、 逆アセンブルコードリスト、 EEPROM 初期化用 HEX ファイル BOOTROW 初期化用 HEX ファイル USERROW 初期化用 HEX ファイル FUSE 初期化用 HEX ファイル(スケッチ内で設定内容を記述した場合) が出力される。

スケッチがビルドエラーになる場合は何も出力されない。
スケッチが SDKサンプル直接の場合は(パスが書込禁止なので)出力されない。

ブートローダー

STK500 version 1 プロトコルに基づく Arduino互換ブートローダーを同梱している。 代表的な UART と LED の組み合わせについてはビルド済のバイナリが用意されている。

ブートローダーバイナリのリビルドは、makeコマンド(OS依存)が別途用意できれば本 SDKのみで行える。
0.2.9から独自のファームウェアコードに変更された。

AVR_DU 系統用にはさらに、[euboot (EDBG USB bootloaders) for AVR-DU series] が用意されている。 これは USB-HID/CMSIS-DAP/EDBG プロトコルを介して AVRDUDE 8.0 からは jtag3updi として認識される。 詳細はリンク先を参照のこと。

その他注意事項

以下に上げる完成販売品は本来、それぞれ既定の開発環境がありこの SDK が本来対応すべき範疇のものではないが、搭載された MCU は対応範囲内なので以下のようにすれば使用可能である。

Microchip Curiosity Nano AVR128DB48

この製品使用時のメニュー選択は次のようにしなければならない;

  • ボードメニュー -> MultiX Zinnia SDK [modernAVR] -> AVR DB w/o Bootloader 必須
  • Variant -> 48pin AVR128DB48 (128KiB+16KiB) 必須
  • Console and LED -> UART3 TX:PB0 RX:PB1 LED=PB3 (AVR128DB48 Curiosity Nano) 必須
  • 書込装置選択 -> Curiosity Nano (nEDBG: ATSAMD21E18) 必須

その他の同種製品も同様に、適切なオプションの手動選択が必要。

AVR_EA 系統の制約

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

AVR_EB 系統の制約

  • 初期ロット(A0)は、LOCK.KEY または FUSE.PDICFG を既定値以外に変更すると、以後の UPDI NVMPROG 制御再獲得が(HV制御と無関係に)全面的に困難または不可能となる。これは公開データシートの記述と異なる挙動である。
  • FUSE_SYSCFG0.CRCSRC を既定値の NOCRC 以外に変更してはならない。初期ロット(A0)は回路の不具合により正常な動作をしない。
  • AVRDUDE 8.0 の時点では、AVR32EBxx への書き込みはサポートされていない。(avrdude.conf を修正すれば可能)

AVR_DU 系統の制約

  • AVR64DU28/32 の 初期ロット(A3)は、CPU主クロックを 20MHz以下にしないと動作が保証されないエラッタがある。

更新履歴

  • 0.3.0 (24/11/06)

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

    • 各ファイルの MITライセンスリンク対応
    • libraries から、TPI4AVR, UPDI4AVR submodule を除去(非標準化)
    • AVR-DU系列専用 USB周辺機能に暫定対応
      • <SerialUSB.h> 基本的な USB-SERIAL通信クラス
      • <USB/USB_CDC.h> 上記の下位実装(USB-CDC)
    • EEPROM(.eep)、BOOTROW(.brow)、USERROW(.urow)、FUSE(.fuse) ファイルメニューを追加
  • 0.2.13 (24/05/12)

    • 7.3.0-avr8-gnu-toolchain-240510に更新。
      • AVR16DU14/20/28/32AVR32DU14/20/28/32 対応を追加。
  • 0.2.12 (24/04/29)

    • 動作確認済に AVR64DU28 を追加。
    • boot_dx/exを 3.72 に更新。
  • 0.2.11 (24/04/13)

    • platform.txt のタイプミス修正。
  • 0.2.10 (24/01/11)

    • 7.3.0-avr8-gnu-toolchain-231214に更新。
      • AVR64DU28/32 に暫定対応。
      • 動作確認済に AVR64EA32AVR64EA48AVR16EB32 を追加。
    • Core Modules<api/UarfUART.h>を微修正。AVR_EVSYS=201修正。
    • Core Libraries の修正/追加と応用記述の追加。
      • <ReadUART.h>
      • <UrowNVM.h>
      • <FlashNVM.h>(BOOTROW 対応を追加)
    • Bootloader を FWV=3.71 に更新。
  • 0.2.9 (23/12/11)

    • megaVAR/modernAVRについて、同梱ブートローダー全体を独自のArduino上位互換動作コードに変更。(Optiboot由来ソースコードを除去)
    • 同、CRCSCAN機能用CRC16/32検査値付与。
    • <api/btools.h>crc16_ccitt_false関数を追加。
  • 0.2.8 (23/11/24)

    • 7.3.0-avr8-gnu-toolchain-231113に更新。
  • 0.2.7 (23/10/18)

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

    • 7.2-arduino.1に更新。
      • この版でもserialupdiは現状、AVR_EAを正しく操作できない。
    • 7.3.0-avr8-gnu-toolchain-231004に更新。
      • Atmel.ATautomotive_DFP.2.0.214.atpack (2022-03-03)追加。ATtiny416auto対応。
      • Atmel.AVR-Ex_DFP.2.7.184 (2023-10-02)対応。
  • 0.2.5 (23/10/09)

    • avrdude.conf.updi 記述を avrdude 7.1 準拠に改正
  • 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に更新。
      • <avr/eeprom.h>AVR_EAでも正常動作するよう改善。
  • 0.2.2 (23/05/23)

    • 7.1-arduino.1に更新。
  • 0.2.1 (23/05/08)

    • 7.3.0-avr8-gnu-toolchain-230418に更新。
      • 注意 : この版では未だ<avr/eeprom.h>AVR_EAでは正常動作しない。
    • AVR16EAxxAVR32EAxx をバリアント選択に追加。
    • 添付 avrdude.conf でのUPDI4AVR規定速度を460800に制限。
      • 古いCH3xx用ドライバにて速度上限があるため。(現行最新では改善されている)
  • 0.2.0 (23/04/08)

    • modernAVRAVR_EA対応。
      • 現時点のAVR-LIBCでビルド可能な AVR64EA28/32/48 をバリアント選択に追加。
      • AVR64EA32 を動作検証済表に追加。
      • 専用ブートローダーoptiboot_ex1を追加。
      • <api/FlashNVM.h>AVR_EA対応を追加。
      • 注意 : 現時点のAVR-LIBCでは<avr/eeprom.h>AVR_EAで正常動作しない。

許諾

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

  • 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/