Realmente não existe um protocolo "geral", o que você acaba usando depende muito do aplicativo. Para que possamos lhe dar uma resposta melhor, precisamos entender um pouco melhor suas necessidades. Você mencionou que gostaria de ter microcontroladores separados conversando entre si como subsistemas.
Algumas perguntas sobre este aplicativo:
- Haverá mais de 2 microcontroladores neste projeto?
- Quais são os seus requisitos de velocidade e taxa de transferência? Com que rapidez as informações precisam chegar lá e com que frequência você está enviando / recebendo dados?
Se você respondeu NÃO à pergunta 1:
Se houver apenas 2 microcontroladores neste projeto, você pode definitivamente usar o UART entre eles. Se os dois precisarem iniciar a comunicação, use o controle de fluxo; caso contrário, será trivial enviar dados em uma direção. Na maior parte, deve ser "rápido o suficiente", pois você seleciona uma das taxas de transmissão mais altas. I2C e SPI normalmente são bons apenas para arquitetura mestre / escravo.
Se você respondeu SIM (mais de 2 controladores) à pergunta 1:
- Se houver mais de 2 microcontroladores em seu projeto, qual deles inicia a comunicação? Será apenas um controlador mestre (ou seja, arquitetura mestre-escravo)? Ou algum dos subsistemas seria capaz de falar a qualquer momento?
- Existe a necessidade de algum dos subsistemas se comunicar? por exemplo: para dispositivos A, B e C: A pode enviar para B e C, e B pode enviar para A e C, etc.
Portanto, agora você precisa de algo mais escalável, onde possa colocar dispositivos endereçáveis em um barramento comum. A resposta para essas perguntas de acompanhamento o ajudará a decidir entre I2C e SPI (mestre-escravo) ou algo como CAN (multi-mestre).
Seu microcontrolador provavelmente possui um periférico UART, os outros (especialmente o CAN) podem estar disponíveis apenas em chips mais avançados. Em qualquer um dos casos, deve haver muita documentação sobre como usar esses periféricos para mover bytes.