ClusterHAT: Pi Zeros mit Strom versorgen, wenn Pi 4 neugestartet wird
· christian · linux, raspberry pi
Der ClusterHAT erlaubt das Verbinden von bis zu vier Raspberry Pi Zeros über einen integrierten USB Hub mit einem normalen Raspberry Pi. Mit dem USB Ethernet Gadget Feature können die Pi Zeros via Ethernet mit dem Raspberry Pi kommunizieren.
Einen Raspberry Pi 3 konnte man neustarten, ohne dass die Pi Zeros davon etwas mitbekommen haben. Nach Wechsel auf einen Raspberry Pi 4 verloren die Pi Zeros allerdings ihre Stromversorgung und stürzten ab.
Dieser Artikel beschreibt einen Workaround für den ClusterHAT v2.3 mit einem Raspberry Pi 4 und dem neusten Raspbian (Debian Buster).
Teil 1: Energieeinstellungen in der Firmware
Erstes Problem war das geänderte Verhalten in der Firmware. Um Strom zu sparen schaltet der Raspberry Pi nach dem Herunterfahren diverse Funktionen ab. Abhängig von der Firmware Version müssen diese Stromsparfunktionen wieder deaktiviert werden.
# so it should look like
root@clusterberry:~# vcgencmd bootloader_config | grep -P "(WAKE_ON_GPIO|POWER_OFF_ON_HALT)"
WAKE_ON_GPIO=1
POWER_OFF_ON_HALT=0
Siehe die Dokumentation der Firmware Einstellungen
Wenn die Einstellungen nicht korrekt gesetzt sind, verursacht dies eine Unterbrechung der Stromversorgung am 3.3V GPIO Pin, welcher den I2C Expander des ClusterHAT versorgt. Ebenso kann der 5V Pin betroffen sein.
Um die Einstellungen zu ändern, muss die Konfiguration aus der Firmware extrahiert werden und nach der Anpassung neu geflasht werden.
# extract the configuration from the
# eeprom image into a text file
rpi-eeprom-config /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-04-16.bin > bootconf.txt
# set WAKE_ON_GPIO=1
# set POWER_OFF_ON_HALT=0
vim bootconf.txt
# create a new eeprom image for the new configuration
rpi-eeprom-config --out pieeprom-2020-04-16-bb.bin --config bootconf.txt /lib/firmware/raspberrypi/bootloader/critical/pieeprom-2020-04-16.bin
# flash the image
rpi-eeprom-update -d -f pieeprom-2020-04-16-bb.bin
# reboot
sudo reboot
# check if the config is applied
vcgencmd bootloader_config
Mehr Details zum flashen von Firmwares
Teil 1.5: 3.3V Strom weiterhin instabil
Wegen eines anderen Problems wird die 3.3V Stromversorgung weiterhin unterbrochen, sofern ein HAT mit dem Raspberry Pi verbunden ist. Der Workaround ist das Setzen eines Kernel Flags.
Das Flag sdhci.debug_quirks2=4
muss an das Ende der Zeile in /boot/cmdline.txt
ergänzt werden:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=9dc0f4ed-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait sdhci.debug_quirks2=4
The sdhci.debug_quirks2=4 disables ‘1.8V’ mode for SD card, so that makes UHS SD cards to be used at lower speeds, but this config also prevents power being cut off on the GPIO’s 3.3V supply, avoiding the reboot issue.
Teil 2: Instabile 5V Versorgung
Nächster Punkt ist die instabile 5V Stromversorgung. Manchmal wird diese unterbrochen, manchmal nicht. Es ist also eine gute Idee, den ClusterHAT mit einer eigenen Stromversorgung zu versehen.
Standardmäßig wird der HAT über 5V GPIO mit Strom versorgt. Mit dem PWR
Jumper kann dies geändert werden. Die Verbindung zwischen RPi
und PWR
muss mit einem Skalpell unterbrochen werden, anschließend muss die Verbindung
zwischen USB
und PWR
mit einem Lötkolben hergestellt werden.
Nun kann der HAT über den MicroUSB Port mit Strom versorgt werden. Mit einem selbst hergestellten USB Kabel ist es nun möglich, den HAT mit Strom vom Netzteil zu versorgen und trotzdem die Datenleitungen mit dem USB Port des Raspberry Pi zu verbinden.
Das Kabel versorgt Raspberry Pi und ClusterHAT von einem gemeinsamen Netzteil mit Strom,
die beiden Datenleitungen Data+
und Data-
werden trotzdem mit einem der USB Ports des
Raspberry Pi 4 verbunden, sodass der USB Hub des HAT weiterhin funktioniert.
Nun kann jede Komponente des Clusters neugestartet werden, ohne das eine andere davon beeinträchtigt wird.
Vorsicht: Es muss ein “dummes” Netzteil verwendet werden, da das Kabel ausschließlich die Stromleitungen mit HAT und Raspberry Pi verbindet. Es ist also keine “smart negotiation” möglich. Zum Beispiel funktioniert es mit dem offiziellen Netzteil der Raspberry Pi Foundation ohne Probleme.
ClusterHAT v2.4 löst das Problem
Dieser Beitrag sagt, dass die neuere Version 2.4 des HATs das Problem löst, und somit keine Hacks mehr nötig sind.