📝

Pro Microとそのバリエーション

2022/05/07に公開

日本の自作キーボードキットでよく使われるいわゆるPro Micro及びその互換機はバリエーションがとても豊富です。本記事ではPro Microにどのようなバリエーションがあるのか、なぜそのようなバリエーションがあるのかをできる限りで解説します。バリエーションの背後にある事情を把握することで、いざ自分が購入したPro Micro及び互換機がどのような特徴を持っているのか、一般的なモノとどのような差があるのか理解でき、何かしらのトラブルに遭遇した際に自身で解決できる可能性が高まります。

オリジナルPro Microとは

そもそもPro Microとは狭義にはSparkfunのPro Micro - 5V/16MHzのことを指します。このオリジナルPro Microは回路図がオープンソースとして公開されており誰でも利用できるため、フットプリント≒ピン配置・内容が同じ互換機が多く作られるに至りました。現在、安価に購入可能な多くの互換機はこうして生まれたわけです。以下、このオリジナルPro Microのことは単にオリジナルと記述します。

オリジナルとはいえ、その元ネタとしてはArduino LeonardArduino Microが挙げられます。これらの共通点はMCUとしてAVR(現Microchip社)のATmega32U4を用いたことで、オリジナル、互換機、Arduino Leonardo、Arduino Microとソフトウェア的にはほぼ互換性があります。

またSparkfunの純正Pro Microシリーズにもいくつかのバリエーションが存在します。購入の際にはこれらを混同しないように注意する必要があります。

Pro Microで採用されているATmega32U4について、ここで覚えておかなければならないことは、ATmega32U4の最大動作クロックは駆動電圧に依存するということです。以下の図はATmega32U4のデータシートから抜粋した駆動電圧と(動作が保証される)最大動作クロックの関係を示したグラフです。16MHz動作を保証するには最低4.5Vが必要なこと、最低2.7Vが供給されれば8MHzで駆動できることが読み取れます。

オリジナルの5V/16MHz版と3.3V/8MHz版の違いは駆動電圧の違いと動作周波数の違いです。このうち駆動電圧の切り替えは、以下で示すオリジナルの回路図においてはジャンパ(SJ1)1つで実現されています。動作周波数は、実機での動作確認はしていませんが、ソフトウェア的に書き換え可能なヒューズビットによって行っていると推定されます。

つまりSJ1がハンダでショートしていれば、電圧を3.3Vに下げるレギュレーターをバイパスして、USBの電源である5VがほぼそのままATmega32U4に供給される、というのがオリジナルPro Microの動作になります。次の写真は5V版(左)と3.3V版(右)のPro Microの比較です。双方の左上のジャンパの扱いの違いが見て取れます。

互換機の主な相違ポイント≒バリエーション

オリジナルがどういうものかおおよそ理解したところで、互換機がオリジナルとは異なる点を上げていきましょう。細かいところを上げるとキリがありませんので、自作キーボードで使うにあたり何かしら関りの深い、以下の3点に絞って解説します。

  • USBレセプタクルの形状
  • 駆動電圧
  • ブートローダーの種類

USBレセプタクルの形状

USBレセプタクルの形状のバリエーションには大きく分けてmicro-Bとtype-Cの2つがあります。type-Cレセプタクルを採用したものは比較的最近登場したこともあり、おおよそ似たような部品が使われており、特段の懸念事項はありませんが、強いてあげればmicro-Bに比べて背が高いため、2.5mmではなく3.5mmのコンスルーが必要ということが挙げられます。

micro-Bレセプタクルはさらに表面実装のものと、スルーホールのものという2種類があります。表面実装のものはいわゆる「モゲマイクロ」と言われる、レセプタクルが基板から剥離する事故を起こしやすいと考えられています。一方でスルーホールのものは表面実装のものに比べモゲ耐性が高く丈夫だと考えられています。

駆動電圧

オリジナルの回路図で見た通り、5Vでの駆動にはレギュレーターをバイパスするハンダジャンパが必要です。しかし多くの互換機ではこのハンダジャンパは作られていません。それどころかジャンパがされている互換機を私はみたことがありません。にも関わらず多くの互換機は4.6V程度で動作しています。

これはおそらくコストカットの一環で、オリジナルの3.3Vレギュレーターを5Vのものに変更し、ハンダジャンパを省略していると推測されます。レギュレーターの入力電圧と出力電圧が等しいため、レギュレーターのドロップアウト電圧(おおよそ0.4V程度であることが多い)を引いて、4.6Vの駆動になっていると考えられます。

このような互換機では、多くのLEDを点灯させたことによる消費電力の増大や、セルフパワーのUSBハブに繋いだことによる入力電流の減少によって、駆動電圧が大幅に下がります。私の観測では、LED点灯及びセルフパワーUSBハブの利用で、3.6V程度まで駆動電圧が下がることを確認しました。このような電圧では16MHzで動くことは保証できず、また何かしらの誤動作をすることも考えられます。

しかしシンプルな多くの自作キーボードでは、この駆動電圧の低下による誤作動を私は見たことはありません。ATmega32U4というMCUの堅牢さが垣間見えます。

type-C + 3.3V駆動の互換機の存在

