¿Por qué algunos pines GPIO son ALTOS cuando se inicia la Raspberry Pi?

18

Tengo un circuito fácil conectado, con un LED conectado al pin 18 en la referencia BOARD. Ejecuto un programa simple para poner el pin 18 en ALTO, que enciende el LED, y luego, un par de segundos después, pongo el pin 18 en BAJO, y finalmente termino mi programa con GPIO.cleanup ().

En este punto, el LED está apagado, lo que significa que el pin 18 está apagado (BAJO). Ahora reinicio o reinicio mi Raspberry Pi, y cuando se reinicia, el LED del pin 18 se enciende nuevamente, aunque el pin estaba apagado antes de reiniciar el Raspberry Pi.

¿Por qué puede estar pasando esto? ¿Cómo puedo configurar un pin específico, como el pin 18 para que esté apagado cuando se inicie la Raspberry Pi? Y no quiero que ningún pin GPIO esté en ALTO cuando se inicie la Raspberry Pi.

Me preocupa este problema, porque digamos que el pin 18 está conectado a un motor de CC en un robot, y cuando el Raspberry Pi arranca, el motor se encenderá, y esto no es algo que quiera porque eso interfiere con toda la estructura del robot, y algunos motores pueden arrancar y otros no, dependiendo de los pines a los que están conectados. Quiero encender manualmente todos los motores de forma sincronizada.

Otra cosa es que no todos los pines tienen este problema. Algunos se quedan cuando la Raspberry Pi arranca, pero otros no.

Frambuesa Viktor
fuente
¿Está ese LED encendido tan brillante como lo sería cuando lo configuras alto, o está brillando tenuemente?
Ricitos de oro
Se le aplican 3,3 voltios.
Viktor Raspberry
Entonces, si ingresa /sys/class/gpioy exporta el pin 18, ¿en qué estado dice el sistema que está si no cambia nada?
Ricitos de oro
Cuando escribo "/ sys / class / gpio", dice "-bash: / sys / class / gpio: Is a directory". No estoy seguro de cómo exportar un pin específico.
Viktor Raspberry
Hay muchas explicaciones de eso , así que no me molestaré en regurgitar. Ese ejemplo es algo pesado en el echo, que escribe, es decir, establece algo. Después de exportarlo, debe abstenerse de eso y simplemente usar cat, que se lee, para verificar la dirección y el valor.
Ricitos de oro

Respuestas:

25

Al encenderse, los GPIO se arrastran hacia arriba o hacia abajo a través de las resistencias internas. Si el tirón es alto o bajo para un GPIO en particular se detalla en la página 102 de los periféricos ARM BCM2835 .

A medida que se inicia el kernel de Linux y si el árbol de dispositivos está habilitado (probablemente), reconfigurará los GPIO de acuerdo con la configuración del árbol de dispositivos. Los módulos cargados desde /etc/modulestambién podrían actualizar el estado GPIO.

Cualquier otro software que esté ejecutando al inicio podría reconfigurar los GPIO posteriormente a la configuración del árbol de dispositivos y las cargas de módulos.

Es más seguro encontrar una solución de hardware si tiene hardware que podría activarse incorrectamente al iniciar el sistema.

joan
fuente
2

Sé que es muy tarde. Contestar. Puede escribir un script de Python o un script de bash que establezca manualmente el pin en bajo y programe un trabajo cron para que se ejecute en cada arranque. No necesitará modificar ningún sistema / archivo crítico. Aparte de cron

Sathaye.h
fuente