LattePanda AlphaのUSB

シングルボードコンピュータLattePanda AlphaにmacOSをインストールした記事を書きました。その続編です。今回は、USB環境を整えました。

USBポートの名前を調べる

LattePand Alphaには3個のUSB 3 Type-Aコネクタと、1個のUSB 3 Type-Cコネクタがついています。USB 3 Type-Cコネクタは電源供給に使っていますが、こういうタイプの変換器を使ってみたらUSB 3として機能していることが確認できました。

BIOS設定画面では、USB 3が4個あることになっていました。それぞれをenable/disableできます。

どうやらType-CのコネクタにはUSB 3が一本あって(Type-Cの本来の規格ではUSB 3は2本可能です)、それがPort1という名前になっているようです。ということは明らかにPort2, 3, 4が3個のType-Aのどれかに相当するはずです。BIOSで一つづつdisableにして、どのコネクタが使えなくなるのか確認しました。その結果、

上のよう名前が割り当てられていることがわかりました。以下、この名前でコネクタを区別していきます。

macOSのUSB個数制限

こちらで説明したようにEl Capitan以来のmacOSには、使えるUSBが最大15ポートであるという謎の制限があります。その制限に該当してしまうと、USBコネクタが使えなくなります。回避の方法はいくつかありますが、一番簡単で、副作用がなくて、macOSのアップデートに影響されない方法は、

  • USBInjectAll.kextを使用して
  • config.plistのBoot Argumentsで除外するポートを記述する

という方法です。これを行うためには、LattePanda Alphaのどのポート番号が使いたいUSBコネクタに対応しているのかを特定する必要があります。

Lattepanda AlphaのUSB構成

無対策で起動

まずは、USB個数制限に対してなんの対策もせずにmacOSを起動してみました。IORegistryExplorer.appなどのツールを使うと、macOSから見たハードウェア構成がわかります。IORegistryExplorer.appはAppleの開発サイトからダウンロードできます。

ここからAppleIDでログインして、Additional Toolsで検索して出てくるツールをダウンロードします。検索結果は複数出てきますが、最新のものをダウンロードすれば良いです。その中にIORegistryExplorer.appがあります。

IORegistryExplorerが起動したら、xhcで検索します。するとUSBポート一覧が出てきます。15個制限がかかっているので15個しか現れません。HSはHigh Speedの略でUSB 2のポートで、SSはSuper Speedの略でUSB 3のポートです。USRは何か不明ですが、SSよりも優先的に機能するポートのようですので、何か重要なものなのかもしれません。とりあえずここでは無視しました。

それぞれのポートをクリックすると右のエリアに詳細が出ます。ここで、port-statusが0の値になっているポートは未使用のポートで、0以外は現在使用中のポートです。

LattePanda AlphaについているPort1, 2, 3, 4にそれぞれUSB 2.0のデバイス(ここではLogitechの無線キーボード・マウス用USBドングルを使いました)を挿して変化を見ていきます。その結果、

  • HS03 USB3 Port2のUSB 2.0
  • HS05 USB3 Port3のUSB 2.0
  • HS07 USB3 Poer4のUSB 2.0

であることがわかりました。Type-C(つまりPort1)には規格上はUSB 3.0が2本あり、それぞれにUSB 2.0が付属しているはずですが、反応しませんでした。テストにはApple社のMacBook用の純正Type-C –> display, USB, Type-C 変換器を使いました。この変換器の中でUSB 2.0が配線されていないのかもしれませんし、元々LattePandaで配線されていないのかもしれません。またこの変換機にはUSB Type-Aが1個しか付いていないので、もう一つのUSBも存在する可能性はあります。今回はType-Cは電源供給にしか使用するつもりがなかったので、これ以上は調べませんでした。

無反応のHSポートを除外する

LattePand AlphaのUSBポートにLogitech無線ドングルを挿しても反応しなかったポートは

  • HS04
  • HS05
  • HS08
  • HS10

でした。不要な様子ですのでこれらを除外します。こちらの方法を使います。つまりUSBInjectAll.kextを使った上で、config.plistのBootセクションに以下を書きます。

<key>Boot</key>
<dict>
<key>Arguments</key>
<string>uia_exclude=HS04;HS05;HS08;HS10</string>

他に必要なArgumentsがあればスペースで区切って列挙しておけば良いです。また、Cloverの起動画面でOptionを選べば一時的にArgumentsを書き換えられます。一時的な試験の場合は、起動画面で書き換えるのが便利です。この結果、

このようになりました。優先的に選択されるHSのポートが減ったので、SSが増えました。結果としてSS04, SS05, SS06が増え、総数は全部で14になりました。15以下ですので、これ以上SSは無いと思われます。この状態では、4個のポートを除外しましたが、3個でも良いようです。

LattePanda AlphaのUSB構成

HS01, 02, 09は、USBコネクタの接続状態に関わらず常に使用中になっています。内部で使用されているようです。uia_excludeオプションで一つづつ除外して、何が動かなくなるかを確認しました。またSSポートもUSB 3のUSBメモリを挿して、動作を確認しました。その結果、SS01, 02, 03, 04がLattePanda AlphaのUSB 3コネクタに接続していて、SS05, 06は使われている様子はありませんでした。ということで、LattePanda AlphaのUSB構成が以下のようであることがわかりました。

  • HS01 システムが使用中(搭載無線チップのBluetooth)
  • HS02 システムが使用中(不明のUSBシリアル。M.2 E-keyソケット用?)
  • HS03 USB3 Port2のUSB 2.0
  • HS04 未使用?
  • HS05 USB3 Port3のUSB 2.0
  • HS06 未使用?
  • HS07 USB3 Poer4のUSB 2.0
  • HS08 未使用?
  • HS09 システムが使用中(Arduinoに接続)
  • HS10 未使用?
  • SS01 USB3 Port1 (Type-C)
  • SS02 USB3 Port3
  • SS03 USB3 Port4
  • SS04 USB3 Port2
  • SS05 未使用?
  • SS06 未使用?

HS02については確認しませんでしたが、M.2 E-keyにはUSB 2.0が出ていて、Bluetoothチップなどで使用します。なのでおそらくこれはM.2ソケットに接続されていると思います。

除外するUSBポート

何も除外しないと、最初に示したように、優先度の高い10個のHSと謎の2個のUSRから使用されて、SSは3個しか機能しません。すると、SS04が機能しないのでPort2のUSB 3が使えません。HSを1個以上除外すれば、SS04まで使用できることになります。そこで、

uia_exclude=HS10;SS05;SS06

をArgumentsに指定して、必要なUSBポートが全て動くようにしました。除外リストにSS05, SS06を含めなくても、15個制限に引っかかって除外されるので同じですが、覚書の意味から記載しました。今後、USBがらみで動作不良になるようでしたら、除外リストを再検討することにします。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です