USB 3.0対応PCだと、一度に接続できる機器の台数が少なくなるようだ

USB 3.0に対応したPC(具体的にはASUS Chromebox)に、USB 3.0対応の13ポートHub(Anker AH232)を接続して、何台スマホを接続できるか試している。何でこんな事をしているかと言えば、Android SDKのadbを使って、一度に多くのスマートフォンにアプリをインストールしたいのだ。

最近の機種だし、余裕でたくさん接続できるだろう…と思ったが、意外や意外、10台くらいスマートフォンを接続したところで “Not enough host controller resources for new device state.”というエラーが出て、これ以上は認識しなくなってしまった。

カーネルのソースを読むと、当該エラーはUSBコントローラーがリソース不足エラーを返してきた際に発生するようだ。StackOverflow等で検索すると同様の質問が一杯出てくるが、解決策は明らかではないようだ。

検索してなんとなく調べてみたことをまとめると、以下のような状況だった。

  1. USB 3.0コントローラー(xHCI)の問題らしい
  2. Windows (MS Sufrace)でも同じ現象が発生している(リンク
  3. BIOSでUSB 3.0を無効にできる機種ならば、USB 3.0を無効にすることで接続機器数の問題を回避できる場合があるらしい
  4. Linuxの場合はxHCIを無効にしたカーネルを使えば回避できる場合があるらしい

上記の通り、ハードの制限に起因する問題のようだったので、手元のMacbook Pro(USB 3.0対応)で試したところ、13ポートに接続されたスマートフォンを全部認識できた。どうやらMacはxHCIを使いながらも違う制御をしているようだ。

ChromeboxはBIOSで設定する機能がないので、3.のようにBIOSで無効にすることはできない。試しにxhciを無効にしたカーネルをコンパイルしてブートしてみたが、USB自体を認識しなくなってしまった。

八方塞がり感がある中で、試しにUSB 3.0対応ハブにUSB 2.0ケーブルで接続したところ、スマートフォンを11台接続できた。どうやらハブにUSB 2.0ケーブルでつなぐことで、xHCIのリソースに余裕ができるようだ。とはいえ、これ以上は無理で、ハブを分けたりいろいろ試したが、これが限界のようだ。

というわけで、ASUS Chromebox+Ubuntu Linuxの組み合わせだと、同時に接続できるUSB機器は、USB 2.0接続であっても11台程度のようだ。lsusbで見ると、内部でBluetoothアダプタ等の接続にもUSBが使われているようなので、別の機種であればもう少し接続台数は増えるかもしれない。

いずれにせよ、当初のもくろみが崩れてしまい、多少困ったことになった。どうやらxHCI以前の、EHCI等であればもっと接続できるようなので、そちらを検討すべきかもしれない。