Existe uma regra para determinar quem será [I 2 C] escravo / mestre?
Sim. Somente um mestre I 2 C pode iniciar uma transmissão. Um escravo I 2 C não pode falar sobre algo até que ele seja pesquisado em seguida pelo mestre (a menos que você adicione sinais de interrupção extras, o que aumenta a complexidade geral do sistema).
Ignorando o recurso (raramente usado) para um dispositivo alternar entre ser mestre e escravo, isso significa que o mestre I 2 C deve ter conhecimento suficiente do sistema geral para saber como se comunicar com todos os I 2 C escravos naquele ônibus.
Que pergunta devo me fazer para fazer a boa escolha? (em geral, não para este sistema específico)
Pense em qual MCU do seu sistema sabe:
- mais sobre o estado geral do sistema e, portanto, pode decidir quando enviar comandos I 2 C aos escravos;
- quais comandos I 2 C precisam ser enviados para cada escravo;
- que dados precisam ser coletados de cada escravo I 2 C;
- quais dispositivos I 2 C respondem puramente aos comandos recebidos (isso se aplicará às suas MCUs "S1" - parece claro que elas são mais adequadas para serem escravas);
Independentemente de qual MCU será o mestre I 2 C, é necessário projetar a arquitetura geral do sistema e considerar quais comandos precisam ser enviados para cada dispositivo e com que rapidez todas as respostas precisam ser recebidas. Tente projetar um sistema que possua um "mestre" óbvio e conheça todo o estado do sistema e, provavelmente, também poderá ser o dispositivo mestre I 2 C.
Você disse:
S3 é o centro do sistema, mas, por outro lado, S2 pode enviar mais mensagens que S3.
Não está claro que "S2" é o envio de mensagens para . Precisa enviar mensagens ativamente para alguém ? Ou "S2" pode ser pesquisado por "S3" como mestre I 2 C, para receber qualquer informação de sensor e chave que "S2" coletar? Se "S2" puder ser pesquisado por "S3", então, com base na descrição, parece claro que "S3" MCU poderia ser o mestre I 2 C.
Sou cauteloso ao adicionar mais um MCU (vamos chamá-lo de "S10") para ser o mestre I 2 C. Isso ocorre porque parece que um MCU "S10" precisaria realizar muitas pesquisas, apenas para reunir o conhecimento geral do estado do sistema, que é tudo (?) Já conhecido por "S3". Isso parece duplicação desnecessária.
Portanto, a menos que "S3" não pode fazer o trabalho devido a atingir os seus limites de espaço RAM, espaço Flash, ou ciclos de CPU etc. pode ser menos complicado ter "S3" controlar o sistema, tornando-I 2 mestre C, em vez de adicionar um controlador "S10" adicional.
Por outro lado, se você não se importa com a complexidade adicional, adicionar um controlador "S10" geral aumenta a modularidade (segmentação) do sistema, uma vez que o "S3" só faz Bluetooth e áudio - nada mais. Isso pode permitir flexibilidade extra para adicionar novos recursos (imprevistos) / MCUs adicionais no futuro, sem a necessidade de alterar o código em "S3".