Qual è lo stato di accensione dei GPIO?


35

Qual è lo stato dei GPIO quando viene applicata l'alimentazione? ad esempio alta, bassa, alta z?

Inoltre, qualsiasi sistema operativo cambia lo stato di qualsiasi GPIO quando viene caricato? Spero di no.


A meno che non sia nel foglio dati, probabilmente dovresti misurarlo per sicurezza. Linux non "conosce" i GPIO, quindi non li cambierebbe durante l'avvio (a meno che tu non abbia creato uno script di avvio che lo ha fatto), ma c'è sempre una possibilità che la ROM potrebbe.
Malvineous,

@ Malvagio, non sei corretto. Linux è a conoscenza dei GPIO e il supporto è integrato nel kernel. Ecco un po 'di documentazione: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson,

2
@DustyWilson: scusate se non ero chiaro, intendevo dire che il kernel Linux principale non usa i GPIO durante l'avvio. Li rende disponibili solo per userspace e driver particolari. Quindi il kernel stock non dovrebbe alterare lo stato dei pin GPIO durante l'avvio.
Malvineous,

@ Malvagio: Ah, gotcha.
Emmaly Wilson,

Risposte:


11

Ho trovato la risposta qui grazie a russellstrong . Cito la parte pertinente di seguito

Ho saltato alle conclusioni sui miei resistori pull up / sensibilità del mio circuito ai resistori pull down. L'RPi non sta impostando l'output di GPIO al primo avvio. Sta attivando un resistore pull down per 740 millisecondi.

Ho usato due resistori 18K (3v3 -> GPIO -> GND) per vedere esattamente cosa sta succedendo con i pin. Ecco la traccia. La linea blu è potenza 3v3, la linea gialla è linea GPIO.

inserisci qui la descrizione dell'immagine


Puoi chiarire un po '? Quando il Raspberry Pi si avvia, i GPIO sono impostati su uno stato di input ad alta impedenza?
Alex Chamberlain,

1
@AlexChamberlain, Sembra che il chip broadcom si avvii con pulldown, ma il caricatore cancella i pulldown in modo che siano ad alta impedenza (input)
John La Rooy,

9

Quando si inizia a usare la distro Debian consigliata per RPi, GPIO è disabilitato. Devi abilitare ogni pin singolarmente.

Se lo stai facendo tramite / sys troverai interessanti "Paths in Sysfs" (cerca in http://www.kernel.org/doc/Documentation/gpio.txt ). In particolare, abiliterai un pin "esportandolo". Tutti i comandi sottostanti presuppongono che tu stia eseguendo i privilegi di root (sudo o altro) o che tu abbia cambiato le autorizzazioni / proprietà dei file virtuali da modificare.

echo 4 > /sys/class/gpio/export

Questo abilita il pin GPIO n. 4 che quindi fa sì che / sys / class / gpio / gpio4 esistano, che contiene diversi file virtuali. Questi file includono "direction" che definisce se si tratta di un input o di un pin di output, "value" che è di sola lettura per l'input o scrivibile per l'output e contiene il valore corrente e altri.

echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory

Naturalmente, probabilmente preferirai utilizzare alcune librerie preesistenti per fare GPIO fornito o compatibile con la tua lingua preferita. Ma se vuoi qualcosa di semplice, puoi semplicemente interfacciarti direttamente con sysfs per fare GPIO di base.


Questo è utile Ho guardato il foglio dati ma non sono riuscito a trovare lo stato predefinito dei pin. Ciò è significativo se si controllano le cose con i pin e non si desidera che le periferiche si accendano durante il caricamento del sistema operativo.
John La Rooy,

3
Questa è un'ottima risposta, ma non sono sicuro che risponda davvero alla domanda. Qual è lo stato di GPIO subito dopo l'attivazione? e direzione impostata?
Alex Chamberlain,

@gnibbler: credo che dovrai solo provarlo. L'ho provato io stesso un po 'di tempo fa e non ho visto nulla di inaspettato per quanto riguarda l'accensione o lo spegnimento di qualcosa. Non so o prometto che la mia esperienza è quella attesa. Direi che dovresti semplicemente lanciare un multimetro o simili sui pin che vuoi testare e quindi riavviare o spegnere e riaccendere il Pi molte volte per testare. Quello che ho visto è stato che tutti i pin erano spenti, come se il Pi non fosse alimentato fino a quando non ho abilitato ogni pin da solo.
Emmaly Wilson,

@DustyWilson, forse sono impostati come input senza pull up o pull down allora. Ciò significa che fluttuano efficacemente se collegati a un FET e causerebbero un comportamento casuale se una resistenza pull-up / down non viene aggiunta al gate
John La Rooy,

anzi ... cat /sys/class/gpio/gpio4/directiondice "in". Ho letto nel foglio dati che non è possibile leggere lo stato dei pullup / pulldown. Proverò a misurarli
John La Rooy,
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.