内容
- USRP B210 が Ubuntu 起動時に USB 認識しない問題に遭遇した。
- 調査したところ、USB Hub の PPPS (Per Port Power Switching) を利用してuhubctl から USB ポート電源をオンオフすることで、リモート復旧できた。
こんにちは。ドルフィンシステム福島です。
ドルフィンシステムでは、新型コロナウイルス蔓延以来リモートワークがいつでも出来るようにしてあります。
で、ある日、自宅からUbuntu 24.04.2をインストールしたPCを電源オンしても、USB 3.0 端子に接続したB210が認識しない...これでは開発ができないでではないか。
なぜだ。
出社時に、手動でUSBケーブルを挿抜すると認識するので、PC起動時の何か?が原因のような気がします。
Linux起動時の状況を見るためにdmesgを見るとエラーが発生していて、そもそもUSBデバイスとしてそもそも認識していない様子。 起動時に難があるのかと、BIOSで"USB Enumeration delay : enable"を試してみるも効果なし。
Product=2, SerialNumber=1
[ 1.204664] usb usb4: Product: xHCI Host Controller
[ 1.204664] usb usb4: Manufacturer: Linux x.x.xx xhci-hcd
[ 1.204665] usb usb4: SerialNumber: 0000:80:14.0
[ 1.458075] usb 3-1: new high-speed USB device number 2 using xhci_hcd
[ 6.634432] usb 3-1: device descriptor read/64, error -110
[ 22.250419] usb 3-1: device descriptor read/64, error -110
[ 22.762238] usb 3-1: new high-speed USB device number 3 using xhci_hcd
[ 28.138563] usb 3-1: device descriptor read/64, error -110
[ 43.754538] usb 3-1: device descriptor read/64, error -110sh
[ 43.862356] usb usb3-port1: attempt power cycle
調べるとB210では以前から発生してる現象で、対応策はUSB挿抜のみ。 対策として、
- バスパワーではなくAC電源を接続する
- GPSDOを外す
などを試すも関係なくUSRP側のUSBの問題らしい。しょっちゅう使っているB200miniは一度も発生した経験がないので、B210で発生しやすい現象のようです。
回避策を探る
目の前のPCで発生した問題なら、多少面倒だけどもUSRPを挿抜すればよい。 でもリモートの場合はそうはいかない。 USBをオンオフするアダプターは持っているがスイッチは手動だし、電源のオンオフ用なのでデータ線は結線されていないし、USB 3.0でもないので却下。
USB電源を赤外線でリモートオンオフするスイッチ、という製品はあるが基本的に電源のオンオフのみ(ファンのオンオフ用らしい)。 センチュリーから ReTry Hubというものがあるが、Windowsでないと制御できないので却下。
USB Hubの電源制御仕様がある
で調べていくと、
- USB Hubには各ポートの電源をオンオフする仕様というものがあるらしい
- 仕様名は"USB Per Port Power Switching"→USB PPPS
- Linux用のPPPS制御アプリ uhubctl も用意されている
早速、手持ちのハブB210を接続して動作せてみるが... PCにハブを接続しそこにB210を接続するが、以下のようにuhubctlがハブを認識しないのでPPPSに非対応ハブなのだと思う。
$ sudo uhubctl
No compatible devices detected!
Run with -h to get usage info.
動作しなかったHub達
- Bufferlo BSH4U120C1
- NOVOO NH04S-116A-0.6
PPPS対応hub?
更に調べていくと、以下のハブがPPPS対応ハブで日本で購入可能らしい、で早速注文する。
- Lenovo thinkplus USB-C 4-in-1 USB ハブ USB3.1 VGA 4X90W86497 レノボ 純正 thinkpad
到着したパッケージを見ると、どうも中国内で販売されている製品のようで日本のレノボでは販売されていないもののようだ。 VGAアナログ端子があるので、仕様の古さは否めないところ。10年くらい前の製品か?
で、早速PCに接続し手元にあった200miniを接続すると、おぉuhubctlで認識した。
$ sudo uhubctl
Current status for hub 4-4 [17ef:1032 Generic 4-Port USB 3.1 Hub, USB 3.20, 4 ports, ppps]
Port 1: 02a0 power 5gbps Rx.Detect
Port 2: 02a0 power 5gbps Rx.Detect
Port 3: 02a0 power 5gbps Rx.Detect
Port 4: 02a0 power 5gbps Rx.Detect
Current status for hub 3-2 [17ef:1036 Generic 4-Port USB 2.1 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0503 power highspeed enable connect [2500:0021 Cypress WestBridge 0000000004BE]
Port 2: 0100 power
Port 3: 0100 power
Port 4: 1103 power indicator enable connect [17ef:1033 Realtek thinkplus USB-C 4-in-1 Hub 123456789ABCDEFGH]
接続しているHubは1つなのに、2台のHubが認識ている。 よく見るとUSB 2.1と3.1として認識しているので、1台のHubがUSB 2.1と3.1の両モードで動作しているのでしょう。 この見立てはlsusbのPIDとも適合します。
$ lsusb
Bus 003 Device 026: ID **17ef:1036** Lenovo 4-Port USB 2.1 Hub
Bus 003 Device 027: ID 17ef:1033 Lenovo thinkplus USB-C 4-in-1 Hub
Bus 003 Device 030: ID 2500:0021 Ettus Research LLC USRP B200-mini
Bus 004 Device 013: ID **17ef:1032** Lenovo 4-Port USB 3.1 Hub
というわけで早速、電源オフにしてみることに。
$ sudo uhubctl -l 3-2 -p 1 -a off
Current status for hub 4-4 [17ef:1032 Generic 4-Port USB 3.1 Hub, USB 3.20, 4 ports, ppps]
Port 1: 02a0 power 5gbps Rx.Detect
Sent power off request
New status for hub 4-4 [17ef:1032 Generic 4-Port USB 3.1 Hub, USB 3.20, 4 ports, ppps]
Port 1: 00a0 off
Current status for hub 3-2 [17ef:1036 Generic 4-Port USB 2.1 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0503 power highspeed enable connect [2500:0021 Cypress WestBridge 0000000004BE]
Sent power off request
New status for hub 3-2 [17ef:1036 Generic 4-Port USB 2.1 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0000 off
おぉ。USRP B200miniのLEDが消えて、電源オフになりました!
lsusbでも以下の通り、B200miniが消えています。
$ lsusb
Bus 003 Device 026: ID 17ef:1036 Lenovo 4-Port USB 2.1 Hub
Bus 003 Device 027: ID 17ef:1033 Lenovo thinkplus USB-C 4-in-1 Hub
Bus 004 Device 013: ID 17ef:1032 Lenovo 4-Port USB 3.1 Hub
電源オンをしてみると、ちゃんとUSRP B200miniが認識しました!
$ sudo uhubctl -l 3-2 -p 1 -a on
Current status for hub 4-4 [17ef:1032 Generic 4-Port USB 3.1 Hub, USB 3.20, 4 ports, ppps]
Port 1: 00a0 off
Sent power on request
New status for hub 4-4 [17ef:1032 Generic 4-Port USB 3.1 Hub, USB 3.20, 4 ports, ppps]
Port 1: 02a0 power 5gbps Rx.Detect
Current status for hub 3-2 [17ef:1036 Generic 4-Port USB 2.1 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0000 off
Sent power on request
New status for hub 3-2 [17ef:1036 Generic 4-Port USB 2.1 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0100 power
$ lsusb
Bus 003 Device 026: ID 17ef:1036 Lenovo 4-Port USB 2.1 Hub
Bus 003 Device 027: ID 17ef:1033 Lenovo thinkplus USB-C 4-in-1 Hub
Bus 003 Device 031: ID 2500:0021 Ettus Research LLC USRP B200-mini
Bus 004 Device 013: ID 17ef:1032 Lenovo 4-Port USB 3.1 Hub
以下のように、電源オン・オフするとB200miniのFPGAが再ロードされるので、正しく電源オンオフされているようです。これならB210がハングアップしても正しく復帰できそうです。
$ sudo uhubctl -l 3-2 -p 1 -a on
~中略~
$ uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; DPDK_23.11; UHD_4.9.0.0-11-gcf78e1cf
[INFO] [B200] Loading firmware image: /home/user/prefix-UHD-4.9/share/uhd/images/usrp_b200_fw.hex...
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 30C513D
name: B200mini
product: B200mini
type: b200
$ sudo uhubctl -l 3-2 -p 1 -a off
~中略~
$ uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; DPDK_23.11; UHD_4.9.0.0-11-gcf78e1cf
[INFO] [B200] Loading firmware image: /home/user/prefix-UHD-4.9/share/uhd/images/usrp_b200_fw.hex...
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 30C513D
name: B200mini
product: B200mini
type: b200
データ線は切れるけど電源は落ちないハブ
手元にあった以下のハブは、uhubctlで制御は出来るけど接続したUSBデバイスの電源は落ちませんでした。 しかしUSBポートをオフにするとそのデバイスは切断されますので、データ線は切断されるけど電源は供給され続けるハブのようです。
- Anker 4-Port Ultra Slim USB 3.0 Data Hub Model : A7516
$ sudo uhubctl
Current status for hub 4-3 [2109:0813 VIA Labs, Inc. USB3.0 Hub, USB 3.00, 4 ports, ppps]
Port 1: 0203 power 5gbps U0 enable connect [2500:0021 Ettus Research LLC Unknown 30C513D]
Port 2: 02a0 power 5gbps Rx.Detect
Port 3: 02a0 power 5gbps Rx.Detect
Port 4: 02a0 power 5gbps Rx.Detect
Current status for hub 3-4 [2109:2813 VIA Labs, Inc. USB2.0 Hub, USB 2.10, 4 ports, ppps]
Port 1: 0100 power
Port 2: 0100 power
Port 3: 0100 power
Port 4: 0100 power
uhd_find_devicesを実行してB200miniのファームウェアをロードさせた状態で、ポートをオンオフしたあとでuhd_find_devicesを実行すると、ファームウェアをロードせずに実行が完了。 これは電源オフになっていない証左ですね。
$ lsusb
Bus 003 Device 034: ID 2109:2813 VIA Labs, Inc. VL813 Hub
Bus 003 Device 036: ID 2500:0021 Ettus Research LLC USRP B200-mini
Bus 004 Device 017: ID 2109:0813 VIA Labs, Inc. VL813 Hub
$ uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; DPDK_23.11; UHD_4.9.0.0-11-gcf78e1cf
[INFO] [B200] Loading firmware image: /home/user/prefix-UHD-4.9/share/uhd/images/usrp_b200_fw.hex...
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 30C513D
name: B200mini
product: B200mini
type: b200
$ sudo uhubctl -l 3-4 -p 1 -a off
~中略~
$ lsusb
Bus 003 Device 034: ID 2109:2813 VIA Labs, Inc. VL813 Hub
Bus 004 Device 017: ID 2109:0813 VIA Labs, Inc. VL813 Hub
$ sudo uhubctl -l 3-4 -p 1 -a on
~中略~
$ uhd_find_devices
[INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; DPDK_23.11; UHD_4.9.0.0-11-gcf78e1cf
--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
serial: 30C513D
name: B200mini
product: B200mini
type: b200
まとめ
以下まとめです。
- USRP B210は、PCの電源投入時に正しく認識しないことがある
- この現象はB210側に原因がありそうで、対応策はUSB挿抜による電源再投入
- PPPS対応USBハブという製品があり、各ポートの電源オンオフをソフトから制御できる
- ただし対応ハブは少ない
- ハブの中にはPPPS制御可能だが、USBデータ線だけが切断され電源供給続いているハブがある
- PPPS対応USBハブを使用することで、USRP B210起動時の認識エラーを回避することが出来た
これで、自宅からでもUSRPを完全に電源再投入できるようになり、リモート開発環境としてかなり安心感が増しました。
以上、ドルフィンシステム福島でした。






コメント
コメントを投稿