Opciones de bus de múltiples nodos

7

Quiero un nodo maestro consistente en un núcleo Stellaris Cortex M3 de TI conectado a lo que pueden ser hasta 32 nodos esclavos de TI MSP430 (o posiblemente más nodos esclavos Stellaris). Estos serán como máximo de 0,5 metros entre el maestro y el esclavo más distante. Se necesitarán velocidades de bits de alrededor de 0.5-1mbps. ¿Qué tipo de opciones están disponibles para las comunicaciones internas?

De los documentos, ambos parecen admitir SPI, UART e I2C.

  • SPI tendrá, a partir de lo que encuentre, que necesite un nodo selector de cable pr. Demasiados cables.
  • I2C parece fácil, pero para los documentos que obtengo, la velocidad máxima es de 400 KHz. Demasiado lento sin degradar la calidad o el número máximo de nodos.
  • UART parece alcanzar la velocidad, pero ¿puede usarse fuera de la comunicación A a B?
  • ¿Me perdí algo?

Actualización: Como se señaló en los comentarios, se actualizó la velocidad I2C para msp430 a 400KHz. Sin embargo, sigue siendo demasiado lento. Además, la red es puramente un maestro yn esclavos.

    
pregunta Imbrondir

6 respuestas

7

Sugeriría RS485 o CAN; RS485 tiene la ventaja de una disponibilidad casi universal (si tiene un UART, puede tener RS485; si su UART tiene control automático de RTS, tiene una solución RS485 perfecta). Puede encontrar dispositivos pequeños y baratos que también subirán a varios megabaud.

CAN es un poco más robusto, pero si su microcontrolador no tiene el periférico, puede ser un costo adicional que no está dispuesto a agregar al proyecto. La principal ventaja de CAN sobre RS485 (IMO) es que, en el caso de contención de bus, aún se enviará un mensaje completo; Si dos dispositivos comienzan a hablar en una red RS485, no se recibe nada inteligible y no hay medios integrados para la gestión del bus, por lo que debe encargarse de esto en el software.

Para su velocidad dada y dado que no creo que los microcontroladores que mencionó tengan controladores CAN integrados, sugeriría una red RS485 basada en token. Esencialmente, ninguno de los nodos habla hasta que es su turno de hablar, y esto se hace mediante el paso de un "token" (un mensaje de red corto que concede el uso del bus) a cada uno de los nodos a su vez. Es relativamente fácil de configurar, es mucho más confiable que CSMA / CD y creo que podría tener algo en marcha en un día o dos.

    
respondido por el akohlsmith
2

RS485 podría ser un buen ajuste. Utiliza el UART para el flujo en serie, pero necesitará un pin de dirección para determinar qué nodo controla el bus.

El Maestro transmitirá un mensaje y luego escuchará una respuesta.

Los esclavos decodificarán todos los mensajes y responderán a los mensajes dirigidos a ellos.

    
respondido por el Robert
2

FWIW, estoy bastante seguro de que el bus I2C se puede ejecutar a velocidades superiores a 100 kHz. MSP430, creo, puede admitir un funcionamiento de 400 kHz como mínimo.

    
respondido por el vicatcu
2

Podría ignorar la línea de selección para SPI y tratarla como una interfaz serial síncrona más genérica. Creo que el Stellaris le permitirá configurar el SPI como un SSI, pero no estoy seguro acerca del MSP430. En cualquier caso, solo puede hacer que vigilen el bus y solo responder si ven que aparece su dirección de esclavo. Tendrá que escribir el software para esto, pero funcionará.

    
respondido por el AngryEE
0

I2C ejecutará al menos 400 kHz con la mayoría de las partes. Sería la solución más fácil para un bus de comunicación de corta distancia. Si quisiera algo más robusto, recomendaría CAN o RS-485, pero ambos requerirían chips externos adicionales.

    
respondido por el mjh2007
0

Hay un "protocolo SPI en cadena margarita" ("protocolo similar a JTAG") que requiere un total de 4 pines en el maestro de bus, sin importar cuántos esclavos haya en la cadena. La cadena de transmisión SPI nunca tiene conflictos en el bus, porque cada bit de cable tiene un solo controlador conectado. Ver Wikipedia: Daisy-chain SPI y Ayuda con la identificación del dispositivo en una cadena .

    
respondido por el davidcary

Lea otras preguntas en las etiquetas