На самом деле не существует «общего» протокола, то, что вы в конечном итоге используете, сильно зависит от приложения. Чтобы мы могли дать вам лучший ответ, нам нужно немного лучше понять ваши требования. Вы упоминаете, что хотели бы, чтобы отдельные микроконтроллеры говорили друг с другом как подсистемы.
Некоторые вопросы об этом приложении:
- Будет ли в этом проекте более двух микроконтроллеров?
- Каковы ваши требования к скорости и пропускной способности? Как быстро нужно получать информацию и как часто вы отправляете / получаете данные?
Если вы ответили НЕТ на вопрос 1:
Если в этом проекте только 2 микроконтроллера, вы определенно можете использовать UART между ними. Если им обоим необходимо инициировать связь, используйте управление потоком, в противном случае отправка данных в одном направлении должна быть тривиальной. По большей части это должно быть «достаточно быстро», учитывая, что вы выбираете одну из более высоких скоростей в бодах. I2C и SPI обычно хороши только для архитектуры master / slave.
Если вы ответили ДА (более 2 контроллеров) на вопрос 1:
- Если в вашем проекте более двух микроконтроллеров, какой из них инициирует связь? Будет ли это только один главный контроллер (т.е. архитектура главный-подчиненный)? Или любая из подсистем сможет говорить в любое время?
- Нужно ли какой-либо из подсистем общаться друг с другом? например: для устройств A, B и C: A может отправлять B и C, а B может отправлять как A, так и C и т. д.
Так что теперь вам нужно что-то более масштабируемое, чтобы вы могли перебрасывать адресуемые устройства на общую шину. Ответ на эти вопросы поможет вам выбрать между I2C и SPI (master-slave) или чем-то вроде CAN (multi-master).
Ваш микроконтроллер, скорее всего, имеет периферийное устройство UART, остальные (особенно CAN) могут быть доступны только на более высокопроизводительных чипах. В любом случае должно быть много документации о том, как использовать эти периферийные устройства для перемещения байтов.