2019.08.31

Raspberry Pi3 B+ でUSBポートの電源制御

Raspberry Piで100円均一で買ったUSBライトをつけたり消したりしたいと思い、いろいろ試した結果を記録します。

USBポートを便宜的にABCDとして、並びは便宜的に次のようにします。

LAN___A__D

PORT__B__C

ターミナル窓で次のコマンドを打つと、現状のUSB構成がわかります。

pi@raspberrypi: ~ $ lsusb -t

 

/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver...

  |__Port 1: Dev 2, If 0, Class=Hub, Driver...

    |__Port 1: Dev 3, If 0, Class=Hub, Driver...

      |__Port 1: Dev 4, If 0, Class=Vender Specific Class, Driver=lan78xx...

 

こんな感じで表示されるはず。内部的にルートハブがBus 01.Port 1で、実際のコネクタABCDは内臓ハブ2系統に実装されています。

何もつなげていなくてもlan78xxのドライバーが動いているので、ラズパイ3B+の有線LANアダプタはUSB接続であることがわかります。

 

USBの構成がわかったところで、USBポートを個別に制御するためのコマンドをインストールしないといけません。Git Hubからhub-ctrl.cをダウンロードして、コンパイル後、管理者権限でパスの通った場所にコピーしてください。

pi@raspberrypi: ~ $ sudo hub-ctrl -v

Hub #0 at 001:003

 INFO: individual power switching

 WARN: Port idicators are NOT supported.

 Hub Port Status:

  Port 1: 0000.0503 highspeed power enable connect

  Port 2: 0000.0100 power

  Port 3: 0000.0100 power

Hub #1 at 001:002

 INFO: individual power switching.

 WARN: Port indicators are NOT supported.

 Hub Port Status:

  Port 1: 0000.0503 highspeed power enable connect

  Port 2: 0000.0100 power

  Port 3: 0000.0100 power

  Port 4: 0000.0100 power

Hub #2 at 001:001

 INFO: ganged switching.

 WARN: Port indicators are NOT supported.

 Hub Port Status:

  Port 1: 0000.0503 highspeed power enable conect

 

hub-ctrl コマンドのポート指定の仕方は -h (Hub #) -P (Port #) -p (0|1)

USB A の場合 hub-ctrl -h 0 -P 2 -p 0

USB B の場合 hub-ctrl -h 0 -P 3 -p 0

USB C の場合 hub-ctrl -h 1 -P 2 -p 0

USB D の場合 hub-ctrl -h 1 -P 3 -p 0

 

OFFにしたい場合は上記のように入力してもすぐに再接続されてしまうので、次のコマンドを実行して接続を切る必要があります。

pi@raspberrypi: ~ $ echo -n "1-1.2"|sudo tee /sys/bus/usb/drivers/usb/unbind

pi@raspberrypi: ~ $ sudo hub-ctrl -h 0 -P 2 -p 0

 

unbind のポート指定は

USB A の場合 "1-1.2"

USB B の場合 "1-1.3"

USB C の場合 "1-1.1.2"

USB D の場合 "1-1.1.3"

 

ONにしたい場合は

pi@raspberrypi: ~ $ sudo hub-ctrl -h 0 -P 2 -p 1

 

注意:USB CをOFFしたら連動してABDもOFFになります。

 

| | Comments (0)