RaspberryPI 3 Model B で USBポートの電源をON/OFFする

ALL
スポンサーリンク

RaspberryPI 3 Model B で USBポートの電源をON/OFFする方法です。

スポンサーリンク

先に結論

USB外付けHDDで確認しました。

Port2~Port5 まとめてなら、完全に電源を切ることが出来ます。
HDDの電源が落ち、HDD筐体のLEDも消灯します。

Port3~Port5 個別では、HDDの電源が落ちますが、HDD筐体のLEDは消灯することもあれば、点灯したままだったり、一定しません。

Port2は個別では電源OFFできません。

なお、Port2~Port5 は、RaspberryPi 3 Model B では LAN/USBポートがある面を見て、次のようになっています。
Port2~Port5 が各USBポートの口です。

 LAN
+---+  Port2 Port4
|   |
+---+  Port3 Port5

準備

以降で hub-ctrlコマンドが出てきますが、RaspberryPI でのインストールは次のようにします。

sudo apt-get install libusb-dev
wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
gcc -O2 hub-ctrl.c -o hub-ctrl-armhf-static -lusb -static
sudo cp hub-ctrl-armhf-static /usr/local/bin/hub-ctrl

USBポートの電源ON/OFF方法

Port2~Port5 まとめての場合

HDDの電源が落ち、HDD筐体のLEDも消灯します。

まず、下記の X を USBポート番号(2~5)で置き換えた上で、実行します。
USB取り外しを実行するコマンドで、RaspberryPI から認識されなくなります。

echo -n "1-1.X" > /sys/bus/usb/drivers/usb/unbind

これだけでは、まだHDDはスピンダウンもしません。

下記を実行します。

hub-ctrl -b 1 -d 2 -P 2 -p 0

USBのPort2の給電が停止し、Port3~Port5 への通信が停止します。

ちょっと変な挙動ですが、下記サイトのコメント欄の情報からわかりました。

オーバー苦ロック: ジャイアンのその日暮らし のパパリウスさんのコメント部分

補足:
本来はhub-ctrlで各ポートを独立して操作できるはずなのですが、ラズパイのUSBポートはポート2(左上)がちょっと特殊で、ポート2をOFFにすると、ポート2は通信OFF・バスパワーOFF、ポート3〜ポート5は通信OFF・バスパワーON(?)という謎の状態になり、そこからさらにポート3〜ポート5に対してOFFを指示することで最終的に全てのポートでバスパワーをOFFにしています。
投稿: パパリウス | 2017年10月10日 (火) 23時39分

この段階で、Port2 につなげていたHDDは、HDDの電源が落ち、HDD筐体のLEDも消灯します。

以降は、Port3~Port5 の場合です。

Port3~Port5 では、PC電源連動機能/USB電源連動機能を持つHDDは、USBの通信停止を検出してHDDの電源が落ちます。
HDD筐体のLEDは消灯することもあれば、点灯したままだったり、一定しません。

次に下記の X を USBポート番号(3~5)で置き換えた上で、実行します。
USBポートへの給電が停止します。

hub-ctrl -b 1 -d 2 -P X -p 0

これで、HDD筐体のLEDも消灯します。

電源ONする場合は、逆に作業します。
電源OFFしたPort3~Port5 を最初にONします。
下記の X を USBポート番号(2~5)で置き換えた上で、実行します。

hub-ctrl -b 1 -d 2 -P X -p 1

OFFしていた Port2 を ON にします。

hub-ctrl -b 1 -d 2 -P 2 -p 1

USBポートの電源がONになると、USB機器はRaspberryPI から認識されます。

Port3~Port5 個別に電源ON/OFFする方法

下記の X を USBポート番号(3~5)で置き換えた上で、実行します。
USB取り外しを実行するコマンドで、RaspberryPI から認識されなくなります。

echo -n "1-1.X" > /sys/bus/usb/drivers/usb/unbind

これだけでは、まだHDDはスピンダウンもしません。

下記の X を USBポート番号(3~5)で置き換えた上で、実行します。
USBポートへの給電が停止します。

hub-ctrl -b 1 -d 2 -P X -p 0

これでHDDの電源が落ちます。
(HDDのスピンダウンでは無く、HDDの電源が落ちます)
HDD筐体のLEDは消灯することもあれば、点灯したままだったり、一定しません。

Port2は個別では電源OFFできません。
Port2 をOFFにすると、連動して Port3~Port5 のUSB通信が停止してしまう為です。
先の「Port2~Port5 まとめての場合」を参照してください。

電源ONする場合は、下記の X を USBポート番号(3~5)で置き換えた上で、実行します。

hub-ctrl -b 1 -d 2 -P X -p 1

USBポートの電源がONになると、USB機器はRaspberryPI から認識されます。

参考

オーバー苦ロック: ジャイアンのその日暮らし のパパリウスさんのコメント部分
how to get bus id of an usb device – Unix & Linux Stack Exchange
LinuxからUSB HUBの電源のON/OFFを制御してみる – memoメモ
Raspberry PiにUSB扇風機を接続してUSBポートをON/OFF制御する方法 | きのこタイムズ
linuxでのusbの抜き差しをコマンドで実施する | えむけいプラン(公式)
USB抜き差しせずコマンドで再認識 – Qiita

コメント