Deaktivieren Sie LAN9512

35

Das LAN9512 ist das Hardwaregerät, das die Ethernet- und USB-Anschlüsse steuert. Dieser Chip verbraucht fast 200 mA und es ist sehr nützlich, ihn zu deaktivieren, um Energie zu sparen, wenn ich weder USB noch Ethernet benötige. Das LAN9512-Datenblatt erläutert einige Zustände des Geräts, um Energie zu sparen. Diese Modi sind SUSPEND2, SUSPEND1 und SUSPEND0. Daher scheint es möglich zu sein.

Ich habe bereits eine Teillösung gefunden:

  • echo 0x0 > /sys/devices/platform/bcm2708_usb/buspowerwird das Gerät effektiv deaktivieren und mit echo 0x1der gleichen Datei wieder aufwecken . Sobald das Gerät jedoch einige Male gestoppt und gestartet wurde, wird es erst beim nächsten Neustart des Betriebssystems wieder aktiviert.

Gibt es eine Methode, um LAN9512 zu deaktivieren und es zuverlässig neu zu starten? (Kann ich möglicherweise einen Treiber neu laden, der LAN9512 steuert?)

Motivation

Wenn ein Himbeer-Pi-Modell B im Leerlauf ist, verbraucht es 400 mA. Wenn es gestresst ist, 470mA. Wenn das LAN9512 deaktiviert ist, verbraucht es im Leerlauf 200 mA und ist überlastet mit 260 mA.

Andere

  • Ich habe die Funktionsfähigkeit des Deaktivierens des Chips durch "Buspower" mit einem Skript getestet, das das LAN9512 deaktiviert, versucht, ein USB-Gerät zu aktivieren, um auf Aktivität zu prüfen, und einen Neustart durchzuführen. Bis jetzt hat der Himbeer-Pi 9222-mal ohne Fehler neu gestartet.
  • echo 1 > /sys/devices/platform/bcm2708_usb/bussuspendDeaktiviert das LAN9512, weckt es jedoch nicht erneut, wenn echo 0dieselbe Datei verwendet wird. Nach dem Deaktivieren wird der Himbeer-Pi extrem langsam und gibt einen Lastdurchschnitt von bis zu 4 an.
Aleixrocks
quelle
1
Nur aus Neugier; Verringert sich der Stromverbrauch, wenn Sie ihn mit einem der oben genannten Befehle deaktivieren?
Gerben
2
Ja! Sowohl Buspower- als auch Bussuspend-Dateien reduzieren den Stromverbrauch um 200 mA. Wenn ein Himbeer-Pi im Leerlauf ist, verbraucht er 400 mA. Wenn es gestresst ist, 470mA. Wenn der Chip deaktiviert ist, verbraucht er 200 mA im Leerlauf und 260 mA im belasteten Zustand.
Aleixrocks
Wirklich nett. Danke. Tut mir leid, aber ich kann nicht anders
Gerben
Nur neugierig: Wenn Sie USB und Ethernet deaktivieren, wie senden Sie den Weckbefehl? Mit einem Cronjob oder nach dem Schlafen?
Moshe Katz
Der Einfachheit halber schlafe ich lieber. Während des Debuggens verwende ich "echo 0x0> / sys / devices / platform / bcm2708_usb / buspower; sleep 2; echo 0x1> / sys / devices / platform / bcm2708_usb / buspower; sleep 30; reboot". Wenn USB nicht aufwacht, wird es automatisch neu gestartet. "sleep 2" dient nur dazu, der Hardware etwas Zeit zu geben, um zu reagieren.
Aleixrocks

Antworten:

7

Nachdem ich einige Experimente selbst gemacht habe, habe ich Folgendes gemacht, um zu experimentieren:

USB zu TTL / Debug Kabel mit 5V über Multimeter.

Der normale Start beim Login-Bildschirm, bei dem nur die Stromversorgung und das Netzwerk verbunden waren, betrug ca. 420-380 MB

Ich habe zuerst das Networking über /etc/init.d/networking stopund dann den Chip über ausgeschaltet echo 0 > /sys/devices/platform/bcm2708_usb/buspowerund tatsächlich ging es auf ~ 240Ma runter

Ich konnte auch erfolglos Google anpingen! (Was gut ist)

Ich schaltete es dann wieder ein, indem ich 1 an die Busstromversorgung zurücksendete und den Netzwerkstartbefehl ausführte. Und wieder war ich zurück bei 370-420mA. Google pingen hat dann funktioniert.

Ich habe dies dann in eine SH-Datei eingefügt, die sich in einer Schleife befand und mehr als zehn Mal dauerte, ohne dass ein Neustart erforderlich war. In Ihrem Befehl konnte ich sehen, dass es jedes Mal neu gestartet wurde, egal was passiert, weil Sie den Neustartbefehl eingegeben haben.

Den Code für den Test finden Sie unter Ubuntu Paste des Autostart-Codes.

