Désactiver LAN9512

35

Le LAN9512 est le périphérique matériel qui contrôle les ports Ethernet et USB. Cette puce consomme près de 200 mA et il sera très utile de la désactiver pour économiser de l’énergie lorsque je n’ai pas besoin d’USB ou d’Ethernet. La fiche technique du LAN9512 explique certains états de l'appareil permettant d'économiser de l'énergie. Ces modes sont SUSPEND2, SUSPEND1 et SUSPEND0. Par conséquent, cela semble possible.

J'ai déjà trouvé une solution partielle:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerva effectivement désactiver le périphérique et le réactiver avec echo 0x1le même fichier. Cependant, une fois que le périphérique a été arrêté et démarré un certain nombre de fois, il ne se réveillera pas avant le prochain redémarrage du système d'exploitation.

Existe-t-il une méthode pour désactiver le LAN9512 et le redémarrer de manière fiable? (Peut-être que je peux recharger un pilote qui contrôle le LAN9512?)

Motivation

Lorsqu'un modèle B de framboise B est inactif, il consomme 400 mA. Quand c'est stressé, 470mA. Lorsque le LAN9512 est désactivé, il consomme 200 mA au repos et 260 mA au stress.

Autres

  • J'ai testé la fiabilité de la désactivation de la puce via "buspower" en utilisant un script qui désactive le LAN9512, tente de monter un périphérique USB pour vérifier l'activité et redémarre. Jusqu'à présent, le Raspberry Pi a redémarré 9222 fois sans erreur.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendDésactive le LAN9512, mais ne le réveille plus lorsque vous utilisez echo 0le même fichier. Après l'avoir désactivé, le framboise pi devient extrêmement lent, signalant une charge moyenne allant jusqu'à 4.
aleixrocks
la source
1
Juste par curiosité; La consommation d'énergie diminue-t-elle lorsque vous la désactivez en utilisant l'une des commandes ci-dessus?
Gerben
2
Oui! Les fichiers buspower et bussuspend réduisent la consommation de 200 mA. Lorsqu'un pi de framboise est inactif, il consomme 400 mA. Quand c'est stressé, 470mA. Lorsque la puce est désactivée, elle consomme 200 mA au ralenti et 260 mA au stress.
aleixrocks
Vraiment sympa. Merci. Désolé, je ne peux rien faire contre ça
Gerben
Juste curieux: si vous désactivez USB et Ethernet, comment envoyez-vous la commande de réveil? Avec un cron-job ou après un sommeil?
Moshe Katz
Je préfère dormir pour la simplicité. Pendant le débogage, j'utilise "echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sommeil 2; echo 0x1> / sys / devices / platform / bcm2708_usb / buspower; sommeil 30; redémarrage". Ainsi, si USB ne se réveille pas, il redémarrera automatiquement. "sleep 2" est juste pour donner un peu de temps au matériel pour réagir.
aleixrocks

Réponses:

7

Après avoir expérimenté moi-même, j’ai fait ce qui suit:

Câble USB vers TTL / Débogage avec 5V via multimètre.

Le démarrage normal à l’écran de connexion avec seulement l’alimentation et le réseau connecté était d’environ 420-380Ma

J'ai d'abord désactivé le réseau via /etc/init.d/networking stop, puis la puce par echo 0 > /sys/devices/platform/bcm2708_usb/buspoweret effectivement, il est descendu à ~ 240Ma

J'ai également réussi à cingler Google sans succès! (Ce qui est bon)

Je l'ai ensuite rallumé en renvoyant 1 à l'alimentation du bus et en exécutant la commande de démarrage du réseau. Et encore une fois j'étais de retour vers 370-420ma. Pinging google a ensuite travaillé.

J'ai ensuite mis cela dans un fichier SH qui a bouclé et qui a duré plus de 10 fois sans avoir besoin d'être redémarré. Dans votre commande, je pouvais le voir redémarrer à chaque fois, peu importe ce qui se passait, du fait que vous mettiez la commande de redémarrage en place.

Le code du test peut être trouvé @ Ubuntu Collez du code de redémarrage automatique.

Cela peut alors simplement être utilisé pour arrêter et démarrer. Vous pouvez faire la première partie en tant que commande d'arrêt et la deuxième partie en tant que commande de démarrage.

