uhubctl
est un utilitaire permettant de contrôler l'alimentation USB par port sur les hubs USB intelligents. Un hub intelligent est défini comme un hub qui implémente la commutation d'alimentation par port.
L'idée originale de ce code a été inspirée par hub-ctrl.c de Niibe Yutaka : https://www.gniibe.org/development/ac-power-control-by-USB-hub
Notez que très peu de hubs prennent réellement en charge la commutation d’alimentation par port. Certains d’entre eux ne sont plus fabriqués et peuvent être difficiles à trouver.
Voici la liste des hubs USB compatibles connus :
Fabricant | Produit | Ports | USB | VID:PID | Libérer | EOL |
---|---|---|---|---|---|---|
Acer | Moniteur BE270U (voir) | 4 | 3.0 | 2109:2811 | 2016 | |
AmazonBasics | HU3641V1 (problème RPi) | 4 | 3.0 | 2109:2811 | 2013 | |
AmazonBasics | HU3770V1 (problème RPi) | 7 | 3.0 | 2109:2811 | 2013 | |
AmazonBasics | HU9003V1EBL, HUC9003V1EBL | 7 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | HU9002V1SBL, HU9002V1EBL, HU9002V1ESL (remarque) | 10 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | HUC9002V1SBL, HUC9002V1EBL, HUC9002V1ESL | 10 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | U3-7HUB (ne fonctionne que pour 1 port de charge) | 7 | 3.0 | 2109:2813 | 2020 | |
Anker | AK-68ANHUB-BV7A-0004 (remarque) | 7 | 3.0 | 2109:0812 | 2014 | |
Pomme | Pro Display XDR MWPE2LL/A (hub USB interne) | 4 | 2.0 | 05AC:9139 | 2019 | |
Pomme | Écran Thunderbolt 27" (hub USB interne) | 6 | 2.0 | 2011 | 2016 | |
Pomme | Clavier USB avec pavé numérique (hub USB interne) | 3 | 2.0 | 2011 | ||
Asus | Carte mère Z77 Sabertooth (hub USB intégré) | 6 | 2.0 | 2012 | ||
Asus | Carte mère Z87-PLUS (hub USB intégré) | 4 | 3.0 | 2013 | 2016 | |
Aukey | CB-C59 | 4 | 3.0 | 2109:2813 | 2017 | |
B+B SmartWorx | UHR204 | 4 | 2.0 | 0856:DB00 | 2013 | |
B+B SmartWorx | USH304 | 4 | 3.0 | 04B4:6506 | 2017 | 2019 |
Bâle | 2000036234 | 4 | 3.0 | 0451:8046 | 2016 | |
Belkin | F5U101 | 4 | 2.0 | 0451:2046 | 2005 | 2010 |
Belkin | F5U238UKCRL-MOB | 4 | 2.0 | 0409:0059 | 2004 | 2010 |
BenQ | Moniteur PD2700U 4K (fonctionne uniquement en mode USB2) | 4 | 3.0 | 05E3:0610 | 2018 | |
BenQ | PD3220U | 4 | 3.1 | 05E3:0610 | 2019 | |
Bytecc | BT-UH340 (avertissement) | 4 | 3.0 | 2109:8110 | 2010 | |
Centech | CT-USB4HUB Réessayez le HUB | 4 | 3.0 | 0424:2744 | 2017 | |
Circuitco | Beagleboard-xM (hub USB interne) | 4 | 2.0 | 0424:9514 | 2010 | |
Club3D | Station d'accueil double écran CSV-3242HD | 4 | 3.0 | 2109:2811 | 2015 | |
Coolgear | USBG-12U2ML | 12 | 2.0 | 05e3:0607 | 2015 | |
Cyprès | Kit de développement CY4608 HX2VL (remarque) | 4 | 2.0 | 04B4:6570 | 2012 | |
Lien D | DUB-H4 rév D,E (noir). Remarque : les versions A, C, F ne sont pas prises en charge | 4 | 2.0 | 05E3:0608 | 2012 | |
Lien D | DUB-H7 rév A (argent) | 7 | 2.0 | 2001:F103 | 2005 | 2010 |
Lien D | DUB-H7 rév D,E (noir). Rév. B, C, F, G non pris en charge | 7 | 2.0 | 05E3:0608 | 2012 | |
Dell | Moniteur QHD 24" P2416D (remarque) | 4 | 2.0 | 2017 | ||
Dell | Moniteur de jeu WQHD S2719DGF 27" | 5 | 3.0 | 0424:5734 | 2018 | |
Dell | Moniteur ACL UltraSharp 1704FPT 17" | 4 | 2.0 | 0424:A700 | 2005 | 2015 |
Dell | Moniteur LCD UltraSharp U2415 24" | 5 | 3.0 | 2014 | ||
Dell | Moniteur incurvé UltraSharp U3419W 34" | 6 | 3.0 | 2020 | ||
Dell | Wyse 3040 (-f requis) | 6 | 3.0 | 2017 | ||
Délock | 62537 | 4 | 3.0 | 2017 | 2021 | |
Délock | 87445 (remarque) | 4 | 2.0 | 05E3:0608 | 2009 | 2013 |
Elecom | U2H-G4S | 4 | 2.0 | 2006 | 2011 | |
Gigaoctet | Moniteur G27Q (voir | 4 | 3.0 | 2109:0817 | 2020 | |
ÉchelleGlobale | ESPRESSObbin SBUD102 V5 | 1 | 3.0 | 1D6B:0003 | 2017 | |
Noyau dur | ODROID-C4 (remarque) | 4 | 3.0 | 2020 | ||
Technologie Hawking | UH214 | 4 | 2.0 | 2003 | 2008 | |
Hewlett-Packard | Station d'accueil USB-C G5 5TW10AA | 5 | 3.0 | 03F0:076B | 2019 | |
Hewlett-Packard | P5Q58UT | 3 | 3.0 | 2019 | ||
Inateck | HB2025A (USB2 uniquement) | 4 | 3.1 | 2109:2822 | 2021 | |
IOI | U3H415E1 | 4 | 3.0 | 2012 | ||
j5créer | JUH377 (remarque) | 7 | 3.0 | 2016 | ||
j5créer | JUH470 (remarque) | 3 | 3.0 | 05E3:0610 | 2014 | |
Systèmes de jus | 6HUB-01 | 7 | 3.0 | 0BDA:0411 | 2014 | 2018 |
KUNBUS GmbH | RevPi Connect (+) / S / SE | 2 | 2.0 | 0424:9514 | 2018 | |
KUNBUS GmbH | RevPi Connect 4 | 2 | 3.0 | 2022 | ||
KUNBUS GmbH | RevPi Core 3/S/SE | 2 | 2.0 | 0424:9514 | 2017 | |
LG Électronique | Moniteur 27MD5KL-B | 4 | 3.0 | 043E:9A60 | 2019 | |
LG Électronique | Moniteur 27GL850-B | 4 | 3.0 | 0451:8142 | 2019 | |
LG Électronique | Moniteur 27UK850-W | 2 | 3.0 | 2018 | ||
LG Électronique | Moniteur 27UN83A-W | 2 | 3.0 | 0451:8142 | 2020 | |
LG Électronique | Moniteur 38WK95C-W | 4 | 3.0 | 0451:8142 | 2018 | |
Lenovo | Station d'accueil ThinkPad Ultra (40A20090EU) | 6 | 2.0 | 17EF:100F | 2015 | |
Lenovo | Station d'accueil ThinkPad Ultra (40AJ0135EU) | 7 | 3.1 | 17EF:3070 | 2018 | |
Lenovo | ThinkPad X200 Ultrabase 42X4963 | 3 | 2.0 | 17EF:1005 | 2008 | 2011 |
Lenovo | Think Pad X6 Ultrabase 42W3107 | 4 | 2.0 | 17EF:1000 | 2006 | 2009 |
Lenovo | Concentrateur USB-C 4 en 1 ThinkPlus 4X90W86497 | 3 | 3.0 | 2021 | ||
Lenovo | Moniteur ThinkVision T24i-10 | 4 | 2.0 | 17EF:0610 | 2018 | |
Lenovo | Hub USB-C vers 4 ports USB-A | 4 | 2.0 | 17EF:103A | 2020 | |
Lindy | Convertisseur série USB 4 ports | 4 | 1.1 | 058F:9254 | 2008 | |
Linksys | USB2HUB4 (remarque) | 4 | 2.0 | 2004 | 2010 | |
Maplin | A08CQ | 7 | 2.0 | 0409:0059 | 2008 | 2011 |
Métadot | Le clavier 4 | 2 | 3.0 | 2014 | ||
Puce | EVB9512 | 2 | 2.0 | 2009 | ||
Puce | EVB-USB2517 | 7 | 2.0 | 2008 | ||
Puce | EVB-USB2534BC | 4 | 2.0 | 2013 | ||
Puce | EVB-USB5807 | 7 | 3.0 | 2016 | ||
Moxa | Port-407 | 7 | 2.0 | 110A:0407 | 2009 | |
NVIDIA | Jetson Nano B01 (détails) | 4 | 3.0 | 2019 | ||
NVIDIA | Jetson Xavier NX (détails) | 4 | 3.0 | 2020 | ||
Phidgets | HUB0003_0 | 7 | 2.0 | 1A40:0201 | 2017 | |
Philips | Moniteur incurvé ultra-large 346B1C de 34 po | 4 | 3.0 | 05E3:0610 | 2019 | |
Enfichable | USB3-HUB7BC | 7 | 3.0 | 2109:0813 | 2015 | |
Enfichable | USB3-HUB7C (fonctionne uniquement pour 2 ports de charge) | 7 | 3.0 | 2109:0813 | 2015 | |
Enfichable | USBC-HUB7BC (fonctionne pour les ports 6/7, pas le plus à droite) | 7 | 3.0 | 2109:0817 | 2021 | |
Enfichable | USB3-HUB10-C2 (fonctionne uniquement pour 2 ports de charge) | 10 | 3.0 | 2014 | ||
Port-Inc | NWUSB01 | 4 | 1.1 | 0451:1446 | 1999 | 2003 |
Framboise Pi | B+, 2B, 3B (voir ci-dessous) | 4 | 2.0 | 2011 | ||
Framboise Pi | 3B+ (voir ci-dessous) | 4 | 2.0 | 0424:2514 | 2018 | |
Framboise Pi | 4B (voir ci-dessous) | 4 | 3.0 | 2109:3431 | 2019 | |
Framboise Pi | 5 (voir ci-dessous) | 4 | 3.0 | 1d6b:0002 | 2023 | |
Renesas | Contrôleur hôte PCIe USB 3.0 uPD720202 | 2 | 3.0 | 2013 | ||
Rosewill | RHUB-210 | 4 | 2.0 | 0409:005A | 2011 | 2014 |
Rosonway | RSH-518C (remarque) | 7 | 3.0 | 2109:0817 | 2021 | |
Rosonway | RSH-A10 (voir) | 10 | 3.0 | 0bda:0411 | 2020 | |
Rosonway | RSH-A13 (avertissement) | 13 | 3.1 | 2109:2822 | 2021 | |
Rosonway | RSH-A16 (remarque, avertissement) | 16 | 3.0 | 0bda:0411 | 2020 | |
Rosonway | RSH-A104 (USB2 uniquement) | 4 | 3.1 | 2109:2822 | 2022 | |
Rosonway | RSH-A107 (alias ikuai A107-5) | 7 | 3.1 | 0bda:5411 | 2022 | |
Rosonway | RSH-ST07C (seulement 4) | 7 | 3.0 | 2109:2822 | 2023 | |
Approvisionnement Sanwa | USB-HUB14GPH | 4 | 1.1 | 2001 | 2003 | |
Seagate | Hub de sauvegarde Plus STEL8000100 | 2 | 3.0 | 0BC2:AB44 | 2016 | |
Studio de graines | reTerminal CM4104032 | 2 | 2.0 | 0424:2514 | 2021 | |
StarTech | Station d'accueil de voyage USB-C DKT30CSDHPD3 | 3 | 3.0 | 2109:2817 | 2018 | |
StarTech | HB30A4AIB (avertissement) | 4 | 3.0 | 2109:2817 | 2018 | |
Sunix | SHB4200MA | 4 | 2.0 | 0409:0058 | 2006 | 2009 |
Discussions sur le système | Sugoi USB2-HUB4X | 4 | 2.0 | 2007 | ||
Targus | PA095UZ | 2 | 2.0 | 2004 | ||
Targus | PAUH212/PAUH212U | 7 | 2.0 | 2004 | 2009 | |
Texas Instruments | TUSB4041PAPEVM | 4 | 2.1 | 0451:8142 | 2015 | |
UUGear | MEGA4 (pour Raspberry Pi 4B) | 4 | 3.0 | 2109:0817 | 2021 | |
VirtuelIci | Hub USB3 à 4 ports (remarque) | 4 | 3.0 | 2024 |
Ce tableau n'est en aucun cas complet. Si votre hub fonctionne avec uhubctl
, mais n'est pas répertorié ci-dessus, veuillez le signaler en ouvrant un nouveau numéro sur https://github.com/mvp/uhubctl/issues, afin que nous puissions l'ajouter au tableau pris en charge. Dans votre rapport, veuillez fournir le modèle de produit exact et ajouter la sortie de uhubctl
et veuillez tester la prise en charge de VBUS comme décrit ci-dessous dans la FAQ.
Notez que de nombreuses cartes mères modernes ont des hubs racine intégrés qui prennent en charge cette fonctionnalité - vous n'aurez peut-être même pas besoin d'acheter un hub externe.
Si vous avez un hub USB 3.0 connecté au port USB3 en amont, il sera détecté comme 2 hubs virtuels indépendants : USB2 et USB3, et vos périphériques USB seront connectés au hub virtuel USB2 ou USB3 en fonction de leurs capacités et de leur vitesse de connexion. Pour contrôler l'alimentation de ces hubs, il est nécessaire de mettre hors/sous tension les hubs virtuels USB2 et USB3 pour que les modifications de mise hors/sous tension prennent effet. uhubctl
essaiera de le faire automatiquement (sauf si vous désactivez ce comportement avec l'option -e
).
Malheureusement, même si la plupart des hubs coupent la connexion USB de données, certains ne coupent toujours pas le VBUS au port, ce qui signifie que le téléphone connecté peut toujours continuer à se charger à partir du port éteint par uhubctl
.
Cet utilitaire a été testé pour compiler et fonctionner sous Linux (Ubuntu/Debian, Redhat/Fedora/CentOS, Arch Linux, Gentoo, openSUSE, Buildroot), FreeBSD, NetBSD, SunOS et MacOS.
Bien que uhubctl
compile sous Windows, la commutation d'alimentation USB ne fonctionne pas sous Windows car libusb
utilise le pilote winusb.sys
qui, selon Microsoft, ne prend pas en charge les demandes de contrôle USB nécessaires. Cela peut être corrigé si libusb
commence à prendre en charge un pilote différent sous Windows.
Notez qu'il est fortement recommandé d'installer pkg-config
(de nombreuses plateformes le fournissent par défaut).
Tout d'abord, vous devez installer la bibliothèque libusb-1.0 (la version 1.0.12 ou ultérieure, la version 1.0.16 ou ultérieure est recommandée) :
sudo apt-get install libusb-1.0-0-dev
sudo yum install libusb1-devel
sudo zypper install libusb-1_0-devel
brew install libusb
ou sudo port install libusb-devel
sudo pkgin install libusb1 gmake pkg-config
Pour récupérer la source uhubctl et la compiler :
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
Cela devrait générer le binaire uhubctl
. Vous pouvez l'installer sur votre système sous /usr/sbin/uhubctl
en utilisant :
sudo make install
Notez que sur certains systèmes d'exploitation (par exemple FreeBSD/NetBSD), vous devez utiliser gmake
à la place pour construire.
De plus, sur MacOS, vous pouvez installer uhubctl
avec toutes les dépendances nécessaires d'un seul coup en utilisant Homebrew Tap :
brew tap mvp/uhubctl https://github.com/mvp/uhubctl
brew install uhubctl
Pour construire/installer à partir de la branche principale, utilisez --HEAD
:
brew install uhubctl --HEAD
️ Sous Linux, utilisezsudo
ou configurez les autorisations USB comme décrit ci-dessous !
Pour répertorier tous les hubs pris en charge :
uhubctl
Vous pouvez contrôler l’alimentation d’un ou plusieurs ports USB comme ceci :
uhubctl -a off -p 2
Cela signifie fonctionner sur le hub intelligent par défaut et couper l'alimentation ( -a off
ou -a 0
) sur le port 2 ( -p 2
). Les actions prises en 1
sont off
/ on
/ cycle
2
toggle
(ou 0
3
. cycle
signifie éteindre l'appareil, attendre un certain délai (configurable avec -d
) et le rallumer. Les ports peuvent être séparés par des virgules et peuvent être utilisés pour des plages -
par exemple 2
, ou 2,4
, ou 2-5
, ou 1-2,5-8
.
️ La désactivation des ports USB intégrés peut couper votre clavier ou votre souris, alors faites attention aux ports que vous désactivez !
Si vous avez plusieurs hub USB intelligent connectés, vous devez choisir un hub spécifique à contrôler à l'aide du paramètre -l
(emplacement). Pour trouver les emplacements des hubs, exécutez simplement uhubctl
sans aucun paramètre. Les emplacements des hubs ressemblent à bx.yz
, où b
est le numéro du bus USB et x
, y
, z
... sont les numéros de port de tous les hubs de la chaîne, en commençant par le hub racine pour un bus USB donné. Cette adresse est semi-stable - elle ne changera pas si vous débranchez/rebranchez (ou éteignez/rallumez) un périphérique USB sur le même port USB physique (cette méthode est également utilisée dans le noyau Linux).
Sous Linux, vous devez configurer les autorisations USB udev
(sinon vous devrez l'exécuter en tant que root en utilisant sudo uhubctl
).
À partir du noyau Linux 6.0, il existe une interface standard pour activer ou désactiver les ports du hub USB, et uhubctl
essaiera de l'utiliser (au lieu de libusb
) pour définir l'état du port. C'est pourquoi il existe des règles supplémentaires pour les noyaux 6.0+. Il n'y a aucun mal à avoir ces règles sur des systèmes exécutant des versions de noyau plus anciennes.
Pour corriger les autorisations USB, exécutez d'abord sudo uhubctl
et notez tous vid:pid
pour les hubs que vous devez contrôler. Ensuite, ajoutez les règles udev comme ci-dessous au fichier /etc/udev/rules.d/52-usb.rules
(remplacez 2001
par l'identifiant de votre fournisseur de hub, ou supprimez complètement le filtre ATTR{idVendor}
pour autoriser tout accès au hub USB) :
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2001"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN="/bin/sh -c "chmod -f 666 $sys$devpath/*-port*/disable || true""
Notez que pour les hubs USB3, certains hubs utilisent un ID de fournisseur différent pour les composants USB2 et USB3 de la même puce, et les deux ont besoin d'autorisations pour que uhubctl fonctionne correctement. Par exemple pour Raspberry Pi 4B, vous devez ajouter ces 2 lignes (ou supprimer le filtre idVendor) :
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2109"
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="1d6b"
Si vous n'aimez pas le mode grande ouverture 0666
, vous pouvez restreindre l'accès par groupe comme ceci :
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0664", GROUP="dialout"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN+="/bin/sh -c "chown -f root:dialout $sys$devpath/*-port*/disable || true""
RUN+="/bin/sh -c "chmod -f 660 $sys$devpath/*-port*/disable || true""
puis ajoutez les utilisateurs autorisés au groupe dialout
:
sudo usermod -a -G dialout $USER
Pour que les modifications de vos règles udev
prennent effet, redémarrez ou exécutez :
sudo udevadm trigger --attr-match=subsystem=usb
Pour votre commodité, une règle udev prête à l'emploi est fournie ici.
Selon la spécification USB 2.0, les hubs USB ne peuvent annoncer aucune commutation d'alimentation, une commutation d'alimentation groupée (tous les ports à la fois) ou une commutation d'alimentation par port (individuel). Notez que par défaut, uhubctl
ne détectera que les hubs USB prenant en charge la commutation d'alimentation par port (mais vous pouvez le forcer à essayer de fonctionner sur des hubs non pris en charge avec l'option -f
). Vous pouvez trouver le type de commutation d'alimentation pris en charge par votre matériel en utilisant sudo lsusb -v
:
Pas de commutation de puissance :
wHubCharacteristic 0x000a
No power switching (usb 1.0)
Per-port overcurrent protection
Commutation de puissance groupée :
wHubCharacteristic 0x0008
Ganged power switching
Per-port overcurrent protection
Commutation d'alimentation par port :
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
uhubctl
?sudo uhubctl
. Si votre hub n'est pas répertorié, il n'est pas pris en charge. Alternativement, vous pouvez exécuter sudo lsusb -v
et vérifier Per-port power switching
- si vous ne voyez pas cette ligne dans la sortie lsusb, le hub n'est pas pris en charge.uhubctl
pour éteindre ce port et vérifiez que le téléphone arrête de se charger, que le voyant USB cesse de briller ou que le ventilateur USB arrête de tourner. Si VBUS ne s'éteint pas, le fabricant de votre hub n'a pas inclus de circuits permettant de couper l'alimentation. Un tel hub fonctionnerait toujours pour couper la connexion de données USB, mais il ne peut pas couper l'alimentation et nous ne considérons pas ce périphérique pris en charge.Après la mise hors tension du port USB, udev ne reçoit aucun événement, il conserve donc les fichiers de l'appareil. Cependant, tenter d'accéder aux fichiers de l'appareil entraînera une erreur d'E/S.
Il s'agit d'un problème de noyau Linux et il est résolu depuis uhubctl 2.5.0 pour les systèmes dotés d'un noyau Linux 6.0 ou version ultérieure.
Si vous utilisez toujours Linux 5.x ou une version antérieure, vous pouvez utiliser cette solution de contournement pour ce problème :
sudo uhubctl -a off -l ${location} -p ${port}
sudo udevadm trigger --action=remove /sys/bus/usb/devices/${location}.${port}/
Le fichier de périphérique sera supprimé par udev, mais le périphérique USB sera toujours visible dans lsusb
. Notez que le chemin /sys/bus/usb/devices/${location}.${port}
n'existera que si le périphérique a été détecté sur ce port. Lorsque vous remettez sous tension, l'appareil doit être réénuméré correctement (pas besoin d'appeler à nouveau udevadm
).
Certains pilotes de périphériques du noyau sont surpris par la désactivation du périphérique USB et tentent automatiquement de le rallumer.
Il s'agit d'un problème de noyau Linux et il est résolu depuis uhubctl 2.5.0 pour les systèmes dotés d'un noyau Linux 6.0 ou version ultérieure.
Si vous utilisez toujours Linux 5.x ou une version antérieure :
Vous pouvez utiliser l'option -r N
, où N est un nombre compris entre 10 et 1000 pour résoudre ce problème - uhubctl
essaiera de couper l'alimentation plusieurs fois de suite, et il devrait supprimer cela.
La désactivation de l'autorisation USB pour le périphérique en question avant de couper l'alimentation avec uhubctl
devrait aider :
echo 0 > sudo tee /sys/bus/usb/devices/${location}.${port}/authorized
Si votre appareil est un stockage de masse USB, invoquer udisksctl
avant d'appeler uhubctl
devrait également aider :
sudo udisksctl power-off --block-device /dev/disk/...`
sudo uhubctl -a off ...
De nombreux fabricants de hubs construisent leurs hubs USB à l’aide de puces USB de base à 4 ports. Par exemple, pour créer un hub à 7 ports, ils connectent en série deux hubs à 4 ports - 1 port est perdu lors de la connexion en série, cela en fait donc un hub 4+4-1=7 ports. De même, un hub à 10 ports pourrait être construit sous la forme de 3 hubs à 4 ports connectés en série, ce qui donne 4+4+4-2=10 ports utilisables.
Notez que vous ne devez jamais essayer de modifier l’état d’alimentation des ports utilisés pour connecter en série les hubs internes. Cela confondrait les circuits internes du hub et provoquerait un comportement imprévisible.
C'est la limitation de la conception matérielle du Raspberry Pi. Pour contourner le problème, vous pouvez acheter n'importe quel hub USB externe dans la liste prise en charge ci-dessus, le connecter à n'importe quel port USB du Raspberry Pi et contrôler l'alimentation de ses ports indépendamment. Il existe également des hubs pris en charge spécialement conçus pour Raspberry Pi, par exemple UUGear MEGA4.
Pour référence, les modèles Raspberry Pi pris en charge ont la topologie USB interne suivante :
Hub unique 1-1
, ports 2-5 regroupés, tous contrôlés par le port 2
:
uhubctl -l 1-1 -p 2 -a 0
Essayer de contrôler les ports 3
, 4
, 5
ne fera rien. Le port 1
contrôle l’alimentation pour Ethernet+WiFi.
Hub principal 1-1
, les 4 ports regroupés, tous contrôlés par le port 2
(désactive également les ports du hub secondaire). Le port 1
connecte le hub 1-1.1
ci-dessous, les ports 2
et 3
sont câblés à l'extérieur, le port 4
non câblé.
uhubctl -l 1-1 -p 2 -a 0
Hub secondaire 1-1.1
(connecté en série au principal) : 3 ports, le port 1
est utilisé pour Ethernet+WiFi et les ports 2
et 3
sont câblés à l'extérieur.
️ Si le firmware de votre VL805 est antérieur à00137ad
(vérifiez avecsudo rpi-eeprom-update
), vous devez mettre à jour le firmware pour que la commutation d'alimentation fonctionne sur le RPi 4B.
Hub USB2 1
, 1 port, connecte uniquement le hub 1-1
ci-dessous.
Hub USB2 1-1
, 4 ports regroupés, double vers hub USB3 2
ci-dessous :
uhubctl -l 1-1 -a 0
Hub USB3 2
, 4 ports regroupés, double vers le hub USB2 1-1
ci-dessus :
uhubctl -l 2 -a 0
Hub USB2 3
, 1 port, contrôleur OTG. La commutation d'alimentation n'est pas prise en charge.
Raspberry Pi 5 dispose de deux ports USB2 et de deux ports USB3 (4 au total). Ces ports sont connectés à 4 hubs USB distincts 1
, 2
, 3
, 4
dans une configuration vraiment étrange (mais en fonction du système d'exploitation et de la révision matérielle, les hubs intéressants peuvent être 2
, 3
, 4
, 5
). Si un périphérique USB3 est connecté à la prise bleue, il sera détecté sur le hub USB3 2
ou 4
. Si un périphérique USB2 est connecté à une prise ou un périphérique USB3 connecté à une prise noire, il sera détecté sur le hub USB2 1
ou 3
. Quel que soit le type de connexion USB2/USB3, les prises bleues sont toujours le port 1
et les prises noires sont toujours le port 2
.
Chacun des 4 hubs USB intégrés annonce prendre en charge la commutation d'alimentation par port, mais ce n'est pas vrai. En réalité, les 4 ports du Raspberry Pi 5 sont regroupés en un seul groupe, bien qu'ils appartiennent à 4 hubs USB logiques différents.
Pour désactiver l'alimentation VBUS, elle doit être désactivée sur tous les hubs et ports intégrés avec :
uhubctl -l 2 -a 0
uhubctl -l 4 -a 0
Pour le réactiver :
uhubctl -l 2 -a 1
uhubctl -l 4 -a 1
Notez que l'alimentation VBUS ne diminue que si tous les ports sont désactivés - l'activation d'un seul port active le retour VBUS pour les 4 ports.
Projet | Description |
---|---|
Lumière USB code Morse | Flasher un message en code Morse avec la lumière USB |
Lumière USB de la webcam | Allumer/éteindre la LED lorsque la webcam est allumée/éteinte |
Visionneuse de cinéma | Activer/désactiver Cinema Lightbox à partir de l'application iOS Home |
Voyant d'état de construction | Créez un voyant d'état de construction en moins de 10 minutes |
Lumières construites | Statut de construction du projet GitLab/GitHub comme feu vert/rouge |
Station météo | Réinitialiser la station météo lorsqu'elle gèle |
sysmoQMOD | Réinitialiser les modems cellulaires si nécessaire |
Capteur de pollution | Réinitialisation de l'alimentation du capteur de smog basé sur Raspberry Pi |
Terrible grappe | Allumer/éteindre les nœuds du cluster Raspberry Pi selon les besoins |
Serveur de musique idéal | Désactivez les ports USB inutilisés pour améliorer la qualité audio |
Clés USB sans charge fantôme | Alimentez les clés USB uniquement lorsque cela est nécessaire pour économiser de l'énergie |
Récupération de données sur clé USB | Récupérer les données d'un disque dur USB défaillant |
Contrôler l'alimentation de l'imprimante 3D | Plugin Web OctoPrint pour le contrôle de l'alimentation USB |
Ventilateur USB pour Raspberry Pi | Contrôlez le ventilateur USB pour éviter la surchauffe du Raspberry Pi |
Routeur de redémarrage Raspberry Pi | Redémarrez automatiquement le routeur si Internet ne fonctionne pas |
Contrôler la lampe USB avec la voix | Contrôle vocal de la lampe USB à l'aide de Siri et Raspberry Pi |
Contrôler la bande LED USB | Contrôler la bande lumineuse LED alimentée par USB |
Brasser de la bière avec Raspberry Pi | Système de brassage de bière automatisé utilisant Raspberry Pi |
Panneau de webcam en direct | Allumer automatiquement un panneau lorsque la webcam est utilisée |
Faites-le vous-même PPPS | Fils à souder dans votre hub USB pour prendre en charge uhubctl |
Hub PPPS open source | Projet matériel open source pour hub compatible uhubctl |
Wrapper Python pour uhubctl | Module pour utiliser uhubctl avec Python |
grille de laboratoire | Framework pour tester Linux embarqué sur le matériel |
Copyright (C) 2009-2024 Vadim Mikhaïlov
Ce fichier peut être distribué selon les termes et conditions de la licence publique générale GNU version 2.