Estoy construyendo un sistema en el que necesito transferir exactamente los mismos datos a decenas de dispositivos, pero necesito obtener respuestas individuales. También necesito limitar la cantidad de pines requeridos y tener una transmisión lo más rápida posible.
Mi idea actual es esta: use SPI para comunicarse con todos los esclavos vinculando todos los esclavos al mismo canal SS. De esa manera, todos los esclavos reciben la misma información al mismo tiempo. Cuando se trata de recibir datos, pediría datos de cada esclavo a través de I2C. De esta forma solo tengo 6 pines para transmitir a una velocidad de 10Mbps y recibir datos a 400kbps. ¿Funcionaría esta idea o hay una solución mejor?
Necesito una velocidad de transmisión rápida de maestro a esclavo ya que los datos deben ser en tiempo real, mientras que los datos de los esclavos pueden ser un poco más lentos, por eso elegí I2C.
¿Pensamientos?
Datos adicionales:
La distancia del esclavo al maestro no excederá los 2 metros como máximo. Por lo general, será mucho más corto desde una distancia de varias pulgadas.
El conteo de esclavos no se extenderá 25
Los datos recibidos del esclavo al maestro variarán. Podría ser de 10 bytes a la vez, o podría ser de 100 bytes a la vez.
Los datos transmitidos a los esclavos deben ser rápidos, alrededor de 1 Mbits a todos a la vez. Hay cierta flexibilidad.
¡Gracias!
Con 10 esclavos que necesitan recibir 1 Mb/s: diría que está entrando en el área de las cosas que deberían resolverse con un bus de múltiples nodos dedicado, en lugar de improvisar.
En general, sin embargo, la idea de usar SPI (con el almacenamiento en búfer de fan-out adecuado, no se dice que ningún maestro SPI pueda controlar un bus con 10 esclavos a diferentes distancias) para la transmisión, e I²C como canal de retorno es sonido.
De esa manera, sin embargo, se obtiene un backchannel sin interrupciones de baja velocidad y unidireccional de alta velocidad, y eso podría complicarse. Como recomendó Brian Drummond, tener un mux que solo asigne el MISO a un solo esclavo le permitiría usar el modo bidireccional "normal", con TX siendo "transmitido" como un "efecto secundario", y eso simplificaría la lógica del bus inmensamente.
Yo diría que para SPI a estas tasas, 2m es en realidad bastante . Definitivamente funciona, si amortigua y diseña cuidadosamente las pistas y los cables, pero es algo frágil que necesitará muchos ajustes.
Considerándolo todo: creo que podría estar mejor con algo como ethernet. 10 × 1 Mb/s realmente no suena como si estuvieras conectando arduinos, de todos modos.
Busque en los autobuses existentes:
¿Funcionaría esta idea...
Debería, siempre que se cumplan los requisitos de la interfaz (¿Fanout SPI?) y los dispositivos puedan manejar las velocidades de datos.
... o es su una solución mejor?
Posiblemente, pero ¿por qué debería importarte? Lo importante es desarrollar una solución que funcione satisfactoriamente . Una ventaja de su idea es que es simple y fácil de depurar, mientras que una solución "mejor" que, por ejemplo. multiplexa las respuestas del esclavo SPI puede requerir hardware adicional y un software más complejo que puede ser difícil de hacer bien.
el fotón
constructorbob
el fotón
usuario_1818839
constructorbob
Nick Alexeev
constructorbob
Cort Amón
usuario_1818839
constructorbob
el fotón