Wyłącz LAN9512

35

LAN9512 to urządzenie sprzętowe kontrolujące porty Ethernet i USB. Ten układ zużywa prawie 200 mA i bardzo przydatne będzie jego wyłączenie, aby oszczędzać energię, gdy nie potrzebuję USB ani Ethernet. Karta danych LAN9512 wyjaśnia niektóre stany urządzenia w celu oszczędzania energii - te tryby to SUSPEND2, SUSPEND1 i SUSPEND0. Dlatego wydaje się to możliwe.

Znalazłem już częściowe rozwiązanie:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerskutecznie wyłączy urządzenie i wznowi je z echo 0x1tym samym plikiem. Jednak gdy urządzenie zostanie zatrzymane i uruchomione określoną liczbę razy, nie obudzi się ponownie, aż do następnego ponownego uruchomienia systemu operacyjnego.

Czy istnieje metoda wyłączenia LAN9512 i niezawodnego ponownego uruchomienia? (Może mogę ponownie załadować sterownik, który kontroluje LAN9512?)

Motywacja

Gdy raspberry pi model B jest bezczynny, zużywa 400 mA. Kiedy jest obciążony, 470mA. Kiedy LAN9512 jest wyłączony, zużywa 200 mA w stanie bezczynności i 260 mA obciążony.

Inne

  • Przetestowałem wiarygodność wyłączenia układu za pomocą „buspower” za pomocą skryptu, który wyłącza LAN9512, próbuje zamontować urządzenie USB w celu sprawdzenia aktywności i restartuje się. Do tej pory Raspberry Pi restartował się 9222 razy bez błędów.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendWyłącza LAN9512, ale nie uruchamia się ponownie podczas wykonywania echo 0tego samego pliku. Po wyłączeniu Raspberry Pi działa wyjątkowo wolno, zgłaszając średnią ładunek do 4.
aleixrocks
źródło
1
Z czystej ciekawości; Czy zużycie energii spada po wyłączeniu go za pomocą jednego z powyższych poleceń?
Gerben
2
Tak! Zarówno pliki buspower, jak i bussuspend zmniejszają zużycie 200mA. Gdy raspberry pi jest bezczynne, zużywa 400 mA. Kiedy jest obciążony, 470mA. Gdy układ jest wyłączony, zużywa 200 mA na biegu jałowym i 260 mA obciążony.
aleixrocks
Bardzo miłe. Dzięki Ci. Przepraszam, że nie mogę pomóc
Gerben,
Ciekawe: jeśli wyłączysz USB i Ethernet, jak wyślesz polecenie budzenia? Z cronem czy po spaniu?
Moshe Katz,
Wolę spać dla prostoty. Podczas debugowania używam „echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sleep 2; echo 0x1> / sys / devices / platform / bcm2708_usb / buspower; sleep 30; restart”. Dlatego jeśli USB się nie obudzi, uruchomi się ponownie automatycznie. „sleep 2” ma dać sprzętowi czas na reakcję.
aleixrocks

Odpowiedzi:

7

Po przeprowadzeniu własnych eksperymentów wykonałem następujące czynności w celu eksperymentowania:

Kabel USB do TTL / debugowania z 5 V przez multimetr.

Normalny rozruch przy ekranie logowania z podłączonym zasilaniem i siecią wynosił około 420-380Ma

Najpierw wyłączyłem sieć przez, /etc/init.d/networking stopa następnie układ scalony echo 0 > /sys/devices/platform/bcm2708_usb/buspoweri rzeczywiście spadł do ~ 240Ma

Byłem także w stanie bezskutecznie pingować google! (Który jest dobry)

Następnie włączyłem go ponownie, wysyłając echo 1 do zasilania magistrali i uruchamiając polecenie uruchomienia sieci. I znowu wróciłem do około 370-420ma. Pinging google następnie działało.

Następnie umieściłem to w zapętlonym pliku SH, który trwał ponad 10 razy bez konieczności ponownego uruchamiania. W twoim poleceniu widziałem, jak restartuje się za każdym razem, bez względu na to, co spowodowało, że włączyłeś polecenie restartu.

Kod do testu można znaleźć @ Ubuntu Wklej kod automatycznego restartu.

Można to następnie wykorzystać do zatrzymania i uruchomienia. Pierwszą część można wykonać jako polecenie zatrzymania, a drugą część jako polecenie uruchomienia.

