2018/08/24

ATmega4809(megaAVR0)を試す



megaAVR 0という新しいAVRシリーズを試してみた。
 小さいパッケージなのに、UARTが4本もあるのが気になったのがきっかけ。
登場すると噂のArduino Uno Wifi rev2 にも採用されるらしい。

 簡単にデータシートを眺めてみると、アーキテクチャはXmegaシリーズを8ビットMCUとして簡素化し、動作電圧範囲を広げたもののようだ。
 コンパイラからは、先に登場した新しいtinyAVR0, tinyAVR1シリーズと共にAVR8Xと呼ばれて区別されている。
 CPU周りを見てみると、割り込みレベルなど、今までのクラシックなATmegaで足りないと思っていたものがかなり強化されていた。 ArduinoAPIを再実装するとしたら便利そうなペリフェラルもだいたい揃っている。

データシート P6
 DMAは無いけれど、周辺機能にイベント駆動用の割り込みネットワークが張り巡らされているのがわかる。  できるだけCPUを介在させない使い方がいろいろ提案されているので、アプリケーションノートやマニュアルを読み込むことになる。

ピックアップした特徴
・データメモリ空間(64kB)に統合されたFlashROMとEEPROM
・RAM 6kB ROM 最大48kB (メモリ空間制限のため)
・デバッグ専用の端子 UPDIを搭載
・優先度付きの割り込み(NMIと2レベル)
・ピン単位の割り込み(かなり複雑になった)
・リセットコントローラ(ソフトウェアリセット用レジスタが実装され、リセット原因が何だったかもリセット後に読み出せるようになった)
・豊富な16ビットタイマ(4809では5基)
・16ビット リアルタイムカウンタ(RTC)
・豊富な非同期シリアル/同期シリアル(USART 4ch、SPI 1ch,TWI 1ch)
・内蔵クロックは20MHzと32kHzの2種類。外部クロックは発振器と時計用水晶のみ
・ADCは10bit 16ch
・内蔵VREF電圧が5種類と多い(0.55V,1.1V,1.5V.2.5V.4.3V)
・カスタムロジック(CCL) LUTを4つ内蔵

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用なのでちょっと戸惑った。

動作周波数と電圧

 メインクロックには水晶発振子を使えないけれど、内蔵の20MHzオシレーターを最大で64分周することができる。
 20MHz動作は動作電圧が4.5V以上でないとデータシート上は保証されていないため、3.3V固定で使うなら2分周して実質10MHz駆動となる。
 5MHz動作なら1.8Vまで保証されているので、乾電池運用にちょうどよいだろう。

Lチカ

UARTまわり

ATmega4809はUARTが4基存在し、さらにピンの接続先は代替を含めると2系統まで切り替えて、ピンとバスの競合を抑えることができる。ボーレート生成の仕組みが変わったので、前と比べるとクロック精度をそれほど心配しなくてもよくなった。

 これを利用して、デバッグ用のポートを基板上のヘッダに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はレベルシフタ、可変電圧供給機能をもっていて、ターゲット電圧をある程度変更できるようになっている。
 AVR-IOTボードはまだ持ってないけれど、AVRのほか、センサ、クリプトチップ、Wifiモジュール(文章によると技適取得済み)が搭載されていて、Google Cloud IoT platformにデータを上げることができるようだ。