Disabilita LAN9512


35

LAN9512 è il dispositivo hardware che controlla le porte Ethernet e USB. Questo chip consuma quasi 200 mA e sarà molto utile disabilitarlo per risparmiare energia quando non ho bisogno di USB o Ethernet. La scheda tecnica LAN9512 spiega alcuni stati del dispositivo per risparmiare energia: queste modalità sono SUSPEND2, SUSPEND1 e SUSPEND0. Pertanto, sembra essere possibile.

Ho già trovato una soluzione parziale:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerdisabiliterà efficacemente il dispositivo e lo riattiverà nuovamente con echo 0x1lo stesso file. Tuttavia, una volta che il dispositivo è stato arrestato e avviato un certo numero di volte, non si riattiverà fino al successivo riavvio del sistema operativo.

Esiste un metodo per disabilitare LAN9512 e riavviarlo in modo affidabile? (Forse posso ricaricare un driver che controlla LAN9512?)

Motivazione

Quando un lampone pi modello B è inattivo, consuma 400 mA. Quando è stressato, 470mA. Quando la LAN9512 è disabilitata, consuma 200 mA in idle e 260 mA sollecitata.

Altri

  • Ho testato la fattibilità della disabilitazione del chip tramite "buspower" utilizzando uno script che disabilita la LAN9512, tenta di montare un dispositivo USB per verificare l'attività e si riavvia. Fino ad ora, il raspberry pi ha riavviato 9222 volte senza errori.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendDisabilita LAN9512 Ma non lo riattiverà di nuovo quando si esegue echo 0lo stesso file. Dopo averlo disabilitato, il raspberry pi diventa estremamente lento riportando una media di carico fino a 4.

1
Solo per curiosità; Il consumo di energia diminuisce quando lo si disabilita, utilizzando uno dei comandi sopra?
Gerben,

2
Sì! I file buspower e bususpend riducono il consumo di 200 mA. Quando un lampone pi è inattivo, consuma 400 mA. Quando è stressato, 470mA. Con il chip disabilitato, consuma 200mA in idle e 260mA stressati.
aleixrocks,

Veramente bello. Grazie. Mi dispiace non posso fare a meno però
Gerben,

Solo curioso: se disabiliti USB ed Ethernet, come invii il comando wakeup? Con un cron-job o dopo un sonno?
Moshe Katz,

Preferisco dormire per semplicità. Durante il debug, utilizzo "echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sleep 2; echo 0x1> / sys / devices / platform / bcm2708_usb / buspower; sleep 30; reboot". Pertanto, se l'USB non si riattiva, si riavvierà automaticamente. "sleep 2" è solo per dare un po 'di tempo all'hardware per reagire.
aleixrocks,

Risposte:


7

Dopo aver fatto alcuni esperimenti per conto mio, ho fatto quanto segue per sperimentare:

Cavo da USB a TTL / Debug con 5 V tramite multimetro.

L'avvio normale alla schermata di accesso con solo l'alimentazione e la rete connesse era di circa 420-380Ma

Ho prima disattivato la rete tramite /etc/init.d/networking stope poi il chip echo 0 > /sys/devices/platform/bcm2708_usb/buspowere in effetti è sceso a ~ 240Ma

Sono stato anche in grado di eseguire il ping di Google senza successo! (Che è buono)

L'ho quindi riacceso facendo eco 1 all'alimentazione del bus ed eseguendo il comando di avvio della rete. E ancora una volta sono tornato a circa 370-420 ma. Il ping di Google ha quindi funzionato.

Ho quindi inserito questo in un file SH che è stato eseguito in loop ed è durato più di 10 volte senza che sia necessario riavviare. Nel tuo comando ho potuto vederlo riavviare ogni volta, non importa cosa ti fosse dovuto, inserendo il comando reboot.

È possibile trovare il codice per il test @ Ubuntu Paste del codice di riavvio automatico.

