into the void

ソフトウェアに関する雑多な調査日記

Raspberry Pi 3 のUSBポートはデバイスモードでは使えない。ホストモード専用。

Raspberry Pi 3をUSBガジェット的に使えないかなと思ってUSBについて調べてみた。

Raspberry Pi 3のUSBポートは

  • USB マイクロ端子
  • USB A端子 (標準)

が用意されている。

USBマイクロの方につなぐと、デバイスとして認識されるのかもと思っていたが、どうやら給電専用らしい。確かに回路図をみると、データの線が繋がっていない…
https://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/RPI-3B-V1_2-SCHEMATIC-REDUCED.pdf

USB-Aの方は、USB OTG のホストモードで動作するらしい。

USB OTGは同じ端子を使ってUSBのホストとしてもデバイスとしても動作できる規格。最近スマフォやタブレットでこの端子が付いていることが多い。
ホストとして動作するか、デバイスとして動作するかは、端子についてID線の状態で判定するとのこと。
通常のUSBケーブルが繋がれた場合、ID線はOPENになっているので、デバイスモードして動く。
USBホストケーブルなるOTG用のケーブルが繋がれた場合、ID線がGNDに短絡されているので、それを検知してホストモードで動く。
ID線があるのは、USB-miniとUSB-micro。

例えば、キーボードをタブレットにつなぎたい場合、キーボードの端子はUSB-Aなので、これをスマフォが持つUSB-microに変換しつつ、ID線が短絡されているアダプタを買ってきて接続することになる。

USB端子については下記のページがわかりやすかった。
http://ktsite.ddo.jp/kikaku/usb/index.html?PHPSESSID=aebaedf74eee0cfadb4e9fb393447fb4

Raspberry Piの基板についている端子はUSB-A端子。これがBroadcomのSoCにHub経由で繋がっていると思われる。
実際に、lsusb -tでみるとこのようになっていた。

[pi@raspberrypi:~ $ lsusb -t
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/5p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=smsc95xx, 480M

ハブがあって、そこにsmsc95xxが繋がっているようだ。これがUSB-LANのチップになっている。

ハブとSoCの結線がおそらく、SoC側のID線を短絡する形でされ、常にUSBホストとして動作する回路になっていると思われる。Pi 3のSoCと周辺機器の接続がわかる回路図が公開されていないのではっきりとは分からないが、少なくとも Pi 1の回路図ではUSB IDの線がGNDに接続されていた。

なので、
Raspberry Pi をUSB Gadget的に使ってみたいと思ったのだけど、無理だということがわかった。残念。