Насправді не існує «загального» протоколу, те, що ви в кінцевому підсумку використовуєте, дуже залежить від програми. Для того, щоб ми дали вам кращу відповідь, нам потрібно зрозуміти ваші вимоги трохи краще. Ви згадуєте, що ви хотіли б мати окремі мікроконтролери, які розмовляють між собою як підсистеми.
Деякі запитання щодо цієї програми:
- Чи буде в цьому проекті більше 2 мікроконтролерів?
- Які ваші вимоги до швидкості та пропускної здатності? Як швидко потрібна інформація потрапляє туди і як часто ви надсилаєте / отримуєте дані?
Якщо ви відповіли "НІ" на питання 1:
Якщо в цьому проекті є лише 2 мікроконтролера, ви можете точно використовувати UART між ними. Якщо їм обом потрібно ініціювати зв’язок, скористайтеся керуванням потоком, інакше слід тривіально надсилати дані в одному напрямку. Здебільшого це повинно бути "досить швидким", враховуючи, що ви виберете одну з більш високих швидкостей передачі. I2C і SPI, як правило, корисні лише для master / slave архітектури.
Якщо ви відповіли ТАК (більше 2 контролерів) на питання 1:
- Якщо у вашому проекті є більше двох мікроконтролерів, який ініціює зв'язок? Чи буде це лише один головний контролер (тобто архітектура master-slave)? Або будь-яка з підсистем змогла б говорити в будь-який час?
- Чи є необхідність у будь-якій із підсистем спілкуватися між собою? наприклад: для пристроїв A, B і C: A може надсилати до B і C, а B може надсилати і A, і C і т.д.
Отже, зараз вам потрібно щось масштабніше, де ви можете переносити адреси, що адресовані, на загальну шину. Відповідь на ці подальші запитання допоможе вам вибрати між I2C та SPI (master-slave) або чимось на кшталт CAN (multi-master).
Мікроконтролер, швидше за все, має периферійну мережу UART, інші (особливо CAN) можуть бути доступні лише на більш чистих кінцевих чіпах. В будь-якому випадку повинно бути багато документації щодо використання цих периферійних пристроїв для переміщення байтів.