多くの互換機が5Vレギュレーターを搭載して4.6V程度で動作していたのですが、最近になりtype-Cレセプタクルを搭載した一部の互換機が、ハンダジャンパなしで3.3Vで駆動していることがわかりました。おそらくオリジナルの設計に従い3.3Vのレギュレーターを搭載し、ハンダジャンパを省略したものであると考えられます。手元のものはハンダジャンパを施したところ、安定して5Vで動作することが確認できました。

私が所有・計測した範囲では、部品実装の無い裏面にATmega32U4というシルク印刷があるものは3.3Vレギュレーターとなっていました。見分ける際の参考になるとは思いますが、実際にテスターでGNDとVCC間の電圧を測った方が良いでしょう。

3.3V駆動版には、前述のような消費電力の増大や入力電流の現象に伴う、駆動電圧の低下は観測されませんでした。レギュレーターに十分な電圧(5V)が供給されているので納得です。また実際の動作クロックは、まだ計測していないため8MHz近くまで下がっているのかは不明です。

(2022/07/30 追記) 3.3V/16MHz版の不具合

後日、3.3V/16MHz版でファームを書き込めないとの報告をいただきました。気温上昇など条件の違いにより、(Catalina)ブートローダーが正常動作できなくなっていると推定されます。その報告いただいたケースにおいては、前述のハンダジャンパを行うことで正常に書けるようになったそうです。

以下に3.3V/16MHz版の可能性がある品物を挙げておきます。

ブートローダーの種類

Pro MicroのMCUであるATmega32U4には、ファームウェアとブートローダーの2種類のソフトウェアが書き込まれています。ファームウェアというのは例えば自作キーボードごとのソフトウェアで、普通のPCでいうところのアプリケーションに相当します。一方でブートローダーというのはファームウェアの書き換えなどを行うソフトウェアで、PCで言うところのOSに相当します。

Pro Micro互換機に搭載されているブートローダーには、いまのところ以下の4種類があることを観測しています。

  • オリジナルPro Microのブートローダー - 認識名 Pro Micro 5V
  • Arduino Leonardoのブートローダー - 認識名 Arduino Leonardo
  • Arduino Microのブートローダー - 認識名 Arduino Micro ほぼLeonardoと同じもの
  • DFUブートローダー

ブートローダーの動作としてはこれらはほぼ同じで、既にファームウェアが書かれていたらそれを実行し、そうでなければavrdudeという書き込みソフトウェアを用いたファームウェアの書き込み待ちになる、というものです。またリセットボタンを押した際に書き込み待ちになるのもこのブートローダーの仕事です。

ファームウェアだけでなくブートローダーも書き換えることが可能ですが、もう1台Pro Micro互換機(正確にはAVR ISP)が必要なこともあり話が脱線するので本記事では省略します。参考資料: Arduino ブートローダーを書き込む (AVR)

以下ではこれらのブートローダーの違いを見ていきましょう。

オリジナルのPro Microブートローダー

オリジナルのPro MicroのブートローダーはGitHubで公開されています。特徴としては、ファームウェアの書き込みをするにはリセットボタンを素早く2回押す必要がある、という点が挙げられます。

なお1回だけだと文字通りデバイスリセットがかかります。一般的に出回っている他のブートローダーとはこの動作が異なり、自作キーボードのビルドガイドに書かれがちな説明とは食い違う可能性があり、留意が必要です。なお、オリジナルのブートローダーが書かれた互換機を、私はまだ1,2個しか見たことがありません。

ファームウェアを書き込んでいない状態でPCに接続するとPro Micro 5Vというデバイス名で認識されます。

Arduino Leonardo及びMicroのブートローダー

ArduinoのブートローダーもGitHubで公開されています。リセットボタンを1回押すだけでファームウェアの書き込みモードになります。多くの互換機には、オリジナルではなくこちらのブートローダーが書かれていることが多いようです。そのためかビルドガイドに書かれる説明は、多くがArduinoのブートローダーを対象としています。

ファームウェアを書き込んでいない状態でPCに接続するとArduino LeonardoもしくはArduino Microというデバイス名で認識されます。

DFUブートローダー

DFUブートローダーは、ATmega32U4の出荷時に書き込まれている、とされているブートローダーです。基本的な動作はArduinoのブートローダーと同様ですが、ファームウェアの書き込みに使うプログラムはdfu-programmerとなります。またかつてAliExpressで購入したATmega32U4に、DFUブートローダーが書き込まれてないことがありました。もしかしたら正規品ではないかもしれないので気を付けましょう。

私はDFUブートローダーのままの互換機を見たことがなかったのですが、遊舎工房などで取り扱われていたElite-CがDFUブートローダーであることを知りました。

ファームウェアを書き込んでいない状態でPCに接続するとATm32U4DFUというデバイス名で認識されます。

まとめ

Pro Microと互換機には、さまざまなポイントでバリエーションが存在することを説明しました。とりわけ自作キーボードにおける利用においてフォーカスすべき、USBレセプタクルの形状、駆動電圧、そしてブートローダーの違いについて解説しました。Pro Microおよび互換機を用いてトラブルにあった際には、これらのポイントを抑えると解決の近道になる可能性があります。

もちろんここで紹介した以外のバリエーションもありますが、それはちょっとマニアックすぎて説明が困難(VCCがUVCCに直接入力され、常にUSB接続があると誤解するとか)ということもあり省略しました。気になるようでしたら以下の記事も参照してください。

https://zenn.dev/koron/articles/7cdfd5382f9ee3

Discussion