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になります。
Recent Comments