Avvio e arresto GPIO di Raspberry Pi 4 B
Ho fatto alcune ricerche sui pulsanti di accensione per il Raspberry Pi, ma ho difficoltà a trovare informazioni. In questo momento, ho un pulsante che funziona su GPIO5 e quando lo collego al pin GND opposto, il Pi si avvia. Ho aggiunto la linea dtoverlay=gpio-shutdownal mio /boot/config.txt, in modo da poter chiudere anche con questa connessione. Tuttavia, ho un paio di domande a cui ho difficoltà a trovare una risposta.
- L'arresto viene avviato collegando il pin GPIO3 e il pin GND considerato uno spegnimento sicuro? Il sistema finirà di scrivere in memoria, ecc., Proprio come con
sudo shutdown? - So che posso cambiare il pin per lo spegnimento, passando
dtoverlay=gpio-shutdownadtoverlay=gpio-shutdown,gpio-pin=X, ma c'è un modo per cambiare anche il pin per l'avvio? Considerando che GPIO3 è normalmente utilizzato per I2C.
Risposte
Non conosco la risposta completa a tutte le tue domande, quindi questa è una risposta parziale .
Q1:
L'arresto viene avviato collegando il pin GPIO3 e il pin GND considerato uno spegnimento sicuro?
Ricordo di aver sentito di problemi associati all'uso di GPIO per l'arresto, ma alcune informazioni recenti suggeriscono che questa funzione funziona come dovrebbe se il sistema è configurato correttamente, cioè se configurato correttamente, l'arresto è "sicuro". Ovviamente il modo senza hardware per spegnere l'RPI è dallo schermo o dalla CLI tramite sudo shutdown, sudo halto sudo poweroff.
Q2:
So che posso cambiare il pin per l'arresto, cambiando dtoverlay = gpio-shutdown in dtoverlay = gpio-shutdown, gpio-pin = X, ma c'è un modo per cambiare anche il pin per l'avvio?
Non è necessario utilizzare un pin GPIO per riavviare RPi da uno stato di arresto. La documentazione afferma:
WAKE_ON_GPIO
Se 1, 'sudo halt' verrà eseguito in una modalità di alimentazione inferiore fino a quando GPIO3 o GLOBAL_EN non vengono cortocircuitati a massa.
Predefinito: 1 (0 nella versione originale del bootloader 2019-05-10) Versione: tutti
POWER_OFF_ON_HALT
Se 1 e WAKE_ON_GPIO = 0, disattivare tutte le uscite PMIC in arresto. Questo è lo stato di alimentazione più basso possibile per l'arresto, ma potrebbe causare problemi con alcuni HAT perché 5V sarà ancora acceso. GLOBAL_EN deve essere cortocircuitato a terra per l'avvio.
Predefinito: 0 Versione: 2019-07-15
La mia interpretazione della documentazione di cui sopra è questa: un breve cortocircuito GLOBAL_ENa massa riavvierà / riavvierà l'RPi indipendentemente da come WAKE_ON_GPIOe POWER_OFF_ON_HALTsono impostati. Il GLOBAL_ENnodo è mostrato nella foto sotto:
L'operazione è spiegata in /boot/overlays/README
È abbastanza sicuro, ce l'ho su tutto il mio Pi nel caso in cui avessi bisogno di spegnere un Pi headless (o uno senza tastiera collegata), anche se il mio Pi raramente si spegne, a meno che non sto aggiungendo hardware.
Lo uso in dtoverlay=gpio-shutdown,gpio_pin=21modo da poterlo spegnere collegando i pin 39/40
Name: gpio-shutdown
Info: Initiates a shutdown when GPIO pin changes. The given GPIO pin
is configured as an input key that generates KEY_POWER events.
…
This overlay only handles shutdown. After shutdown, the system
can be powered up again by driving GPIO3 low. The default
configuration uses GPIO3 with a pullup, so if you connect a
button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
you get a shutdown and power-up button. Please note that
Raspberry Pi 1 Model B rev 1 uses GPIO1 instead of GPIO3.
Load: dtoverlay=gpio-shutdown,<param>=<val>
Params: gpio_pin GPIO pin to trigger on (default 3)
For Raspberry Pi 1 Model B rev 1 set this
explicitly to value 1, e.g.:
dtoverlay=gpio-shutdown,gpio_pin=1
active_low When this is 1 (active low), a falling
edge generates a key down event and a
rising edge generates a key up event.
When this is 0 (active high), this is
reversed. The default is 1 (active low).
gpio_pull Desired pull-up/down state (off, down, up)
Default is "up".
Note that the default pin (GPIO3) has an
external pullup. Same applies for GPIO1
on Raspberry Pi 1 Model B rev 1.
debounce Specify the debounce interval in milliseconds
(default 100)