Perché alcuni pin GPIO sono ALTI all'avvio di Raspberry Pi?


18

Ho un circuito semplice cablato, con un LED collegato al pin 18 sul riferimento BOARD. Eseguo un semplice programma per mettere il pin 18 su ALTO, che accende il LED, e poi un paio di secondi dopo, imposto il pin 18 su BASSO, e infine finisco il mio programma con GPIO.cleanup ().

A questo punto il LED è spento, il che significa che il pin 18 è spento (LOW). Ora riavvio o riavvio il mio Raspberry Pi e quando si avvia il backup, il LED sul pin 18 si riaccende, anche se il pin era spento prima di riavviare il Raspberry Pi.

Perché questo potrebbe accadere? Come posso configurare un pin specifico, come il pin 18, per essere spento all'avvio di Raspberry Pi? E non voglio che nessun pin GPIO sia su ALTO all'avvio di Raspberry Pi.

Sono preoccupato per questo problema, perché diciamo che il pin 18 è collegato a un motore CC su un robot e quando il Raspberry Pi si avvia, il motore si accenderà e questo non è qualcosa che voglio perché interferirà con l'intera struttura del robot e alcuni motori potrebbero avviarsi e altri no, a seconda dei pin a cui sono collegati. Voglio accendere manualmente tutti i motori in modo sincronizzato.

Un'altra cosa è che non tutti i pin hanno questo problema. Alcuni rimangono fuori quando Raspberry Pi si avvia, ma altri no.


Quel LED è acceso come lo sarebbe quando lo si imposta in alto o si illumina debolmente?
Riccioli d'oro

Vi sono 3,3 volt applicati ad esso.
Viktor Raspberry,

Quindi, se entrate /sys/class/gpioed esportate il pin 18, in quale stato il sistema dice che si trova se non cambiate nulla?
riccioli d'oro

Quando scrivo "/ sys / class / gpio", dice "-bash: / sys / class / gpio: Is a directory". Non sono sicuro di come esportare un pin specifico.
Viktor Raspberry,

Ci sono un sacco di spiegazioni di ciò , quindi non mi preoccuperò di rigurgitare. Quell'esempio è piuttosto pesante sul echo, che scrive, cioè, imposta qualcosa. Dopo averlo esportato si desidera astenersi da quello e basta usare cat, che legge, per controllare la direzione e il valore.
riccioli d'oro

Risposte:


25

All'accensione i GPIO vengono tirati in alto o in basso attraverso i resistori interni. Se il pull è alto o basso per un determinato GPIO è dettagliato a pagina 102 delle periferiche ARM BCM2835 .

All'avvio del kernel Linux e se l'albero dei dispositivi è abilitato (probabilmente), riconfigurerà i GPIO in base alle impostazioni dell'albero dei dispositivi. I moduli caricati da /etc/modulespotrebbero anche aggiornare lo stato GPIO.

Qualsiasi altro software in esecuzione all'avvio potrebbe potenzialmente riconfigurare i GPIO a seguito delle impostazioni dell'albero dei dispositivi e dei carichi del modulo.

È più sicuro trovare una soluzione hardware se si dispone di hardware che potrebbe essere avviato in modo errato all'avvio del sistema.



2

So che è abbastanza tardi. Rispondere. Puoi scrivere uno script Python o uno script bash che imposta manualmente il pin su basso e pianifica l'esecuzione di un processo cron ad ogni avvio. Non sarà necessario modificare alcun file di sistema / critico. A parte cron

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.