Desactivar LAN9512

35

El LAN9512 es el dispositivo de hardware que controla los puertos Ethernet y USB. Este chip consume casi 200 mA, y será muy útil deshabilitarlo para ahorrar energía cuando no necesite USB o Ethernet. La hoja de datos LAN9512 explica algunos estados del dispositivo para ahorrar energía: estos modos son SUSPEND2, SUSPEND1 y SUSPEND0. Por lo tanto, parece ser posible.

Ya he encontrado una solución parcial:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerdeshabilitará efectivamente el dispositivo y lo reactivará con echo 0x1el mismo archivo. Sin embargo, una vez que el dispositivo se haya detenido e iniciado un cierto número de veces, no se volverá a activar hasta el próximo reinicio del sistema operativo.

¿Existe algún método para deshabilitar LAN9512 y volver a iniciarlo de manera confiable? (¿Tal vez puedo volver a cargar algún controlador que controla LAN9512?)

Motivación

Cuando una frambuesa pi modelo B está inactiva, consume 400 mA. Cuando está estresado, 470mA. Cuando el LAN9512 está desactivada, consume 200 mA en reposo y 260mA subrayó.

Otros

  • He probado la fiabilidad de deshabilitar el chip a través de "buspower" mediante el uso de un script que deshabilita el LAN9512, intenta montar un dispositivo usb para verificar la actividad y reinicia. Hasta ahora, la frambuesa pi ha reiniciado 9222 veces sin errores.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendDesactiva el LAN9512 Pero no se despierta de nuevo cuando se hace echo 0en el mismo archivo. Después de su desactivación, el pi frambuesa va extremadamente lento informar de un seguimiento promedio de carga a 4.
aleixrocks
fuente
1
Solo por curiosidad; ¿Cae el consumo de energía cuando lo deshabilita, usando uno de los comandos anteriores?
Gerben
2
¡Sí! Los archivos buspower y bussuspend reducen el consumo en 200 mA. Cuando una frambuesa pi está inactiva, consume 400 mA. Cuando está estresado, 470mA. Con el chip deshabilitado, consume 200 mA en inactivo y 260 mA estresado.
aleixrocks
Muy agradable. Gracias. Lo siento, no puedo ayudar, sin embargo
Gerben
Solo curiosidad: si deshabilita USB y Ethernet, ¿cómo envía el comando de activación? ¿Con un trabajo cron o después de dormir?
Moshe Katz
Prefiero dormir por simplicidad. Durante la depuración, uso "echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sleep 2; echo 0x1> / sys / devices / platform / bcm2708_usb / buspower; sleep 30; reiniciar". Por lo tanto, si el USB no se activa, se reiniciará automáticamente. "dormir 2" es solo para darle algo de tiempo al hardware para que reaccione.
aleixrocks

Respuestas:

7

Después de experimentar un poco por mi cuenta, hice lo siguiente para experimentar:

Cable USB a TTL / Debug con 5V a través del multímetro.

El arranque normal en la pantalla de inicio de sesión con solo la alimentación y la red conectadas fue de aproximadamente 420-380Ma

Primero apagué la red a través /etc/init.d/networking stopy luego el chip echo 0 > /sys/devices/platform/bcm2708_usb/buspowery, de hecho, se redujo a ~ 240Ma

¡También pude hacer ping a Google sin éxito! (Lo que es bueno)

Luego lo volví a encender haciendo eco 1 a la alimentación del bus y ejecutando el comando de inicio de red. Y una vez más volví a alrededor de 370-420ma. Pinging google luego funcionó.

Luego puse esto en un archivo SH que se repitió y duró más de 10 veces sin necesidad de reiniciar. En su comando, pude ver que se reinicia cada vez que pase lo que pase debido a que usted puso el comando de reinicio.

El código para la prueba se puede encontrar en Ubuntu Paste del código de reinicio automático.

Esto simplemente se puede usar para detener y comenzar. Puede hacer la primera parte como un comando de detención y la segunda parte como un comando de inicio.

