samd21用hoboNicolaアダプタの作成

hoboNicola XIAOアダプター

概要

  • SparkFun Pro Micro 3.3V/8MHz版 (ATMega32u4)とmini USB Host Shield  (USBHostコントローラ MAX3421E)を組み合わせたUSBキーボード版の hoboNicolaアダプタのマイコン側を、ATSAMD21を使ったArduinoボードでも使えるようにする。
  • SAMD21を使った開発ボードとして Seeeduino XIAO-m0 Adafruit QT Py SAMD21 を使えるようにした(これらはピン互換になっている)。そして、以前に作ったPro Micro + miniUHS の2階建て構成を流用できるよう、XIAO-m0やQTPy-m0 を接続するための変換基板を手作りした。
  • 今回は、XIAO-m0とQT Py SAMD21 の話と、変換基板の話が中心でhoboNicolaライブラリの更新内容については次回以降の投稿になる予定です。

XIAO-m0とQT Py SAMD21

Seeeduino XIAO-m0とQT Py SAMD21 はいずれもコンパクトかつ安価なArduino開発ボードで、マイコン(SoC)はAtmel(Microchip社) のATSAMD21が載っている。SAMD21は48MHz動作の ARM® Cortex®-m0+ を中心としたオンチップシステムで、内蔵メモリも周辺I/Oデバイスもいままで使ってきたAVRマイコンよりいろいろな面で高性能だろう。

SAMD21を使ったマイコンボードは以前から各種発売されているのだけど、hoboNicolaの場合マイコンボードとmini USB Host Shield (以下、miniUHS) 間の接続には5つの信号線があればいいので、これくらいのサイズがちょうどいいし国内のショップからも安価に入手できる(円安や半導体不足で厳しくなっているが)。

Seeeduino XIAO-m0 裏面にはSWD, SWCLOCK, RESET などのパッドがある。
Adafruit QTPy-samd21 裏面にはSWD/SWCおよびRESETパッドの他、SPI Flashチップを接続できる。

XIAOはマイコンやLDOなどが金属製のカバーで隠されているが、QTPyは丸見えになっているから、USBのホスト側を保護するためのVBUS – +5Vの間のショットキーダイオードをバイパスしたり、消費電流を減らすためにLDOを外したりすることも可能だろう。

また、hoboNicolaのプログラムのようなUSBデバイスを作っていると、ちょっとしたミスでUSBデバイスがホスト側から認識されなくなったりする。そういうときはマイコンのリセットを使ってブートローダーモードに入れてやる必要があるが、小さいとはいえリセット用のボタンスイッチが用意されているQTPyの方が楽だった。XIAOの場合、ピンセットの先で小さなパッドをダブルタップするのはちょっと手間取る。

uf2ブートローダー

いずれのボードにも、出荷時からuf2ブートローダーが書き込まれているので、ブートローダーモードに入ると以下のような内容のドライブが出現する。

uf2ドライブ (QTPy m0)

uf2とは、USB Flashing Format の略でMicrosoft社が開発したストレージデバイスを使ったファームウェア書込み用フォーマットとのこと。詳細は、https://github.com/microsoft/uf2 を参照。

このドライブにビルド済のスケッチをuf2形式に変換してから放り込んでやると、USB経由で書き込んだのと同じように内部のフラッシュにプログラムが書き込まれて利用可能状態になる(らしい)。このあたりのはなしは、Seeed stduioやAdafruitのホームページで紹介されているが、Arduino IDEからの書き込みで困ってないので、まだ一度もやったことがない。

XIAOとQTPyの相違について

ピン互換なので、ふつうにArduinoの使い方をする分にはオンボードLEDの相違 (XIAOは3本のI/Oポートに3つのLEDが接続しているが、QTPyはマイコン内蔵のRGBLEDが1つ) 程度しか注意点はなさそうだが、これらのボードにはピン数の異なるSAMD21が載っていてピン接続が異なるので、細かいことをやるには注意が必要だった。