Zrobiłem też pełny opis tego @ My Blog

Ryanteck
źródło
To tylko problem. Wcześniej czy później musisz zrestartować komputer, ponieważ LAN9512 przestaje działać. Szukam rozwiązania, które nie wymaga ponownego uruchamiania. (W moim skrypcie restartowałem się za każdym razem tylko wtedy, gdy klawiatura przestała działać, ponieważ tuż przed ponownym uruchomieniem próbowałem ręcznie zabić skrypt. To działa na klawiaturze, mogłem go zabić za pomocą ctrl + c. Jeśli nie, to po prostu zrestartuję się)
aleixrocks
Cóż, tak jak powiedziałem, przetestowałem to ponad 50 razy na końcu w stałej pętli, z których każda działa dla ping sieci. Może klawiatura wymaga ponownego podłączenia lub USB wymaga zresetowania? Jak powiedzieli inni, nie jest do tego przeznaczony. Jeśli może, to jego bonus. Stąd jeden z powodów Modelu A
Ryan Walmsley
W moim przypadku trwa to nie więcej niż 10 pętli za każdym razem, gdy wykonuję twój skrypt. Próbowałem ponownie podłączyć USB i nadal nie działałem. Nie mam pojęcia, dlaczego ta różnica może być moim malinowym pi. Byłoby miło, gdyby ktoś jeszcze mógł spróbować.
aleixrocks
3

Funkcja wyłączania i włączania koryta LAN9512:

  • echo 0x0> / sys / devices / platform / bcm2708_usb / buspower (wyłącz)
  • echo 0x1> / sys / devices / platform / bcm2708_usb / buspower (włącz)

Został debugowany na nowszych jądrach i teraz działa idealnie bez modyfikacji. Zrobiłem kilka skryptów, aby to przetestować.

Celem pierwszego z nich jest przetestowanie wyłączania za pomocą funkcji oprogramowania. Skrypt wyłącza LAN9512 i próbuje zamontować urządzenie USB. Jeśli to możliwe, test się nie powiedzie. Jeśli nie, test się powiedzie. Wreszcie uruchom ponownie i zacznij od nowa. Skrypt działa od czterech dni i zgłosił 8039 restartów bezawaryjnie na raspbian 2013-9-25.

Drugi skrypt służy do testowania funkcji włączającej. Przede wszystkim skrypt wyłącza LAN9512. Następnie odczekuje kilka sekund, aż pi będzie odpoczywać. Następnie włącza LAN9512, a na koniec próbuje wykonać polecenie „lsusb”. Zawiera listę wszystkich urządzeń USB. Jeśli jądro rozpoznaje wszystkie urządzenia USB, LAN9512 znów działa. Jeśli nie, test się nie powiódł. Test trwał przez tydzień i wykrył 7209 pętli bez błędów w raspbian 2013-9-25 i 5374 pętli w raspbian 2014-1-7.

Jądra i oprogramowanie układowe

W języku raspbian 2014-1-7:

jądro: Linux raspberrypi 3.10.25+ # 622 PREEMPT Pt 3 stycznia 18:41:00 GMT 2014 armv6l Oprogramowanie układowe GNU / LINUX: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (czyste) (wydanie)

Na raspbian 2013-9-25

jądro: Linux raspberrypi 3.6.11+ # 538 PREEMPT Pt 30 sierpnia 20:42:08 BST 2013 armv61 GNU / LINUX firmware: 4f9d19896166f46a3255801bc1834561bf092732 (czyste) (wydanie)

aleixrocks
źródło
„Funkcja wyłączania i włączania LAN9512 została debugowana w nowszych jądrach”. Czy możesz zgłosić, które jądro i oprogramowanie wewnętrzne, które widziałeś, pozwala tysiącom udanych cykli uśpienia / budzenia? Dzięki! Interesuje mnie postęp w kierunku bardziej śpiącego Pi!
Tai Viinikka
1

Powyższe odpowiedzi były poprawne, gdy były oferowane, ale w 2015 r. Raspbian wprowadził zmiany i zainteresowani użytkownicy musieli szukać odpowiednich elementów sterujących.

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

Moje podziękowania dla użytkownika Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian

Tai Viinikka
źródło
Cześć Tai! Czy możesz podać jakieś referencje dla zainteresowanych użytkowników? Z którego malinowego pi korzystasz?
aleixrocks