¿Cómo diferencia Raspberry Pi entre múltiples placas de expansión?

8

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?

cspirou
fuente
Esto también es algo que veo con los escudos arduino apilables y otras plataformas informáticas diferentes.
cspirou
Me temo que la respuesta es que no hay una forma estándar para que una placa detecte otra y se reconfigure. Deberá examinar los detalles de cada placa antes de la compra y tomar su propia determinación sobre la capacidad de trabajar entre ellos.
joan

Respuestas:

5

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:

ingrese la descripción de la imagen aquí

Observe en el lado cercano las cinco conexiones en una caja. Estos corresponden a pines en el otro lado. Están etiquetados:

  • 5V = Potencia, compartible con otros dispositivos.
  • GND = Tierra, también común.
  • SDA y SCL = pines de bus I2C; en el pi que son los pines 3 y 5. Puede tener bastantes dispositivos en el bus I2C, todos utilizando estos mismos dos pines para la comunicación.
  • SQW = Creo que esto significa "onda cuadrada" y tal vez uno de nuestros miembros con más conocimientos electrónicos deje un bonito comentario explicando su propósito.

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. ;)

Ricitos de oro
fuente
3

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.

salmón
fuente
1
Los sombreros pueden no ser lo correcto, pero estoy hablando de placas que se conectan a los pines GPIO. El siguiente sitio muestra altas pilas de tales tableros. abelectronics.co.uk Puedo modificar la pregunta para eliminar 'HATs'
cspirou
1

Entonces, ¿cómo sabe Raspberry Pi qué placa obtiene qué comandos en particular?

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).

¿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?

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 .

Ghanima
fuente