¿Usa GPIO adicionales como E / S digital?

11

Espero que esta pregunta sea bastante simple, pero mi búsqueda rápida en Google no encontró la respuesta.

Sé que el RPi tiene varios GPIO que puedo usar, así como GPIO especializados (SPI, I2C, UART, etc.). En mi proyecto, en realidad me estoy quedando sin los GPIO normales y me gustaría usar el SPI, I2C y otros GPIO como GPIO "normales" también. Sé que esto se puede hacer, pero supongo que no estoy seguro de cómo puedo configurarlos para que no se ejecuten en los modos SPI / I2C / etc. y simplemente se ejecuten como GPIO normales.

¿Necesito hacer algo para configurarlos adecuadamente para esto?

Andrew Corsini
fuente

Respuestas:

10

La respuesta corta

No, tú (casi) no lo haces. En realidad, es al revés: debe configurarlos para que no sean GPIO sino que cumplan su propósito especial. La única excepción son los pines UART. También y pines I²C de alguna manera especial.

Pasadores UART

Los pines UART son utilizados por el núcleo para la consola. Tendrá que configurar el sistema para que no los use si desea que estén disponibles para su uso:

  • editar /boot/cmdline.txty eliminar console=ttyAMA0,115200y kgdboc=ttyAMA0,115200parámetros
  • edite /etc/inittaby comente (ponga el #carácter delante de él) la línea:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • reinicia tu RaspberryPi

Ahora los pines no deben ser utilizados por el sistema y puedes usarlos

Pines I²C

Los pines I²C tienen instaladas resistencias pull-up de 1.8k. No pueden ser deshabilitados. Esto limita el uso de esos pines en algunas situaciones (pero puede ser útil en otras).

Soluciones adicionales

Si se están agotando los pines GPIO, a veces puede ampliar fácilmente su número utilizando un hardware adicional (pero simple). Por ejemplo, para la salida, puede usar shift registerso I²C I/O expanders(también llamado `expansores de bus I²C), tanto para comprar como para usar fácilmente. Puede encontrar un ejemplo de su uso aquí .

PFC8574(o similar de esta familia) son tan populares que hay un módulo de kernel listo para usar que maneja toda la comunicación por usted ( no está habilitado en el kernel oficial de RaspberryPi, deberá compilar su propio kernel para usarlo ). Se llama al módulo gpio_pcf857x, siempre que lo haya cargado modprobe(junto con los controladores I²C) y que tenga el chip conectado al I²Cbus, puede activarlo así:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

dónde pcf8574está el nombre real de su chip (este módulo puede manejar algunos chips diferentes como pca967xy max732x) y 0x27es su dirección activada I²C(puede configurar la dirección del chip cuando lo conecta)

Esto creará entradas en el /sys/class/gpio/directorio que le permitirán usarlas de la misma manera que otros puertos GPIO en RaspberryPi, siempre que esté usando la sysinterfaz (por ejemplo, wiringPiSetupSys()en cableadoPi). Desafortunadamente, el RPi.GPIOmódulo de Python no admite este modo, por lo que no podrá usar estos pines con esta biblioteca. Los pines tendrán algunos números altos como 248-255 o similar.

Nota: PCF8574 es sinking current- puede proporcionar un disipador de disco (aceptar en estado bajo) hasta 20 mA, pero solo puede generar 0.1 mA en estado alto. Esto significa que generalmente lo usará en lógica inversa, es decir +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Krzysztof Adamski
fuente