megaAVR 0という新しいAVRシリーズを試してみた。
小さいパッケージなのに、UARTが4本もあるのが気になったのがきっかけ。
登場すると噂のArduino Uno Wifi rev2 にも採用されるらしい。
簡単にデータシートを眺めてみると、アーキテクチャはXmegaシリーズを簡素化し、動作電圧範囲を広げたもののようだ。
CPUの命令セットはAVRxtと新しくなっているが、Xmegaで拡張された一部の命令(DESやUSBで使われる命令)が削除されていて、基本的に今までのATmegaとほぼ同じだ。
コンパイラからは、先に登場した新しいtinyAVR0, tinyAVR1シリーズと共にAVR8Xと呼ばれて区別されている。
CPU周りを見てみると、割り込みレベルなど、今までのクラシックなATmegaで足りないなと思っていたものがかなり強化されていた。 ArduinoAPIを再実装するとしたら便利そうなペリフェラルもだいたい揃っている。
DMAは無いけれど、周辺機能にイベント駆動用の割り込みネットワークが張り巡らされているのがわかる。 できるだけCPUを介在させない使い方がいろいろ提案されているので、アプリケーションノートやマニュアルを読み込むことになる。
ピックアップした特徴
・データメモリ空間(64kB)に統合されたFlashROMとEEPROM
・RAM 6kB ROM 最大48kB (メモリ空間制限のため)
・デバッグ専用の端子 UPDIを搭載
・優先度付きの割り込み(NMIと2レベル)
・ピン単位の割り込み(かなり複雑になった)
・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった)
・豊富な16ビットタイマ(4809では5基)
・16ビット リアルタイムカウンタ(RTC)
・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch)
・内蔵クロックは最高20MHz(PLL)と32kHzの2種類。外部クロックは発振器と時計用水晶のみ
・ADCは10bit 16ch
・内蔵VREF電圧が5種類と多い(0.55V,1.1V,1.5V.2.5V.4.3V)
・カスタムロジック(CCL) LUTを4つ内蔵
データシート P6 |
ピックアップした特徴
・データメモリ空間(64kB)に統合されたFlashROMとEEPROM
・RAM 6kB ROM 最大48kB (メモリ空間制限のため)
・デバッグ専用の端子 UPDIを搭載
・優先度付きの割り込み(NMIと2レベル)
・ピン単位の割り込み(かなり複雑になった)
・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった)
・豊富な16ビットタイマ(4809では5基)
・16ビット リアルタイムカウンタ(RTC)
・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch)
・内蔵クロックは最高20MHz(PLL)と32kHzの2種類。外部クロックは発振器と時計用水晶のみ
・ADCは10bit 16ch
・内蔵VREF電圧が5種類と多い(0.55V,1.1V,1.5V.2.5V.4.3V)
・カスタムロジック(CCL) LUTを4つ内蔵
・シグネチャ領域にシリアル番号(ユニークID)が追加
tinyAVR-0とmegaAVR-0は同じアーキテクチャで、差異はROM/RAM容量、ピン数、ペリフェラルの数だけのようだ。 UPDIにより書き込みポートが1ピンだけになったので、tinyAVRシリーズの少ピンな型番での性能強化が目立っている。
8ビットDACの外部出力やタッチ検出はtinyAVR-1のみに搭載されている。
これだけ積んでいても小ロット単価が328Pより安い。
(2560や644Pなどになると、もう32ビットマイコンのほうが安い)
用意した開発環境
・Atmel Studio 7.0
・PICKIT4
PICKIT4は5月に買っていたが、その頃に比べるとデバイス対応が徐々に進んでいて、最新のユーザーガイドには、各種デバッグインターフェースのピンアサインリストが追加されている。 もちろんUPDIも対応済み。
更にAtmel Studioでもちゃんと使える。 PICは概念になりつつある(?)
実験用基板はQFNパッケージ用で作成。 デバッグ用のGHコネクタにUPDIとUART0、VDDを引き出し、他にLEDと32.768kHzのXT用パターンとSMDの発振器パターンを載せて最小限の構成とした。 リセット端子も、GPIOとして利用できる。マイコン動作に必要な受動部品は3つのバイパスコンデンサのみということになる。
パッケージの外周に1mmピッチの手半田用パターンを設けているので、後で好きなように引き出せる。
試作基板は5x5cm角としては面積が余ったので、いくつかSHコネクタ用のパターンと、SPIROMパターン、PICKIT4の端子変換基板を相乗りさせている。 各パターンは、自前のPCBカッター(HOZAN)で切り出し加工した。
PICKIT4とは、UPDIで接続する。 1-Wireの半二重UARTプロトコルなので、必要な結線はVDD,GND,UPDIの三本だけだ。 (VDDは書き込みの際にターゲット電源を認識する関係で必要だが、電源供給はしてくれない様子)
MPLAB SNAPなど、PICKIT4と同世代の書き込みツールが登場しているけれど、AVRへの書き込みの対応状況はそれぞれ違ったり、機能追加などが頻繁にあるため、MPLABXのバージョン毎にリリースノートを確認しよう。
Atmel Studio上でLチカも完了。 GPIOマクロはやはりXMEGA用なのでちょっと戸惑った。
動作周波数と電圧
メインクロックには水晶発振子を使えないけれど、 内蔵オシレーターを最大で64分周することができる。 最高速度はレジスタで選択するが、16MHzか20MHzを選べる。
tinyAVR-0とmegaAVR-0は同じアーキテクチャで、差異はROM/RAM容量、ピン数、ペリフェラルの数だけのようだ。 UPDIにより書き込みポートが1ピンだけになったので、tinyAVRシリーズの少ピンな型番での性能強化が目立っている。
8ビットDACの外部出力やタッチ検出はtinyAVR-1のみに搭載されている。
試作
物は試しということで、早速石を入手して遊んでみた。これだけ積んでいても小ロット単価が328Pより安い。
(2560や644Pなどになると、もう32ビットマイコンのほうが安い)
用意した開発環境
・Atmel Studio 7.0
・PICKIT4
PICKIT4は5月に買っていたが、その頃に比べるとデバイス対応が徐々に進んでいて、最新のユーザーガイドには、各種デバッグインターフェースのピンアサインリストが追加されている。 もちろんUPDIも対応済み。
更にAtmel Studioでもちゃんと使える。 PICは概念になりつつある(?)
実験用基板はQFNパッケージ用で作成。 デバッグ用のGHコネクタにUPDIとUART0、VDDを引き出し、他にLEDと32.768kHzのXT用パターンとSMDの発振器パターンを載せて最小限の構成とした。 リセット端子も、GPIOとして利用できる。マイコン動作に必要な受動部品は3つのバイパスコンデンサのみということになる。
パッケージの外周に1mmピッチの手半田用パターンを設けているので、後で好きなように引き出せる。
試作基板は5x5cm角としては面積が余ったので、いくつかSHコネクタ用のパターンと、SPIROMパターン、PICKIT4の端子変換基板を相乗りさせている。 各パターンは、自前のPCBカッター(HOZAN)で切り出し加工した。
PICKIT用変換基板 |
UPDI
PICKIT4とは、UPDIで接続する。 1-Wireの半二重UARTプロトコルなので、必要な結線はVDD,GND,UPDIの三本だけだ。 (VDDは書き込みの際にターゲット電源を認識する関係で必要だが、電源供給はしてくれない様子)
MPLAB SNAPなど、PICKIT4と同世代の書き込みツールが登場しているけれど、AVRへの書き込みの対応状況はそれぞれ違ったり、機能追加などが頻繁にあるため、MPLABXのバージョン毎にリリースノートを確認しよう。
Atmel Studio上での読み出し結果 |
Atmel Studio上でLチカも完了。 GPIOマクロはやはりXMEGA用なのでちょっと戸惑った。
動作周波数と電圧
メインクロックには水晶発振子を使えないけれど、 内蔵オシレーターを最大で64分周することができる。 最高速度はレジスタで選択するが、16MHzか20MHzを選べる。
16~20MHzでの動作は動作電圧が4.5V以上でないと動作保証されていない。
3.3V固定で使うなら2分周して10MHz駆動が安全だろう。 5MHz動作なら1.8Vまで保証されるので、Ni-MHx2直の運用にちょうどよい。
最近アップデートされたMPLABX 5.0も、ベータ版ではあるがAVRをプログラミングできるようになった。
XC8もAVR対応が始まっており、2.0からベータ対応が始まっている。ただ、まだXC8 2.0でコンパイルすると、実機に書き込んだ後で挙動がおかしくなる。
プロジェクト設定からAtmel Studioでインストールしたコンパイラを選択した場合は実機が正常に動作するので、しばらくアップデート待ちのようだ。
ATTYNY416 XPLAINED NANO
https://www.microchip.com/Developmenttools/ProductDetails/ATTINY416-XNANO
ATMEGA4809 CURIOSITY NANO
https://www.microchip.com/DevelopmentTools/ProductDetails/DM320115
AVR-IOT WG Development board (ATmega4808)
https://www.microchip.com/developmenttools/ProductDetails/AC164160
いずれもUPDIプログラマとしてmEDBGかnEDBGを搭載している。 XPLAINEDはmEDBGで5V単電源。 CURIOSITY NANOのnEDBGはレベルシフタ、可変電圧供給機能をもっていて、ターゲット電圧をある程度変更できるようになっている。
nEDBGはマスストレージとして認識され、放り込まれたHEXファイルを書き込む機能もある。
AVR-IOTボードはATmega4808、センサ、クリプトチップ、Wifiモジュール(文章によると技適取得済み)が搭載されていて、Google Cloud IoT platformにデータを上げることができる。
追記(2019Oct)
有志によるArduino IDE向けの環境
Atmega328PベースのUPDIプログラマ ”jtag2updi” https://github.com/ElTangas/jtag2updi
megaAVR ”MegaCoreX” https://github.com/MCUdude/MegaCoreX
TinyAVR ”megaTinyCore” https://github.com/SpenceKonde/megaTinyCore
Lチカ |
UARTまわり
ATmega4809はUARTが4基存在し、さらにピンの接続先は代替を含めると2系統まで切り替えて、ピンとバスの競合を抑えることができる。ボーレート生成の仕組みが変わったので、前と比べるとクロック精度をそれほど心配しなくてもよくなった。5MHz動作でも115.2kbpsをやり取りできる。
これを利用して、デバッグ用のポートを基板上のヘッダに1基割り当てておき、別なUART機器をオルタネートピンに割り当てておくことで、UART1基を別の物理接続に利用することもできる。
MPLABでAVR開発を試す
最近アップデートされたMPLABX 5.0も、ベータ版ではあるがAVRをプログラミングできるようになった。
XC8もAVR対応が始まっており、2.0からベータ対応が始まっている。ただ、まだXC8 2.0でコンパイルすると、実機に書き込んだ後で挙動がおかしくなる。
プロジェクト設定からAtmel Studioでインストールしたコンパイラを選択した場合は実機が正常に動作するので、しばらくアップデート待ちのようだ。
公式開発ボード
megaAVR系の開発ボードがいくつか登場している。ATTYNY416 XPLAINED NANO
https://www.microchip.com/Developmenttools/ProductDetails/ATTINY416-XNANO
ATMEGA4809 CURIOSITY NANO
https://www.microchip.com/DevelopmentTools/ProductDetails/DM320115
AVR-IOT WG Development board (ATmega4808)
https://www.microchip.com/developmenttools/ProductDetails/AC164160
いずれもUPDIプログラマとしてmEDBGかnEDBGを搭載している。 XPLAINEDはmEDBGで5V単電源。 CURIOSITY NANOのnEDBGはレベルシフタ、可変電圧供給機能をもっていて、ターゲット電圧をある程度変更できるようになっている。
nEDBGはマスストレージとして認識され、放り込まれたHEXファイルを書き込む機能もある。
AVR-IOTボードはATmega4808、センサ、クリプトチップ、Wifiモジュール(文章によると技適取得済み)が搭載されていて、Google Cloud IoT platformにデータを上げることができる。
追記(2019Oct)
有志によるArduino IDE向けの環境
Atmega328PベースのUPDIプログラマ ”jtag2updi” https://github.com/ElTangas/jtag2updi
megaAVR ”MegaCoreX” https://github.com/MCUdude/MegaCoreX
TinyAVR ”megaTinyCore” https://github.com/SpenceKonde/megaTinyCore