Comunicación bidireccional entre un maestro y varios nodos

2

Tengo una arquitectura como esta:

Maestro: contiene un chip de comunicación RF. Todos los nodos dependen de Master para recibir y enviar datos a una unidad central.

Nodo: tiene algunas funciones básicas de GPIO. Puede haber 4-5 tipos diferentes de nodos, cada uno de los cuales requiere un recuento de GPIO diferente. En aras de la simplicidad de diseño, planeo lanzar un microcontrolador barato en cada nodo y manejar todos los GPIO localmente. De esa manera, solo necesito un paquete de datos de control predefinido del maestro para realizar cualquier tarea. De manera similar, el nodo enviará un paquete predefinido que el maestro comprenderá. La definición del paquete contendrá el tipo de nodo.

Los nodos pueden cambiar en número y preferiblemente deberían ser intercambiables en caliente. La comunicación funciona así:

Dos nodos no se comunican directamente.

El maestro puede tener un paquete de datos que desea enviar a cualquier nodo en particular.

Cualquier nodo puede tener un paquete de datos que desea enviar al maestro.

La distancia máxima entre un nodo y un maestro será inferior a 50 cm.

Después de pensarlo un poco, este es el plan que se me ocurrió:

Haga que todos los nodos se comuniquen a través de i2c. 16 nodos por maestro parece ser un buen número, así que puedo poner un interruptor DIP de 4 bits para configurar la dirección i2c de cada nodo. Básicamente haré una lectura digital en 4 gpio y estableceré la dirección en consecuencia.

Esto será perfecto cuando el maestro quiera leer o escribir datos en los nodos.

Para el momento en que el nodo desea enviar datos, necesito tener un GPIO adicional por nodo que avise al maestro de que algunos datos están presentes. Alternativamente, puedo seguir leyendo todos los nodos en el bucle y verificar si hay algunos datos disponibles.

¿Hay una solución mejor para este problema?

    
pregunta Whiskeyjack

2 respuestas

2

Una alternativa a I2C, podría considerar CANbus para esta solución. Podría decirse que es más complejo, pero los esclavos podrían comunicarse con el maestro en el mismo bus sin necesidad de un GPIO para indicar que tienen datos disponibles. Además, la detección de colisiones está integrada en el diseño de la capa física y el protocolo.

Los controladores CAN están disponibles a precios relativamente bajos, aunque necesita un transceptor para cada nodo.

Otros autobuses multidrop comunes que podría considerar:

RS-485: Fácil de usar, pero usted sería responsable de todas las direcciones. I2C al menos lo construye en.

SPI: Es útil si tiene la E / S de sobra para una línea de selección de esclavo para cada nodo. Según la descripción anterior, probablemente esta no sea la mejor ruta.

    
respondido por el 1N4007
1

Su solución de sondeo es probablemente la más clásica.

Otra solución es hacer una encuesta de difusión.

Básicamente, envíe un mensaje que todos escuchen, lo que hace que envíen un pulso con un retraso establecido después de recibir la encuesta si tienen datos. La duración del retardo se establece por la dirección del dispositivo.

El maestro puede monitorear la señal de retorno y decodificar quién tiene los datos para enviar y preguntar directamente.

Otra técnica es construir un breve retraso entre la transmisión maestra y el reconocimiento esclavo. Luego use esa ventana para permitir que los esclavos rechinen un solo pulso que actúa como una interrupción para el maestro. Entonces necesitarías encuestarlos.

    
respondido por el Trevor_G

Lea otras preguntas en las etiquetas