Dies kann dann einfach zum Stoppen und Starten verwendet werden. Sie können den ersten Teil als Stoppbefehl und den zweiten Teil als Startbefehl ausführen.

Ich habe dieses @ My Blog auch vollständig aufgeschrieben

Ryanteck
quelle
Das ist nur das Problem. Früher oder später müssen Sie einen Neustart durchführen, da das LAN9512 nicht mehr funktioniert. Ich suche nach einer Lösung, die nicht neu gestartet werden muss. (In meinem Skript habe ich jedes Mal neu gestartet, wenn die Tastatur nicht mehr funktioniert, da ich kurz vor dem Neustart versucht habe, das Skript manuell zu beenden. Funktioniert die Tastatur, kann ich es mit Strg + C beenden. Wenn nicht, wird es einfach neu
gestartet.
Nun, wie gesagt, ich habe es am Ende mehr als 50 Mal in einer konstanten Schleife getestet, wobei jedes Mal für den Netzwerk-Ping gearbeitet hat. Vielleicht muss die Tastatur einfach wieder eingesteckt oder der USB zurückgesetzt werden? Wie andere gesagt haben, ist es nicht dafür ausgelegt. Wenn es geht, ist es ein Bonus. Daher einer der Gründe für das Model A
Ryan Walmsley
In meinem Fall dauert es nicht länger als 10 Schleifen, wenn ich Ihr Skript ausgeführt habe. Ich habe versucht, wieder USB anzuschließen und immer noch nicht funktioniert. Keine Ahnung, warum dieser Unterschied vielleicht mein Himbeer-Pi ist. Es wäre großartig, wenn jemand anderes mehr versuchen könnte.
Aleixrocks
3

Die Funktion zum Deaktivieren und Aktivieren von LAN9512 durch:

  • echo 0x0> / sys / devices / platform / bcm2708_usb / buspower (deaktivieren)
  • echo 0x1> / sys / devices / platform / bcm2708_usb / buspower (aktivieren)

Wurde auf den neueren Kerneln getestet und funktioniert nun einwandfrei ohne Änderungen. Ich habe ein paar Skripte erstellt, um es zu testen.

Der erste Zweck besteht darin, die Deaktivierung über die Softwarefunktion zu testen. Das Skript deaktiviert das LAN9512 und versucht, ein USB-Gerät bereitzustellen. Wenn dies möglich ist, schlägt der Test fehl. Wenn nicht, ist der Test erfolgreich. Schließlich wird neu gestartet und neu gestartet. Das Skript wird seit vier Tagen ausgeführt und meldet 8039 fehlerfreie Neustarts auf raspbian 2013-9-25.

Das zweite Skript dient zum Testen der Aktivierungsfunktion. Zunächst deaktiviert das Skript das LAN9512. Wartet dann einige Sekunden, um den Pi ruhen zu lassen. Anschließend wird das LAN9512 aktiviert und schließlich versucht, den Befehl "lsusb" auszuführen. Es werden alle USB-Geräte aufgelistet. Wenn der Kernel alle USB-Geräte erkennt, funktioniert das LAN9512 wieder. Wenn nicht, ist der Test fehlgeschlagen. Der Test hat eine Woche gedauert und 7209 fehlerfreie Schleifen für Raspbian 2013-9-25 und 5374 fehlerfreie Schleifen für Raspbian 2014-1-7 gemeldet.

Kernel und Firmwares

Am raspbian 2014-1-7:

Kernel: Linux raspberrypi 3.10.25+ # 622 PREEMPT Fr Jan 3 18:41:00 GMT 2014 armv6l GNU / LINUX-Firmware: b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (sauber) (Veröffentlichung)

Auf Himbeer 2013-9-25

Kernel: Linux raspberrypi 3.6.11+ # 538 PREEMPT Fr Aug 30 20:42:08 BST 2013 armv61 GNU / LINUX-Firmware: 4f9d19896166f46a3255801bc1834561bf092732 (sauber) (Veröffentlichung)

Aleixrocks
quelle
"Die Funktion zum Deaktivieren und Aktivieren von LAN9512 wurde auf den neueren Kerneln getestet." Können Sie angeben, welchen Kernel und welche Firmware Sie gesehen haben, die Tausende von erfolgreichen Schlaf- / Wach-Zyklen ermöglichen? Vielen Dank! Ich bin an Fortschritten in Richtung eines schläfrigeren Pi interessiert!
Tai Viinikka
1

Diese Antworten waren korrekt, als sie angeboten wurden, aber irgendwann im Jahr 2015 nahm Raspbian Änderungen vor und interessierte Benutzer mussten nach den entsprechenden Steuerelementen suchen.

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

Mein Dank geht an User Adrian! https://raspberrypi.stackexchange.com/users/37611/adrian

Tai Viinikka
quelle
Hi Tai! Könnten Sie den interessierten Nutzern eine Referenz geben? Welches Himbeer-Pi verwendest du?
Aleixrocks