¿Existe una regla para determinar quién será [I 2 C] esclavo / maestro?
Si. Solo un maestro I 2 C puede iniciar una transmisión. Un esclavo I 2 C no puede decirle algo, hasta que el maestro lo sondee a continuación (a menos que agregue señales de interrupción adicionales, lo que aumenta la complejidad general del sistema).
Ignorando la característica (raramente utilizada) para que un dispositivo cambie entre ser maestro y esclavo, esto significa que el maestro I 2 C debe tener suficiente conocimiento del sistema general , para saber cómo comunicarse con todos los I 2 C esclavos en ese autobús.
¿Qué pregunta debo hacerme para tomar una buena decisión? (en general, no para este sistema específico)
Piense qué MCU en su sistema sabe:
- principalmente sobre el estado general del sistema y, por lo tanto, puede decidir cuándo enviar comandos I 2 C a los esclavos;
- qué comandos I 2 C deben enviarse a cada esclavo;
- qué datos deben recopilarse de cada esclavo I 2 C;
- qué dispositivos I 2 C responden puramente a los comandos entrantes (esto se aplicará a sus MCU "S1"; parece claro que son los más adecuados para ser esclavos);
Independientemente de qué MCU va a 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 deben recibirse las respuestas. Intente diseñar un sistema que tenga un "maestro" obvio y que conozca todo el estado del sistema, y probablemente también sea el dispositivo maestro I 2 C.
Tu dijiste:
S3 es el centro del sistema pero, por otro lado, S2 puede enviar más mensajes que S3.
No está claro que "S2" es el envío de mensajes a . ¿Necesita enviar mensajes activamente a alguien ? ¿O "S2" puede ser sondeado por "S3" como maestro I 2 C, para recibir la información del sensor y el interruptor que "S2" recopila? Si "S2" puede ser sondeado por "S3", entonces, sobre la base de la descripción, parece claro que MCU "S3" podría ser el maestro I 2 C.
Soy cauteloso al agregar otro MCU (llamémoslo "S10") para ser el maestro I 2 C. Esto se debe a que parece que una MCU "S10" necesitaría realizar muchas encuestas, solo para reunir el conocimiento general del estado del sistema que ya es todo (?) 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 sus límites de espacio RAM, espacio Flash o ciclos de CPU, etc., puede ser menos complicado hacer que "S3" controle el sistema convirtiéndolo en maestro I 2 C, en lugar de agregar un controlador adicional "S10".
Por otro lado, si no le importa la complejidad adicional, agregar un controlador "S10" general aumenta la modularidad (segmentación) del sistema, ya que "S3" solo hace Bluetooth y audio, nada más. Esto podría permitir una flexibilidad adicional para agregar nuevas características (imprevistas) / MCU adicionales en el futuro, sin necesidad de cambiar el código en "S3".