概要
- 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つの信号線があればいいので、これくらいのサイズがちょうどいいし国内のショップからも安価に入手できる(円安や半導体不足で厳しくなっているが)。
XIAOはマイコンやLDOなどが金属製のカバーで隠されているが、QTPyは丸見えになっているから、USBのホスト側を保護するためのVBUS – +5Vの間のショットキーダイオードをバイパスしたり、消費電流を減らすためにLDOを外したりすることも可能だろう。
また、hoboNicolaのプログラムのようなUSBデバイスを作っていると、ちょっとしたミスでUSBデバイスがホスト側から認識されなくなったりする。そういうときはマイコンのリセットを使ってブートローダーモードに入れてやる必要があるが、小さいとはいえリセット用のボタンスイッチが用意されているQTPyの方が楽だった。XIAOの場合、ピンセットの先で小さなパッドをダブルタップするのはちょっと手間取る。
uf2ブートローダー
いずれのボードにも、出荷時からuf2ブートローダーが書き込まれているので、ブートローダーモードに入ると以下のような内容のドライブが出現する。
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のソケットに差すと以下のようになる。
XIAOやQTPyは差し替えることができるよう、ピンソケットにセットする。写真ではUSB-シリアル変換用のAE-FT234Xも見えているが、これも基板に立てたピンソケットにセットしている。
この配線図の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をセットするためのソケットも用意することにした。
表側は、XIAOやQTPyおよびAE-FT234XをセットするためのピンソケットとLED(および抵抗)。
裏側は、改造したminiUHSに差すためのピンヘッダのみ。最終的には、アセテート絶縁テープで配線を覆い隠した。
ユニバーサル基板は、秋月電子のフリスクケースサイズのものがちょうどいい大きさだった。miniUHSと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ライブラリの話になる予定です。