Desativar LAN9512

35

O LAN9512 é o dispositivo de hardware que controla as portas Ethernet e USB. Esse chip consome quase 200mA e será muito útil desativá-lo para economizar energia quando não precisar de USB ou Ethernet. A folha de dados do LAN9512 explica alguns estados do dispositivo para economizar energia - esses modos são SUSPEND2, SUSPEND1 e SUSPEND0. Portanto, parece ser possível.

Eu já encontrei uma solução parcial:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerefetivamente desabilitará o dispositivo e o ativará novamente com echo 0x1o mesmo arquivo. No entanto, depois que o dispositivo for parado e iniciado um certo número de vezes, ele não será ativado novamente até a próxima reinicialização do sistema operacional.

Existe um método para desativar o LAN9512 e iniciá-lo novamente de maneira confiável? (Talvez eu possa recarregar algum driver que controla LAN9512?)

Motivação

Quando um modelo raspberry pi B está ocioso, ele consome 400 mA. Quando está estressado, 470mA. Quando o LAN9512 é desativado, ele consome 200mA em modo inativo e 260mA estressado.

Outras

  • Eu testei a confiabilidade de desativar o chip através da "potência do barramento" usando um script que desativa o LAN9512, tenta montar um dispositivo USB para verificar a atividade e reinicializações. Até agora, o raspberry pi foi reinicializado 9222 vezes sem erros.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendDesativa o LAN9512 Mas não o reativará ao fazer echo 0o mesmo arquivo. Depois de desativá-lo, o raspberry pi fica extremamente lento, relatando uma média de carga de até 4.
aleixrocks
fonte
11
Só por curiosidade; O consumo de energia diminui quando você o desativa, usando um dos comandos acima?
Gerben 18/07/2013
2
Sim! Os arquivos de potência de barramento e bussuspend reduzem o consumo de 200mA. Quando um pi framboesa está ocioso, ele consome 400 mA. Quando está estressado, 470mA. Com o chip desativado, ele consome 200mA em modo inativo e 260mA estressado.
Aleixrocks
Muito legal. Te agradece. Desculpe, não posso ajudar embora
Gerben
Apenas curioso: se você desabilita o USB e a Ethernet, como envia o comando de ativação? Com um cron-job ou depois de dormir?
Moshe Katz
Eu prefiro dormir por simplicidade. Durante a depuração, uso "echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sleep 2; eco 0x1> / sys / devices / platform / bcm2708_usb / buspower; sleep 30; reinicie". Assim, se o USB não acordar, ele será reiniciado automaticamente. "sleep 2" é apenas para dar algum tempo ao hardware para reagir.
Aleixrocks

Respostas:

7

Depois de fazer algumas experiências, fiz o seguinte para experimentar:

Cabo USB para TTL / Debug com 5V via multímetro.

Inicialização normal na tela de login com apenas a energia e a rede conectadas foi de cerca de 420-380Ma

Primeiro desliguei a rede via /etc/init.d/networking stope, em seguida, o chip echo 0 > /sys/devices/platform/bcm2708_usb/buspowere, de fato, caiu para ~ 240Ma

Eu também fui capaz de executar ping no google sem sucesso! (Qual é bom)

Em seguida, liguei novamente ecoando 1 na energia do barramento e executando o comando de inicialização da rede. E mais uma vez eu voltei para 370-420ma. O ping do google funcionou.

Em seguida, coloquei isso em um arquivo SH que fez um loop e durou mais de 10 vezes sem precisar ser reiniciado. No seu comando, eu podia vê-lo reiniciando toda vez, não importando o motivo de você colocar o comando reboot.

O código para o teste pode ser encontrado na pasta Ubuntu do código de reinicialização automática.

Isso pode simplesmente ser usado para parar e começar. Você poderia fazer a primeira parte como um comando de parada e a segunda parte como um comando de início.

Também fiz uma redação completa deste @ My Blog

Ryanteck
fonte
Esse é apenas o problema. Mais cedo ou mais tarde, você precisará reiniciar porque o LAN9512 para de funcionar. Estou procurando uma solução que não precise ser reinicializada. (No meu script, eu reiniciava todas as vezes apenas se o teclado para de funcionar, porque pouco antes de reiniciar eu tentei matar manualmente o script. Se o teclado funciona, eu poderia matá-lo com ctrl + c. Caso contrário, ele apenas reinicia)
aleixrocks
Bem, como eu disse, testei bem mais de 50 vezes no final, em um loop constante, com cada um trabalhando para o ping da rede. Talvez o teclado precise apenas ser conectado novamente ou o USB precise ser redefinido? Como outros disseram, não foi projetado para isso. Se puder, é um bônus. Portanto, uma das razões para o Modelo A
Ryan Walmsley
No meu caso, ele não dura mais que 10 loops todas as vezes que eu executei seu script. Tentei conectar novamente o USB e ainda não funcionou. Não faço ideia por que essa diferença talvez seja o meu pi de framboesa. Seria ótimo se alguém mais pudesse tentar.
Aleixrocks
3

O recurso de desativar e ativar o LAN9512 através de:

  • eco 0x0> / sys / devices / platform / bcm2708_usb / buspower (desativar)
  • eco 0x1> / sys / devices / platform / bcm2708_usb / buspower (ativar)

Foi depurado nos kernels mais recentes e agora está funcionando perfeitamente sem modificações. Eu criei alguns scripts para testá-lo.

O objetivo do primeiro é testar a desativação por meio do recurso de software. O script desativa o LAN9512 e tenta montar um dispositivo USB. Se puder, o teste falhará. Caso contrário, o teste será bem-sucedido. Finalmente, reinicie e comece novamente. O script está em execução há quatro dias e relatou 8039 reinicializações sem falhas no raspbian 2013-9-25.

O segundo script destina-se a testar o recurso de habilitação. Primeiro de tudo, o script desabilita o LAN9512. Aguarde alguns segundos para deixar o pi descansar. A seguir, habilita o LAN9512 e, finalmente, tenta executar o comando "lsusb". Ele lista todos os dispositivos USB. Se o kernel puder reconhecer todos os dispositivos USB, o LAN9512 estará funcionando novamente. Caso contrário, o teste falhou. O teste está em execução há uma semana e relatou 7209 loops sem erros no raspbian 2013-9-25 e 5374 loops no raspbian 2014-1-7.

Núcleos e firmwares

No raspbian 2014-1-7:

kernel: Linux raspberrypi 3.10.25+ # 622 PREEMPT Sex Jan 3 18:41:00 GMT 2014 armv6l firmware GNU / LINUX: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (limpo) (versão)

No raspbian 2013-9-25

kernel: Linux raspberrypi 3.6.11+ # 538 PREEMPT Sex ago 30 20:42:08 BST 2013 armv61 firmware GNU / LINUX: 4f9d19896166f46a3255801bc1834561bf092732 (versão limpa)

aleixrocks
fonte
"O recurso de desativar e ativar o LAN9512 foi depurado nos kernels mais recentes." Você pode relatar qual kernel e firmware você viu que permitem milhares de ciclos de suspensão / ativação bem-sucedidos? Obrigado! Estou interessado no progresso em direção a um Pi mais sonolento!
Tai Viinikka
1

As respostas acima estavam corretas quando oferecidas, mas em algum momento em 2015, o Raspbian fez alterações e os usuários interessados ​​tiveram que procurar os controles relevantes.

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

Meus agradecimentos ao usuário Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian

Tai Viinikka
fonte
Oi Tai! Você poderia fornecer alguma referência para os usuários interessados? Qual pi de framboesa você está usando?
Aleixrocks