Recién estoy comenzando a usar el GPIO en la Raspberry Pi para varios proyectos. Hay muchos tableros de ruptura para el RPi y muchos de ellos tienen pines para apilar los tableros uno encima del otro. Parece que los pines GPIO solo pasan directamente y todas las placas tienen los mismos pines en común. Para mí, esto significa que todos los tableros en una pila reciben exactamente las mismas señales del RPi y deben comportarse en consecuencia. Parece que esto puede producir muchos errores con comandos destinados a una placa que afectan la forma en que opera otra placa, pero aparentemente esto no sucede.
Entonces, ¿cómo sabe Raspberry Pi qué placa obtiene qué comandos en particular? ¿Hay algún tipo de comando de inicialización que solo una placa en particular reconoce y luego comienza a aceptar el resto de los comandos?
Respuestas:
Las computadoras usan un sistema llamado busing para conectar múltiples dispositivos periféricos a la CPU a través del mismo conjunto de cables. I2C y SPI son ejemplos de sistemas de busing utilizados con los pines pi GPIO, que permiten múltiples dispositivos en los mismos pines físicos (administrados por el bus interno) pero utilizando diferentes direcciones . El direccionamiento es una abstracción creada por el protocolo del sistema de bus. Se parece un poco a cómo puede tener múltiples aplicaciones en red utilizando la misma conexión física a Internet, todas ejecutándose simultáneamente.
Por ejemplo, mirando el RTC Pi Plus , una de las tablas apilables de su enlace de ejemplo:
Observe en el lado cercano las cinco conexiones en una caja. Estos corresponden a pines en el otro lado. Están etiquetados:
En otras palabras, la mayoría de los pines no son utilizados por esta placa. Solo están ahí para permitir el apilamiento. Los que usa son todos (o en su mayoría, aún no saben acerca de SQW) compartibles simultáneamente con otros dispositivos.
El límite real para apilar de esta manera será la cantidad de energía que se puede suministrar frente a lo que se consume, no la cantidad de pines involucrados. Tal vez se convierta en una limitación si incluye fuentes de alimentación adicionales, pero creo que antes de eso tendría que mover la pila hacia afuera y comenzar a usar una escalera para trabajar en ella. ;)
fuente
Solo puede tener una placa HAT para que no haya tal problema. Hay algunas placas donde puede conectar más de una, pero esas no son placas HAT.
fuente
El Pi no puede saberlo. Tienes que asegurarte.
La cuestión es que si conecta varias placas de extensión, tendrá que tener cuidado de que las líneas de señales no se usen más de una vez o implementar un esquema de busing que pueda funcionar con múltiples dispositivos que comparten algunas líneas (como ya se ha sugerido en @goldilocks). Para tener una idea de cómo se podría hacer esto, recomendaría leer en el viejo bus ISA . Algo que podría implementarse usando GPIO como datos y líneas de dirección (y si uno está preparado para el dolor).
Si bien los HAT están fuera de discusión, vale la pena ver el esquema de identificación que usan. Tenga en cuenta que no hay HAT apilados * (según el blog de Raspberry Pi : HAT apilables presentados en la discusión de la especificación, pero finalmente se descartó debido al gran aumento en la complejidad de la configuración automática y el potencial de error del usuario ). Entonces, en un momento dado, solo se conectará un HAT, se leerá su EEPROM y se pondrá a disposición su información en el árbol de dispositivos.
* Es posible hacer sombreros apilables si son del mismo tipo y, por lo tanto, no requieren identificación múltiple y diferente, por ejemplo, el Adafruit 16-Channel PWM / Servo HAT para Raspberry Pi .
fuente