¿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".