Parameter und Faktoren, die die grundlegende Stromaufnahme eines Raspberry-Pi-Systems im Wesentlichen bestimmen, sind die Höhe der Taktfrequenzen und der Prozessorspannung sowie die Effizienz der eingesetzten Spannungsregler. Beim Raspberry Pi gibt es drei entscheidende Taktfrequenzen: Die des Arm-Prozessorkerns (CPU), die des Grafikprozessors (GPU) und die des Arbeitsspeichers (SDRAM), die sich alle aus einem Quarzoszillator von 19,2 MHz ableiten. Eine Veränderung der Frequenzeinstellungen lässt sich sehr einfach mit einem Editor in der Datei /boot/config.txt (Bild 3, am Ende der Datei, gekennzeichnet durch _freq) vornehmen. Nach jeder Änderung ist die Konfigurationsdatei zu speichern und ein Neuboot auszuführen.
Durch Über- und Untertakten sind theoretisch CPU-Frequenzen im Bereich von 40 MHz bis über 1500 MHz möglich. Grundsätzlich ist bei den Modellen mit 700 MHz noch etwas Spielraum, während mit den Modellen 3A+ und 3B+, die mit einem CPU-Takt von 1400 MHz sowie der 4B mit 1500 MHz arbeiten, wo das vertretbare Maximum erreicht ist. Bei diesen Typen ist zur Kühlung ein Kühlblech (Heat Spreader) montiert. Falls ein anderes Modell höher getaktet werden soll, ist die Montage eines entsprechenden Kühlkörpers für die zusätzliche Wärmeabfuhr notwendig. Eine Übertaktung, um eine vermeintlich höhere Rechenleistung zu erzielen, ist nicht empfehlenswert.
Anhand der Messwerte in Bild 4, die mit dem Modell 3B ermittelt wurden, ist zu erkennen, dass eine Verringerung der CPU-Frequenz auf 450 MHz sinnvoll sein kann, womit man bis zu 50 mA einsparen kann. Bei geringeren Frequenzen erhöht sich die Bootzeit, bei höheren steigt die Stromaufnahme stark an. Die GPU-Frequenz beträgt laut Voreinstellung 250 MHz und lässt sich bis auf maximal 500 MHz festlegen. Die GPU-Frequenz gpu_freq (GPU Core Frequency) setzt sich aus vier verschiedenen GPU-Teilfrequenzen zusammen, die sich auch einzeln konfigurieren lassen. Hierfür ist die Zeile in der Konfigurationsdatei mit der Angabe gpu_freq auszukommentieren (#-Präfix) und durch die Angaben core_freq, isp_freq, h264_freq und v3d_freq zu ersetzen.
| Modell | Max. (Boot) | Run (Idle) | Shutdown (Halt Mode) | RUN enable (Reset hold) | PEN enable (hold) |
|---|---|---|---|---|---|
| B | 450 mA | 340 mA | 112 mA | ||
| A | 230 mA | 136 mA | 36 mA | ||
| B+ | 250 mA | 210 mA | 57 mA | ||
| A+ | 140 mA | 95 mA | 29 mA | ||
| 2B | 400 mA | 265 mA | 80 mA | ||
| 3B | 450 mA | 270 mA | 92 mA | 160 mA | |
| 3B+ | 680 mA | 460 mA | 107 mA | 160 mA | 6 mA |
| 3A+ | 360 mA | 230 mA | 107 mA | 160 mA | 10 mA |
| Zero W | 230 mA | 130 mA | 40 mA | 12,7 mA | |
| Zero | 200 mA | 95 mA | 35 mA | 3 mA | |
| 4B (1 GByte) | 850 mA | 570 mA | 23 mA | 370 mA | 14 mA |
| 4B (4 GByte) | 830 mA | 560 mA | 23 mA | 327 mA | 14 mA |
Tabelle 3: Gemessene Stromaufnahme der verschiedenen Raspberry-Pi-Versionen.
Durch das Verringern dieser Frequenzen reduziert sich die Stromaufnahme. Weil die Leistung der GPU für Embedded-Applikationen üblicherweise nicht von Bedeutung ist, ist hierfür nur die Minimalfrequenz zu ermitteln, mit der das System noch stabil funktioniert. Ein minimaler Wert von 160 MHz ergibt sich für die GPU-Frequenz als praktikable Lösung, denn eine weitere Reduzierung führt automatisch dazu, dass wieder die Default-Werte aktiviert werden. Bei einer Einstellung von 160 MHz sowie jeweils 40 MHz für die vier GPU-Teilfrequenzen ergibt sich eine Stromersparnis von etwa 25 mA.
Die Einstellung sdram_freq beträgt üblicherweise 400 MHz. Es ist zu beobachten, dass eine Verringerung auf unter 300 MHz nicht zu einem reduzierten, sondern zu einer erhöhten Stromaufnahme führt und die Stabilität des Systems nicht mehr gewährleistet ist. Bei einer Einstellung von sdram_freq = 360 (MHz) scheint das Optimum zu liegen. Der Idle-Strom ist im Übrigen nahezu unabhängig von den verschiedenen Frequenzeinstellungen. Die Spannung, die der CPU und der GPU intern zur Verfügung steht, wird chip-intern erzeugt und beträgt zunächst 1,2 V. In der Konfigurationsdatei lassen sich mit der Option over_voltage Spannungen von 0,8 V bis 1,4 V einstellen. Der jeweilige Wert ist eine Ganzzahl zwischen minimal -16 und maximal 8. Die Schrittweite beträgt damit 0,025 V, sodass eine granulare Festlegung möglich ist.
Für die Bootzeit und die Höhe des Stroms in Abhängigkeit von der CPU- und GPU-Spannung gilt grundsätzlich ein ähnliches Verhalten, wie es zuvor für die Taktfrequenzen beschrieben wurde. Eine niedrigere Spannung hat eine längere Bootzeit zur Folge, aber einen niedrigeren Strom; während eine höhere Spannung eine kürzere Bootzeit, aber dafür einen höheren Strom bedeutet. Da auch hier aufgrund des relativ kleinen Verhältnisses von Idle-Zeit zu Bootzeit die Bootzeit der ausschlaggebende Faktor für einen niedrigen Energieverbrauch ist, sollte man die CPU- und die GPU-Spannung nicht kleiner als 1,075 V wählen.
Die mögliche Stromersparnis durch Verändern der SDRAM-Spannung ist äußerst gering und beeinflusst die Bootzeit nur unwesentlich. Eine zu geringe Spannung hat ein instabil laufendes System zur Folge, das unter Umständen nicht einmal mehr komplett bootet, weshalb sich die Veränderung der SDRAM-Spannung nicht dazu eignet, die Stromaufnahme zu optimieren. Typischerweise muss man die SDRAM-Spannung bei einem Übertakten anheben, was aber − wie erwähnt − keinen Sinn macht. Durch geschickte Kombination der erläuterten Takt- und Spannungsanpassungen sind deutliche Stromeinsparungen möglich. Es ist allerdings nötig, eine gewisse Sicherheitsreserve mit einzukalkulieren, damit das System weiterhin stabil und zuverlässig ohne störende Bootverzögerungen funktioniert.
Externe Low-Power-Steuerung
Beim Raspberry 2B ist erstmalig Platz für einen Header vorhanden, der einen Massekontakt und einen mit RUN bezeichneten Kontakt führt. Hier kann man einen zweipoligen Steckpfosten montieren, an den sich ein Reset-Taster anschließen lässt. Durch seine Betätigung wird der RUN-Kontakt (Bild 5) auf Masse gezogen, was einen manuellen Reset des Raspberry Pi auslöst. Solange sich der RUN-Pin auf Masse befindet, ist der SoC angehalten und verbraucht dann ca. 30 mA bis 100 mA an Strom, was vom jeweiligen Modell abhängig ist (Tabelle 3). Dies ist das gleiche Verhalten wie nach der Ausführung des Befehls shutdown.
Beim Raspberry Pi 3+ ist der Kontakt neben RUN mit PEN (Power Enable) beschriftet. Dieser Pin befindet sich im Normalbetrieb auf High-Potenzial. Wenn dieser Pin auf Low-Potenzial (Masse) geschaltet wird, verweilt der PMIC (MXL7704) in einen stromsparenden Modus, der nur noch circa 10 mA beansprucht. Dabei leuchtet die Power-LED, wie bei der Auslösung von RUN, weiterhin. Diese Funktion kann von externen Schaltungen genutzt werden, um den Raspberry Pi schlafen zu legen. Die Anschlüsse RUN und PEN dürfen aufgrund ihrer unterschiedlichen Funktion demnach nicht miteinander verbunden werden, obwohl sie direkt nebeneinander angeordnet sind, wie es auch beim RUN- oder dem Reset-Header der Fall ist. Die beiden Anschlüsse darf man nur einzeln mit einem Massekontakt (an der GPIO-Leiste) kontaktieren beziehungsweise auf Low-Potenzial setzen.
Diese ungünstige Positionierung des RUN- und PEN-Kontaktes gibt es beim Raspberry Pi 4 nicht mehr. Beide Anschlüsse befinden sich als J2 am linken Rand der Platine neben dem DSI-Anschluss. Zwischen diesen beiden Kontakten ist jetzt ein Masse-Pin vorhanden (Bild 6), der PEN-Pin ist dabei in GLOBAL_EN umbenannt worden. Mit den genannten Header-Pins lässt sich ein Raspberry Pi in einen Low-Power-Modus schicken, wofür etwa ein stromsparender Timer-Chip [4] wie die Echtzeituhr AB18X5 von Abracon geeignet ist. Dieser sorgt dafür, dass der Raspberry Pi zu bestimmten Zeiten aufwacht, seine Aufgabe, etwa eine Sensormessung, ausführt und sich danach wieder schlafen legt. (kv)
REFERENZEN
[1] Klaus Dembowski, Raspberry Pi – Das technische Handbuch, 3. Auflage, Springer Verlag
[2] David Welch, Raspberry Pi Bare Metal Examples, https://github.com/dwelch67/raspberrypi
[3] Raspberry Pi Foundation, Overcloking Options https://bit.ly/32Mnmxs
[4] Klaus Dembowski, Der Low/No-Power-Schalter, Design & Elektronik, 4/2016