También hice una redacción completa de este @ My Blog

Ryanteck
fuente
Ese es solo el problema. Tarde o temprano, debe reiniciar porque el LAN9512 deja de funcionar. Estoy buscando una solución que no necesite reiniciar. (En mi script reinicié todas las veces solo si el teclado deja de funcionar, porque justo antes de reiniciar intenté eliminar el script manualmente. Si el teclado funciona, podría eliminarlo con ctrl + c. Si no, simplemente reiniciar)
aleixrocks
Bueno, como dije, lo probé más de 50 veces al final en un bucle constante con cada uno trabajando para el ping de la red. ¿Quizás el teclado solo necesita enchufarse nuevamente o el USB necesita reiniciarse? Como otros han dicho, no está diseñado para eso. Si puede es un bono. De ahí una de las razones para el Modelo A
Ryan Walmsley
En mi caso, no dura más de 10 bucles todas las veces que ejecuté su script. Intenté enchufar nuevamente USB y aún no funcionó. No tengo idea de por qué esta diferencia quizás sea mi frambuesa pi. Sería mejor si alguien más pudiera intentarlo.
aleixrocks
3

La característica de deshabilitar y habilitar el canal LAN9512:

  • echo 0x0> / sys / devices / platform / bcm2708_usb / buspower (deshabilitar)
  • echo 0x1> / sys / devices / platform / bcm2708_usb / buspower (habilitar)

Se ha depurado en los núcleos más nuevos y ahora funciona perfectamente sin modificaciones. He hecho un par de guiones para probarlo.

El propósito del primero es probar la desactivación a través de la función de software. El script deshabilita el LAN9512 e intenta montar un dispositivo USB. Si puede, entonces la prueba falla. Si no, entonces la prueba tiene éxito. Finalmente reinicia y comienza de nuevo. El script ha estado ejecutándose durante cuatro días y ha informado 8039 reinicios sin fallas en raspbian 2013-9-25.

El segundo script está destinado a probar la función de habilitación. En primer lugar, el script deshabilita el LAN9512. Luego espera unos segundos para dejar que el pi descanse. A continuación, activa el LAN9512 y finalmente intenta ejecutar el comando "lsusb". Enumera todos los dispositivos USB. Si el núcleo puede reconocer todos los dispositivos USB, entonces el LAN9512 está funcionando nuevamente. Si no, la prueba ha fallado. La prueba se ha estado ejecutando durante una semana e informó 7209 bucles sin errores en raspbian 2013-9-25 y 5374 bucles en raspbian 2014-1-7.

Granos y firmwares

En raspbian 2014-1-7:

kernel: Linux raspberrypi 3.10.25+ # 622 PREEMPT Vie 3 de enero 18:41:00 GMT 2014 armv6l GNU / LINUX firmware: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (limpio) (lanzamiento)

En raspbian 2013-9-25

kernel: Linux raspberrypi 3.6.11+ # 538 PREEMPT Vie 30 de agosto 20:42:08 BST 2013 armv61 GNU / LINUX firmware: 4f9d19896166f46a3255801bc1834561bf092732 (limpio) (lanzamiento)

aleixrocks
fuente
"La característica de deshabilitar y habilitar LAN9512 se ha depurado en los núcleos más nuevos". ¿Puede informar qué núcleo y firmware ha visto que permiten miles de ciclos exitosos de sueño / vigilia? ¡Gracias! ¡Estoy interesado en el progreso hacia un Pi más tranquilo!
Tai Viinikka
1

Estas respuestas anteriores fueron correctas cuando se ofrecieron, pero en algún momento de 2015, Raspbian realizó cambios y los usuarios interesados ​​tuvieron que buscar los controles relevantes.

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

¡Gracias al usuario Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian

Tai Viinikka
fuente
Hola tai ¿Podría proporcionar alguna referencia para los usuarios interesados? ¿Qué raspberry pi estás usando?
aleixrocks