¿Cuál es el estado de encendido de los GPIO?


35

¿Cuál es el estado de los GPIO cuando se aplica energía? por ejemplo, alto, bajo, Hi-Z?

¿También algún sistema operativo cambia el estado de cualquier GPIO cuando se carga? Ojalá no.


A menos que esté en la hoja de datos, es probable que tenga que medirlo para estar seguro. Linux no "sabe" acerca de los GPIO, por lo que no los cambiaría durante el arranque (a menos que haya creado un script de inicio que lo hiciera), pero siempre existe la posibilidad de que la ROM lo haga.
Malvineous

@Malvineous, eres incorrecto. Linux sabe sobre GPIO y el soporte está integrado en el núcleo. Aquí hay alguna documentación: kernel.org/doc/Documentation/gpio.txt
Emmaly Wilson

2
@DustyWilson: Lo siento si no estaba claro, quise decir que el núcleo del núcleo de Linux no hace uso de GPIO durante el arranque. Solo los pone a disposición del espacio de usuario y los controladores particulares. Por lo tanto, el núcleo de stock no debería alterar el estado de los pines GPIO durante el arranque.
Malvineous

@Malvineous: Ah, te tengo.
Emmaly Wilson

Respuestas:


11

He encontrado la respuesta aquí gracias a russellstrong . Cito la parte relevante a continuación

He llegado a conclusiones acerca de mis resistencias pull-up / sensibilidad de mi circuito a las resistencias pull-down. El RPi no está configurando la salida de GPIO cuando se inicia por primera vez. Está encendiendo una resistencia desplegable durante 740 milisegundos.

He usado dos resistencias de 18K (3v3 -> GPIO -> GND) para ver exactamente lo que está sucediendo con los pines. Aquí está el rastro. La línea azul es de potencia 3v3, la línea amarilla es la línea GPIO.

ingrese la descripción de la imagen aquí


¿Puedes aclarar un poco? Cuando el Raspberry Pi arranca, el GPIO está configurado en un estado de entrada de alta impedancia.
Alex Chamberlain

1
@AlexChamberlain, parece que el chip broadcom se inicia con pulldowns, pero el cargador borra los pulldowns para que sean de alta impedancia (entradas)
John La Rooy

9

Cuando comenzó a usar la distribución de Debian recomendada para RPi, GPIO está deshabilitado. Tienes que habilitar cada pin individualmente.

Si lo está haciendo a través de / sys , encontrará interesantes "Paths in Sysfs" (busque en http://www.kernel.org/doc/Documentation/gpio.txt ). En particular, habilitaría un pin "exportándolo". Cualquiera de los comandos a continuación asume que está ejecutando con privilegios de root (sudo o no) o que ha cambiado los permisos / propiedad de los archivos virtuales que se están modificando.

echo 4 > /sys/class/gpio/export

Esto habilita el pin GPIO # 4 que luego hace que / sys / class / gpio / gpio4 exista, que contiene varios archivos virtuales. Esos archivos incluyen "dirección" que define si se trata de un pin de entrada o de salida, "valor" que es de solo lectura para entrada o de escritura para salida y contiene el valor actual, y otros.

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

Por supuesto, probablemente prefiera usar alguna biblioteca preexistente para hacer GPIO suministrado o compatible con el idioma de su elección. Pero si quiere algo simple, puede simplemente interactuar directamente con sysfs para hacer GPIO muy básico.


Esto es de ayuda. Miré la hoja de datos pero no pude encontrar el estado predeterminado de los pines. Esto es significativo si está controlando cosas con los pines y no desea que se enciendan los periféricos mientras se carga el sistema operativo.
John La Rooy

3
Esta es una gran respuesta, pero no estoy seguro de que realmente responda la pregunta. ¿Cuál es el estado del GPIO inmediatamente después de que se habilitó? y la dirección establecida?
Alex Chamberlain

@gnibbler: Creo que solo tendrás que probarlo. Lo intenté hace un momento y no vi nada inesperado con respecto a algo que se encendía o apagaba. No sé ni prometo que mi experiencia sea la esperada. Yo diría que simplemente debe arrojar un multímetro o tal a los pines que desea probar y luego reiniciar o encender y apagar el Pi muchas veces para probar. Lo que vi fue que todos los pines estaban apagados, como si el Pi no tuviera energía hasta que habilité cada pin.
Emmaly Wilson

@DustyWilson, tal vez se configuran como entradas sin pull ups o pull down entonces. Esto significa que están flotando efectivamente si están conectados a un FET y causarían un comportamiento aleatorio si no se agrega una resistencia pull-up / down a la puerta
John La Rooy

de hecho ... cat /sys/class/gpio/gpio4/directiondice "en". Leí en la hoja de datos que no es posible leer el estado de los pullups / pulldowns. Trataré de medirlos
John La Rooy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.