¿Existe una regla para determinar quién será [I 2 C] esclavo / amo?
Sí. Sólo una I 2 C maestro puede iniciar una transmisión. Una I 2 El esclavo C no puede hablarte de algo, hasta que el amo no lo haya encuestado de nuevo (a menos que añadas señales de interrupción adicionales, lo que aumenta la complejidad del sistema en general).
Ignorar la característica (raramente usada) de un dispositivo para cambiar entre ser un amo y un esclavo, significa que la I 2 C master debe tener suficiente conocimiento del sistema general para saber cómo comunicarse con todos los yo 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)
Piensa en qué MCU de tu sistema sabe:
- más sobre el estado general del sistema, y por lo tanto puede decidir cuándo enviar a I 2 Comandos C a los esclavos;
- que yo 2 Las órdenes C deben ser enviadas a cada esclavo;
- qué datos deben recogerse de cada I 2 Esclavo C;
- que yo 2 Los dispositivos 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 que MCU va a ser la I 2 C master, hay que diseñar la arquitectura general del sistema y considerar qué comandos hay que enviar a cada dispositivo, y con qué rapidez hay que recibir las respuestas. Intenta diseñar un sistema que tenga un "maestro" obvio y que sepa todos estado del sistema, y entonces es probable que sea el I 2 El dispositivo maestro C también.
Tú lo dijiste:
S3 es el centro del sistema, pero por otro lado, S2 puede enviar más mensajes que S3.
No está claro quién es el "S2" que está enviando mensajes a . ¿Necesita activamente envíe mensajes a cualquiera ? ¿O puede "S2" ser encuestado por "S3" como yo 2 C master, para recibir cualquier información del sensor y el interruptor que "S2" recoge? Si "S2" puede ser interrogado por "S3" entonces, en base a la descripción, parece claro que "S3" MCU podría ser el I 2 C master.
Soy cauteloso en cuanto a añadir otro MCU (llamémosle "S10") para ser el I 2 C master. Eso es porque parece que una MCU "S10" necesitaría hacer muchas encuestas, sólo para reunir el conocimiento del estado general del sistema que es todo (?) ya conocido por el "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 de RAM, espacio de Flash, o ciclos de CPU, etc., puede ser menos complicado hacer que "S3" controle el sistema haciéndolo I 2 C master, en lugar de añadir un controlador adicional "S10".
Por otro lado, si no te importa la complejidad adicional, añadir un controlador general "S10" aumenta la modularidad (segmentación) del sistema, ya que "S3" entonces sólo hace el Bluetooth y el audio, nada más. Esto podría permitir una flexibilidad extra para añadir nuevas (imprevistas) características / MCU adicionales en el futuro, sin necesidad de cambiar el código en "S3".