¿Es posible que un esclavo SPI hable con otros esclavos?

5

Estoy desarrollando un dispositivo que tendrá un chip flash y un RTC en el mismo bus SPI, seleccionado mediante dos líneas de selección diferentes. También tengo un panel frontal para este dispositivo que necesita acceder a estos dispositivos y actualmente está conectado a un UART, pero estoy pensando en hacerlo también en un dispositivo SPI para no tener que usar los pines adicionales.

Mi pregunta básica es esta: ¿podría tener el MCU del panel frontal, que será un esclavo SPI, hablar con los otros dispositivos esclavos en el bus de alguna manera? Si no, ¿cómo podría lograr esto? Estoy pensando en hacer esto reiniciando el bus SPI causando una interrupción en mi MCU principal, pero prefiero ver si alguien aquí sabe si puedo hacer comunicaciones SPI de esclavo a esclavo.

Gracias por cualquier ayuda.

    
pregunta Tristan Seifert

3 respuestas

5

Un dispositivo SPI "esclavo" que controla a otro esclavo se convierte en un maestro por definición.

Si el software de su panel frontal es capaz de implementar roles esclavos o maestros en diferentes momentos, no hay nada que lo detenga, siempre que el hardware pueda acomodar el flujo de señal necesario y que el maestro SPI "normal" no interfiera o "confundirse" por la acción. es decir,

  • Sus maestros deben cooperar físicamente: Si dos maestros intentan trabajar al mismo tiempo, o si un maestro afirma una línea de señal (por ejemplo, un reloj) que afecta la capacidad del otro maestro para controlar la misma línea cuando se desee, entonces "habrá problemas".

  • Sus maestros deben cooperar de manera lógica: Si un maestro "piensa" está controlando el bus, pero el otro también está alterando el reloj o las líneas de datos "habrá problemas".

Desde el punto de vista de UART y SPI IC, la identidad física del dispositivo maestro no es importante, siempre que los niveles de señal y el flujo de señal se produzcan correctamente.

    
respondido por el Russell McMahon
3

La única diferencia entre un maestro y un esclavo es que el maestro genera el reloj y las señales SS y el esclavo los escucha.

Si bien el panel frontal no es un maestro activo, no hay problema con él para escuchar una señal SS entrante y trabajar como esclavo. Una interrupción sería ideal para esto.

La comunicación directa de esclavo a esclavo es imposible ya que no habría reloj.

    
respondido por el Majenko
0

Una de las ventajas de SPI es que no hay líneas de comunicaciones bidireccionales. Esto permite cosas como amplificadores de señal o repetidores que no tienen que realizar un seguimiento de ningún estado. Desafortunadamente, también significa que SPI no está bien equipado internamente para manejar múltiples maestros y negociaciones entre ellos. Si la velocidad y las restricciones operativas lo permiten, sugeriría tener un maestro para todas las comunicaciones, y el otro dispositivo que quiera intercambiar información con un esclavo pide ayuda al maestro. Eléctricamente, la forma más sencilla sería que el maestro envíe al otro micro un mensaje de "qué desea enviar y recibir", obtener una respuesta, enviar esos datos al bus SPI, obtener la respuesta y enviar esa información a la otro micro Si el maestro y el otro micro tienen E / S reconfigurables adecuadamente, es posible que el otro dispositivo le pida al maestro que envíe una cantidad de bytes del reloj sin generar ningún dato, y que el otro dispositivo suministre el mismo. datos. Eso mejoraría el rendimiento de los datos, pero agregaría complejidad eléctrica.

    
respondido por el supercat

Lea otras preguntas en las etiquetas