XIAOやQTPyの外部接続ピンと、SAMD21内部のポートピンやSERCOMの関係をSAMD21のデータシートや各ボードのvariant.cpp に基づいて調べたところ、以下のようになっているようだった。

項目 QTPy XIAO 備考
MCU ATSAMD21-E18-A ATSAMD21-G18-A  
コアクロック 48MHz 48MHz
LDO +3.3V / 500mA +3.3V / 250mA
外部
オシレータ
無し
(-DCRYSTALLESS)
有り
32.768kHz
RTCで使う
PON LED 無し 有り 電源インジケータ
serial_function
port_pin no
SAMD sercom and port SAMD sercom and port  
D0 / A0 PIN_PA2 PIN_PA2
D1 / A1 PIN_PA3 PIN_PA4
D2 / A2 PIN_PA4 PIN_PA10
D3 / A3 PIN_PA5 PIN_PA11
SDA
D4 / A4
SERCOM1
PIN_PA16
SERCOM2
PIN_PA8
I2C
SCL
D5 / A5
SERCOM1
PIN_PA17
SERCOM2
PIN_PA9
I2C
TX
D6 / A6
SERCOM0 (ALT)
PIN_PA6
SERCOM4
PIN_PB8
UART
Serial1
RX
D7 / A7
SERCOM0 (ALT)
PIN_PA7
SERCOM4
PIN_PB9
UART
Serial1
SCK
D8 / A8
SERCOM2 (ALT)
PIN_PA11
SERCOM0
PIN_PA7
SPI
MISO
D9 / A9
SERCOM2 (ALT)
PIN_PA9
SERCOM0
PIN_PA5
SPI
MOSI
D10 / A10
SERCOM2 (ALT)
PIN_PA10
SERCOM0
PIN_PA6
SPI
D11 PIN_PA18
(PIN_NEOPIXEL)
PIN_PA19
(PIN_LED_TXL)
(PIN_LED3)
オンボードLED
D12 PIN_PA15
(PIN_NEOPIXEL_VCC)
PIN_PA18
(PIN_LED_RXL)
(PIN_LED2)
オンボードLED
D13 PIN_PA17
(接続無し)
PIN_PA17
(PIN_LED)
オンボードLED

この表は、たとえばArduinoでのポートピン(D0/A0など)は、各ボード上のSAMD21のどのピンに接続されているのかということと、I2CやSPIといったシリアル通信機能は、SAMD21のどのSERCOMモジュールを使うようになっているのかを示している。

SERCOM (Serial Communication  Module) とは、各種シリアルインタフェース(I2C、SPI、UART) を実現するための機能を備えた内部機能ブロックで、SAMD21は6つのSERCOMモジュールを備えている。

SAMD21のポートピン接続についてはUSB Host Shield LibraryをXIAOとQTPyで利用するため、SERCOMについては消費電流を節約するにあたって停止できるモジュールを見つけるために調査した。

XIAOとminiUHSの接続

前置きはこれくらいにして、今回は以下のような回路(というか配線)を作った。QTPyを載せてminiUHSのソケットに差すと以下のようになる。

hoboNicola XIAOアダプター
hoboNicola XIAOアダプター

XIAOやQTPyは差し替えることができるよう、ピンソケットにセットする。写真ではUSB-シリアル変換用のAE-FT234Xも見えているが、これも基板に立てたピンソケットにセットしている。

XIAO – miniUHS改の接続用変換基板

この配線図のminiUHS側は、以下のような改造を実施してあることを前提にしている。

miniUHS

miniUHSの改造内容はPro Microと2階建て構成とするためのもので、以下の2点である。

  • USB-AレセプタクルのVBUSにVCC(+3.3V)ではなく、+5Vを与える。
  • MAX3421EのRESETピンへの接続を変更する (Pro MicroのRESETピンに合わせる)。

2番めのRESETピンの変更を前提としているので、今回の変換基板では、(RESET)をVCCに直結している。