J'ai aussi rédigé un article complet sur ce @ mon blog

Ryanteck
la source
C'est juste le problème. Tôt ou tard, vous devez redémarrer car le LAN9512 cesse de fonctionner. Je cherche une solution qui n'a pas besoin de redémarrer. (Sur mon script, je ne redémarrais chaque fois que si le clavier cessait de fonctionner, car juste avant de redémarrer, j'ai essayé de tuer manuellement le script. Si le clavier fonctionne, vous pouvez le tuer avec ctrl + c. Sinon, il suffit de redémarrer)
aleixrocks
Eh bien, comme je l'ai dit, je l'ai testé plus de 50 fois à la fin sur une boucle constante, chacune travaillant pour le ping réseau. Peut-être que le clavier doit simplement être reconnecté ou que la clé USB doit être réinitialisée? Comme d'autres l'ont dit, ce n'est pas conçu pour ça. Si c'est possible, c'est un bonus. D'où l'une des raisons du modèle A
Ryan Walmsley le
Dans mon cas, il ne dure pas plus de 10 boucles toutes les fois où j'ai exécuté votre script. J'ai essayé de brancher à nouveau l'USB et je n'ai toujours pas fonctionné. Aucune idée pourquoi cette différence est peut-être mon pi framboise. Ce serait bien si quelqu'un d'autre pouvait essayer.
aleixrocks
3

La fonctionnalité de désactivation et d'activation de l'abonné LAN9512:

  • echo 0x0> / sys / devices / platform / bcm2708_usb / buspower (désactiver)
  • echo 0x1> / sys / devices / platform / bcm2708_usb / buspower (activé)

A été débogué sur les nouveaux noyaux et fonctionne maintenant parfaitement sans modifications. J'ai fait quelques scripts pour le tester.

Le premier objectif est de tester la désactivation via une fonctionnalité logicielle. Le script désactive le LAN9512 et tente de monter un périphérique USB. Si c'est le cas, le test échoue. Sinon, le test réussit. Enfin, redémarre et recommence. Le script est en cours d'exécution depuis quatre jours et a signalé 8039 redémarrages sans échec sur Raspbian 2013-9-25.

Le second script est destiné à tester la fonctionnalité d'activation. Tout d'abord, le script désactive le LAN9512. Puis attend quelques secondes pour laisser le pi reposer. Ensuite, il active le LAN9512 et enfin, il essaie d'exécuter la commande “lsusb”. Il répertorie tous les périphériques USB. Si le noyau peut reconnaître tous les périphériques USB, le LAN9512 fonctionne à nouveau. Sinon, le test a échoué. Le test a duré une semaine et a signalé 7209 boucles sans erreurs sur le Raspbian 2013-9-25 et 5374 boucles sur le Raspbian 2014-1-7.

Cerneaux et firmwares

Sur Raspbian 2014-1-7:

Noyau: Linux raspberrypi 3.10.25+ # 622 PREEMPT Vendredi 3 janvier 18:41:00 Firmware GNU / LINUX armv6l pour: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (version récente)

Sur Raspbian 2013-9-25

Noyau: Linux raspberrypi 3.6.11+ # 538 PREEMPT Vendredi 30 août 20:42:08 BST 2013 firmware de GNU / LINUX: 4f9d19896166f46a3255801bc1834561bf092732 (clean) (release)

aleixrocks
la source
"La fonctionnalité de désactivation et d'activation de LAN9512 a été déboguée sur les nouveaux noyaux." Pouvez-vous indiquer le noyau et le microprogramme que vous avez vus qui permettent des milliers de cycles veille / veille réussis? Merci! Je suis intéressé par les progrès vers un Pi plus endormi!
Tai Viinikka
1

Les réponses ci-dessus étaient correctes lorsqu'elles étaient proposées, mais à un moment donné en 2015, Raspbian a apporté des modifications et les utilisateurs intéressés ont dû rechercher les contrôles appropriés.

Off:  echo 0x0 > /sys/devices/platform/soc/20980000.usb/buspower   
 On:  echo 0x1 > /sys/devices/platform/soc/20980000.usb/buspower

Mes remerciements à l'utilisateur Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian

Tai Viinikka
la source
Salut Tai! Pourriez-vous fournir une référence pour les utilisateurs intéressés? Quelle pi framboise utilisez-vous?
aleixrocks