Questo può quindi essere semplicemente usato per fermarsi e avviarsi. È possibile eseguire la prima parte come comando di arresto e la seconda parte come comando di avvio.

Ho anche scritto tutto questo @ My Blog


Questo è solo il problema. Prima o poi, è necessario riavviare perché LAN9512 smette di funzionare. Sto cercando una soluzione che non deve essere riavviata. (Sul mio script ho riavviato ogni volta solo se la tastiera smette di funzionare, perché appena prima di riavviare ho provato a uccidere manualmente lo script. Se la tastiera funziona potrei ucciderlo con ctrl + c. In caso contrario, si riavvia e basta)
aleixrocks

Bene, come ho detto, l'ho provato ben oltre 50 volte alla fine su un ciclo costante con ognuno funzionante per il ping di rete. Forse è necessario ricollegare la tastiera o USB deve essere ripristinato? Come altri hanno già detto che non è progettato per questo. Se può, è un bonus. Da qui uno dei motivi per il Modello A
Ryan Walmsley il

Nel mio caso, dura non più di 10 loop tutte le volte che ho eseguito il tuo script. Ho provato a ricollegare USB e ancora non ha funzionato. Non ho idea del perché questa differenza sia forse il mio lampone pi. Sarebbe felice se qualcun altro potesse provare.
aleixrocks

3

La funzionalità di disabilitazione e abilitazione di LAN9512 tramite:

  • echo 0x0> / sys / devices / platform / bcm2708_usb / buspower (disabilita)
  • echo 0x1> / sys / devices / platform / bcm2708_usb / buspower (abilita)

È stato eseguito il debug sui kernel più recenti e ora funziona perfettamente senza modifiche. Ho fatto un paio di script per testarlo.

Lo scopo del primo è testare la disabilitazione tramite la funzione software. Lo script disabilita la LAN9512 e tenta di montare un dispositivo USB. In tal caso, il test ha esito negativo. In caso contrario, il test ha esito positivo. Alla fine si riavvia e ricomincia. Lo script è in esecuzione da quattro giorni e ha segnalato 8039 riavvii senza errori su raspbian 25-25 2013.

Il secondo script ha lo scopo di testare la funzione di abilitazione. Prima di tutto, lo script disabilita la LAN9512. Quindi attende alcuni secondi per far riposare il pi. Successivamente abilita la LAN9512 e infine tenta di eseguire il comando "lsusb". Elenca tutti i dispositivi USB. Se il kernel è in grado di riconoscere tutti i dispositivi USB, allora la LAN9512 funziona di nuovo. In caso contrario, il test non è riuscito. Il test ha funzionato per una settimana e ha riportato 7209 loop senza errori su raspbian 25/09/2013 e 5374 loop su raspbian 2014-1-7.

Gherigli e firmware

Su raspbian 2014-1-7:

kernel: Linux raspberrypi 3.10.25+ # 622 PREEMPT ven 3 gen 18:41:00 GMT 2014 firmware armv6l GNU / LINUX: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (clean) (release)

Su raspbian 25/09/2013

kernel: Linux raspberrypi 3.6.11+ # 538 PREEMPT ven 30 ago 20:42:08 BST 2013 armv61 GNU / LINUX firmware: 4f9d19896166f46a3255801bc1834561bf092732 (clean) (release)


"La funzionalità di disabilitazione e abilitazione di LAN9512 è stata sottoposta a debug sui kernel più recenti." Puoi segnalare quale kernel e firmware hai visto che consentono migliaia di cicli sleep / wake di successo? Grazie! Sono interessato ai progressi verso un Pi più addormentabile!
Tai Viinikka,

1

Queste risposte sono state esatte quando sono state offerte, ma qualche tempo nel 2015 Raspbian ha apportato modifiche e gli utenti interessati hanno dovuto cercare i relativi controlli.

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

I miei ringraziamenti all'utente Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian


Ciao Tai! Potresti fornire qualche riferimento per gli utenti interessati? Quale raspberry pi stai usando?
aleixrocks,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.