変換基板について

変換基板は、miniUHSのSPI関係のピンとINTピンを、XIAOやQTPyに接続することが主目的だが、QTPyはRGBLED(NeoPixel) しか載っておらずXIAOのオンボードLEDと等価にするためLEDも3つ載せた。XIAO-m0にはオンボードLEDが3つあるのでXIAOしか使わないならば不要になる。

また、XIAOやQTPyのRX/TXを利用して、シリアルデバッグ出力を行えるよう、秋月のAE-FT234Xをセットするためのソケットも用意することにした。

hoboNicola XIAOアダプター

表側は、XIAOやQTPyおよびAE-FT234XをセットするためのピンソケットとLED(および抵抗)。

hoboNicola XIAOアダプター

裏側は、改造したminiUHSに差すためのピンヘッダのみ。最終的には、アセテート絶縁テープで配線を覆い隠した。

ユニバーサル基板は、秋月電子のフリスクケースサイズのものがちょうどいい大きさだった。miniUHSとXIAOのサイズ感は以下のような感じになる。

hoboNicola XIAOアダプター

直接ハンダ付けしてしまうならば、フリスクケースをちょっと加工すると収まりがよさそうである。

XIAOとQTPyのバリエーション

hoboNicolaでこれらのマイコンボードを利用することにしたのは、同じサイズ、ピン構成で異なるマイコンを使ったバリエーションが存在することも大きなポイントだった。

以下のようなバリエーション製品がすでに発売されている。いずれもUSBコントローラを内蔵したマイコンを使っていて、Type-Cレセプタクルを備えている。

SoC Seeed Studio
XIAO
Adafruit
QT Py
備考
SAMD21 XIAO-m0 QT Py SAMD21 今回使う
RP2040 XIAO-RP2040 QT Py RP2040 発売中
nRF52840 XIAO-BLE Bluetooth LE
ESP32-S2 QT Py ESP32-S2 WiFi のみ
ESP32-C3 QT Py ESP32-C3 WiFi
Bluetooth LE
RISC-V

hoboNicola用としては、RP2040とnRF52840が載ってるボードを使えるようにしたいところ。Bluetoothを使う製品については、国内で安心して使うためにTELECマークが付いてからということになる。ESP32シリーズにはあまり興味を惹かれないのだが、すでにnRF52840コアのISP1807用の実装はできているので、XIAO-BLEを国内のお店から入手できればhoboNicolaで利用するのは容易なんじゃなかろうか。

きょうのまとめ

  • hoboNicolaアダプタの構成として SparkFun Pro Micro(3.3V動作) とminiUHSの組み合わせを基本としてきたが、3.3V/8MHz版のPro Microの入手性があまり芳しくないようだ。また、Arduino LeonardoとUSB Host Shield(ともに+5V動作)を組み合わせてもよいのだが、上に書いたように今後もいろいろ遊べそうで安価なXIAO/QTPyを使うことにした。
  • 入手性という面では、miniUHSやMAX3421E自体も状況がよくないし、少ない在庫と円安もあってか値段もどんどん上がっているようである。去年の秋くらいからAliexpressでたまに安いのがあると発注してみたりしたが、「実は在庫がありません」とか、1ヶ月経っても出荷しないくせに「ちゃんと送ってますよ」とか言ってくる店が数軒あったりした。トラッキングできない輸送手段は安くても選んではダメです。
  • SAMD21、nRF52は、TinyUSBというUSBデバイスを作るためのライブラリが利用できる。hoboNicolaでも、これらのマイコン用にはArduino版のTinyUSBライブラリ (  https://github.com/adafruit/Adafruit_TinyUSB_Arduino )を利用することにした。8ビットのAVRマイコンは対象外になっているので、ATMega32u4版は従来と同様のArduino USBライブラリを利用することにし、2つのライブラリをラップして共通化するようにした。
  • 次回はsamd21とnrf52(ISP1807)で使えるhoboNicolaライブラリの話になる予定です。