10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry Pi のUSBをコマンドから制御する

Last updated at Posted at 2021-08-22

Raspberry Pi のUSBを制御する

1. Spec

1-1. ハード面
アイテム 詳細
Raspberry Pi Raspberry Pi 3 Model B+
1-2. ソフト面
内容 バージョン
Raspberry Pi Imager v1.6.2
Raspberry Pi OS (32-bit) リリース日:2021-05-07
Kernel 5.10
(補足)Raspbian 10.10

2. lsusbコマンドについて

  • USBデバイスの一覧と詳細情報を表示

lsusb : USBデバイスを一覧表示する

pi@raspberrypi:~ $ lsusb
Bus 001 Device 008: ID 0424:7800 Standard Microsystems Corp. 
Bus 001 Device 007: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

image.png

バス番号 デバイス番号 ベンダーID プロダクト番号 ベンダー名
Bus 001 Device 008 ID 0424 7800 Standard Microsystems Corp.
Bus 001 Device 007 ID 0424 2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002 ID 0424 2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001 ID 1d6b 0002 Linux Foundation 2.0 root hub

ベンダー名は、Raspbianなので「/var/lib/usbutils/usb.ids」ファイルを参照する。

短いオプション 長いオプション 意味
-s バス番号:デバイス番号 表示対象のバスとデバイスを10進数で指定する
(どちらか片方の指定も可能:本文を参照)
-d ベンダーID:プロダクト番号 表示対象のベンダーとプロダクトを16進数で指定する
(ベンダーのみの指定も可能:本文を参照)
-v --verbose 詳細情報を表示する
-t --tree USBデバイスをツリーで表示する
(「-v」や「-D」より優先される)
-D デバイスディレクトリ 「-D /dev/bus/usb/001/001」のように、/dev/bus/usb下のディレクトリを指定して表示する
(「-v」同様の詳細表示となる、※1)

※1 USBデバイスは「/dev/bus/usb/バス番号/デバイス番号」で管理されている。「-D」オプションを指定しない場合、lsusbコマンドは/dev/bus/usb/以下を走査して一覧表示する。

ツリー表示してみた状態
image.png
参照

2. USBを制御するためのhub-ctrlを導入する

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

image.png
(挿す側から見た図)

USBなのにLANがポート1にされているので、
USBとして使えるのはポート2~5。

Raspberry Pi 3B+ は、ポート毎にON-OFF出来ず、ポート2~5まとめてのON-OFFになる。

3. コマンドで制御

USBポートをOFFにするコマンドは、
sudo hub-ctrl -h 1 -P 2 -p 0

コマンド 内容
-h 1 hub1をコントロール
-P 2 port2を指定
-p 0 0:電源OFF 
1:電源ON
-b 001 BUS001をコントロール
-d 005 device005を指定

(他例)
sudo hub-ctrl -b 001 -d 005 -P 1 -p 0

ちなみに、Raspberry Pi 3B+ では
sudo hub-ctrl -h 0 -P 2 -p 0
では動きませんでした。
hubの指定だけではダメなようで、
image.png
sudoで権限がないとコマンド使えませんでした。
また、./ があるものとないものの違いはよくわかりませんでした。

4. 参考にさせて頂いたサイト

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?