以前lsusbを調べた<Raspberry Piに接続されたUSBデバイスの情報を収集 - treedown’s Report>のに継続して、もうちょっと詳しく調べて見ることにしました。
Raspberry Piの電源供給
以前にRaspberry Pi 3B+で<https://blog.treedown.net/entry/2022/03/22/010000>を実施したことがありましたが、Raspberry Piに要求される電源(ACアダプタ)の出力は進化するごとに上昇してきています。
Raspberry Pi 3B+は、5V/2.5AだけどUSB接続の機器を使用するには5V/3A、microUSB端子
Raspberry Pi 4は、5V/3Aが推奨、USB接続の機器は使ったことないから分からない。Type-C端子になりました。
Raspberry Pi 5になると、5V/3Aが最低限の容量となり、推奨は(USB接続の機器が増えても大丈夫なように)5V/5Aとなります。
接続されているUSB機器の消費電力(概算)を確認
前回のlsusbコマンドを「-v」オプションで実行した中に「MaxPower」という項目があります。
これはWindowsではデバイスがバス電源のときにホストから引き出す最大電力を(USBデバイスが)報告してくる値(つまりデバイスから取得される値)が表示されています。おそらくRaspberry Piでも同様だと考えています。
参考:Windows ドライバ:USB 構成記述子
https://learn.microsoft.com/ja-jp/windows-hardware/drivers/usbcon/usb-configuration-descriptors
例として、やってみることにしました。
$ sudo lsusb -v | grep -e MaxPower -e Bus
コマンドはgrepで「MaxPower」と「Bus」を含む行をOR条件で抽出しています。
最初に実施したのは、ThinkPad トラベルキーボードだけ接続したRaspberry Piでのコマンド実行結果です。
--------------------------------------------------------------
$ sudo lsusb -v | grep -e MaxPower -e Bus
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
MaxPower 0mA
Bus 003 Device 003: ID 04b3:301e IBM Corp. Keyboard with UltraNav (SK-8845RC)
(Bus Powered)
MaxPower 100mA
(Bus Powered)
Bus 003 Device 002: ID 04b3:3016 IBM Corp. UltraNav Keyboard Hub
(Bus Powered)
MaxPower 40mA
(Bus Powered)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
MaxPower 0mA
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
MaxPower 0mA
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
MaxPower 0mA
--------------------------------------------------------------
「IBM Corp. Keyboard with UltraNav」がキーボード本体、100mAの消費電力が見込まれています。加えてキーボードに内蔵している(USB1.1なのでまったく使えませんが)USBハブが別途40mAの消費電力を見込んでいて、合計で140mAが必要になります。
他のRaspberry Piで外付けHDDを接続している機器でも確認してみました。
--------------------------------------------------------------
$ sudo lsusb -v | grep -e MaxPower -e Bus
Bus 001 Device 005: ID 0584:0270 RATOC System, Inc. RS-EC32-U3RWS
MaxPower 8mA
Bus 001 Device 004: ID 0584:0270 RATOC System, Inc. RS-EC32-U3RWS
MaxPower 8mA
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
MaxPower 2mA
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
MaxPower 2mA
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
MaxPower 0mA
--------------------------------------------------------------
「RATOC System, Inc. RS-EC32-U3RWS」がUSB接続の外付けHDDです。ACアダプタで別途電源供給をしているセルフパワーの機器なので、8mAとキーボード以下の電力量しか機器からは報告されていません。
vcgencmdコマンドで状態を取得する
Raspberry Piの低電圧な状態をコマンドで確認する方法です。以下のコマンドを実行します。
$ vcgencmd get_throttled
コマンドvcgencmdでオプションget_throttledを付加すると電圧状態が確認できます。
--------------------------------------------------------------
$ vcgencmd get_throttled
throttled=0x0
--------------------------------------------------------------
「0x0」が表示されました。このRaspberry Piでは正常動作が継続しているようです。上記のように「0x0」が表示されるようであれば、以前から現在に至るまで電力不足などはなく正常動作しているということのようです。
試しに、過去に「Under-voltage detected!」が発生したRaspberry Piでもコマンドを実行してみました。
現在は<Raspberry Pi「Under-voltage detected!」対策=ACアダプタ交換 - treedown’s Report>にてACアダプタを交換して電力不足を解消済です。
--------------------------------------------------------------
$ vcgencmd get_throttled
Can't open device file: /dev/vcio
Try creating a device file with: sudo mknod /dev/vcio c 100 0
$ sudo vcgencmd get_throttled
throttled=0x80000
--------------------------------------------------------------
sudo付けてね、って言われたので、sudoでコマンドを実行し直したところ、
「0x80000」が表示されました。
過去に電力不足が発生していたので、この場合には「0x50000」が表示される予定でした。それとは別のところで温度によるクロックダウンが発生していたことで「0x80000」が記録されていたようです。
この値が何を意味しているかは、以下のURLを確認するとわかります。
公式:Raspberry Pi Documentation
https://www.raspberrypi.com/documentation/computers/os.html
「get_throttled」にある表に注目。
--------------------------------------------------------------
0 0x1 Undervoltage detected(不足電圧が検出)
1 0x2 Arm frequency capped(アーム周波数キャップあり)
2 0x4 Currently throttled(現在スロットル(抑制)中)
3 0x8 Soft temperature limit active(ソフト温度制限がアクティブ)
16 0x10000 Undervoltage has occurred(低電圧(不足)が発生しました)
17 0x20000 Arm frequency capping has occurred(アーム周波数キャッピングが発生しました)
18 0x40000 Throttling has occurred(スロットリングが発生しました)
19 0x80000 Soft temperature limit has occurred(ソフト温度制限が発生)
--------------------------------------------------------------
vcgencmdコマンドには他にも収集できる情報がいくつかあるようです。CPU温度の「measure_temp」とか、メモリ容量の情報を「get_config total_mem」で収集することもできるようです。CPU周波数は「measure_clock arm」で、電圧の「measure_volts」とかも見て取れます。前述のURLとか<https://elinux.org/RPI_vcgencmd_usage>をよく読んで見ると新たな発見がありそうです。