¿Qué microcontrolador debe ser maestro / esclavo?

8

Estoy diseñando una alarma para despertarme la mañana. El sistema está compuesto por 3 subsistemas:

  1. (S1) RGB gestión de siete segmentos. Compuesto por 5 µC, uno para cada dígito y otro para ":". El alto número de µC se debe al hecho de que no uso IC para led RGB, solo transistores.
  2. (S2) Gestión de sensores y entradas. Un µC que administra el sensor de distancia para configurar la alarma y la hora actual; y los interruptores para la configuración.
  3. (S3) Comunicación y archivo de audio. Un µC que se comunica con un módulo Bluetooth en UART para un proyecto adicional, obtuvo un cristal RTC para tener un reloj preciso y administrar la reproducción de audio. (Todavía no trabajé en el audio)

Durante la ejecución normal, S2 lee la entrada y la envía a S3 para su procesamiento. luego S3 envía a S1 lo que tiene que mostrar.

Quiero hacer que todos estos subsistemas se comuniquen juntos, luego elijo usar el bus I2C. Pero aquí viene mi pregunta:

  • ¿Qué µC tiene que ser el maestro?

En la primera mano, S3 es el centro del sistema, pero en la otra mano, S2 puede enviar más mensajes que S3. Es por eso que no estoy seguro de quién será el amo / esclavo.

  • ¿Hay una regla para determinar quién será esclavo / maestro? ¿Qué pregunta debería hacerme para hacer la buena elección? (en general, no para este sistema específico)
pregunta M.Ferru

3 respuestas

7
  

¿Hay una regla para determinar quién será el esclavo / maestro [I 2 C]?

Sí. Solo un I 2 C master puede iniciar una transmisión. Un esclavo I 2 C no puede informarle sobre algo hasta que el maestro lo examine a continuación (a menos que agregue señales de interrupción adicionales, lo que aumenta la complejidad general del sistema).

Ignorar la función (que se usa raramente) para que un dispositivo cambie de maestro a esclavo, esto significa que I 2 C master debe tener suficiente conocimiento del sistema en general. , para saber cómo comunicarse con todos los esclavos I 2 C en ese bus.

  

¿Qué pregunta debería hacerme para hacer una buena elección? (en general, no para este sistema específico)

Piense qué MCU en su sistema sabe:

  • la mayoría sobre el estado general del sistema, y por lo tanto puede decidir cuándo enviar los comandos I 2 C a los esclavos;
  • los comandos I 2 C deben enviarse a cada esclavo;
  • qué datos se deben recopilar de cada I 2 C slave;
  • los dispositivos I 2 C responden únicamente a los comandos entrantes (esto se aplicará a sus MCU "S1"; parece claro que son más adecuados para ser esclavos);

Independientemente de cuál MCU será el maestro I 2 C, debe diseñar la arquitectura general del sistema y considerar qué comandos deben enviarse a cada dispositivo , y con qué rapidez hay que recibir las respuestas. Intente diseñar un sistema que tenga un "maestro" obvio y que conozca el estado del sistema de todos , y luego es probable que también sea el dispositivo maestro I 2 .

Has dicho:

  

S3 es el centro del sistema pero, por otro lado, S2 puede enviar más mensajes que S3.

No está claro quién "S2" está enviando mensajes a . ¿Necesita enviar mensajes a cualquier persona de forma activa? ¿O puede "S2" ser encuestado por "S3" como I 2 C maestro, para recibir cualquier sensor e información de conmutación que "S2" recopile? Si "S2" puede ser encuestado por "S3" entonces, en base a la descripción, parece claro que "S3" MCU podría ser el maestro I 2 C

.

Soy cauteloso acerca de agregar otro MCU (llamémoslo "S10") para que sea el maestro I 2 . Esto se debe a que parece que una MCU "S10" tendría que hacer muchos sondeos, solo para reunir el conocimiento general del estado del sistema, que es todo (?) Ya conocido por "S3". Eso parece una duplicación innecesaria.

Por lo tanto, a menos que "S3" no pueda hacer el trabajo debido a que alcanza los límites de espacio de RAM, espacio de Flash o ciclos de CPU, etc. puede ser menos complicado que "S3" controle el sistema haciéndolo I 2 C maestro, en lugar de agregar un controlador "S10" adicional.

Por otra parte, si no le importa la complejidad adicional, agregar un controlador "S10" general aumenta la modularidad (segmentación) del sistema, ya que "S3" entonces solo hace Bluetooth y audio - nada más. Esto podría permitir una flexibilidad adicional para agregar nuevas funciones (no previstas) / MCU adicionales en el futuro, sin necesidad de cambiar el código en "S3".

    
respondido por el SamGibson
1

S1 debería ser un esclavo I 2 C. Ya sea S2 o S3 sería una opción sensata para un maestro. Pero eso es simplemente reafirmando lo que se ha mencionado en la pregunta original.

A menudo, el MCU que trata con la mayor variedad de entradas es un buen candidato para un maestro. En su caso, es el S2 (una variedad de botones de usuario, RTC) o el S3 (una variedad de comandos desde el Bluetooth). Si no puede decidir cuál, entonces puede obtener un controlador más grande y colocar ambas funcionalidades S2 y S3 en una MCU. Este enfoque le puede dar más flexibilidad.

    
respondido por el Nick Alexeev
0

Cada microcontrolador en tu sistema puede ser el maestro. Sin embargo, algunos de ellos se adaptan más a esta función. Como han dicho otras personas, el microcontrolador con más información debería ser el Maestro.

    
respondido por el Little Latch

Lea otras preguntas en las etiquetas