Я создаю будильник, чтобы разбудить меня утром. Система состоит из 3 подсистем:
- (S1) RGB семь сегментов управления. Состоит из 5 мкКс, один для каждой цифры и один для ":". Большое количество µC связано с тем, что я не использую IC для RGB-светодиодов, только транзисторы.
- (S2) Управление датчиками и входами. Один микроконтроллер, который управляет датчиком расстояния для установки будильника и текущего времени; и переключатели для конфигурации.
- (S3) Связь и аудиофайл. Один микроконтроллер, который связывается с модулем Bluetooth в UART для дальнейшего проекта, получил кристалл RTC, чтобы иметь точные часы и управлять воспроизведением звука. (Я еще не работал над аудио)
Во время обычного выполнения S2 читает входные данные и отправляет их на S3 для обработки. затем S3 отправляет S1 то, что должно отображаться.
Я хочу, чтобы все эти подсистемы взаимодействовали друг с другом, затем я решил использовать шину I2C. Но вот и мой вопрос:
- Какой микроконтроллер должен быть мастером?
С одной стороны, S3 является центром системы, но с другой стороны, S2 может отправлять больше сообщений, чем S3. Вот почему я не знаю, кто будет хозяином / рабом.
- Есть ли правило, чтобы определить, кто будет рабом / хозяином? Какой вопрос я должен задать себе, чтобы сделать хороший выбор? (в общем, не для этой конкретной системы)
Ответы:
Да. Только мастер I 2 C может начать передачу. Ведомый I 2 C не может рассказать вам о чем-либо, пока он не будет опрошен ведущим (если вы не добавите дополнительные сигналы прерывания, что увеличивает общую сложность системы).
Игнорирование (редко используемой) функции переключения устройства между ведущим и ведомым устройствами означает, что мастер I 2 C должен обладать достаточными знаниями об общей системе , чтобы знать, как взаимодействовать со всеми I 2 C рабы в этом автобусе.
Подумайте, какой MCU в вашей системе знает:
Независимо от того, какой MCU будет ведущим I 2 C, вам необходимо спроектировать общую архитектуру системы и определить, какие команды нужно отправлять на каждое устройство, и как быстро нужно получать ответы. Попытайтесь спроектировать систему, которая имеет очевидный «мастер» и знает все состояние системы, и тогда она, вероятно, также может быть ведущим устройством I 2 C.
Вы сказали:
Не ясно , кто «S2» отправляет сообщения в . Нужно ли активно отправлять сообщения кому-либо ? Или «S2» может опрашиваться «S3» как ведущий I 2 C, чтобы получить информацию о датчике и переключателе, которую собирает «S2»? Если «S2» может опрашиваться «S3», то, исходя из описания, очевидно, что MCU «S3» может быть мастером I 2 C.
Я осторожно добавляю еще один MCU (назовем его «S10») в качестве мастера I 2 C. Это потому, что кажется, что MCU "S10" должен был бы сделать много опросов, просто чтобы собрать общие знания о состоянии системы, которые все (?) Уже известны "S3". Это кажется ненужным дублированием.
Поэтому, если «S3» не может выполнить эту работу из-за достижения своих пределов пространства ОЗУ, флэш-памяти или циклов ЦП и т. Д., Может быть менее сложным иметь «S3» для управления системой, сделав ее ведущим I 2 C, вместо добавления дополнительный контроллер "S10".
С другой стороны, если вы не возражаете против дополнительной сложности, добавление общего контроллера «S10» увеличивает модульность (сегментацию) системы, поскольку «S3» тогда выполняет только Bluetooth и аудио - больше ничего. Это может обеспечить дополнительную гибкость для добавления новых (непредвиденных) функций / дополнительных MCU в будущем без необходимости изменения кода в «S3».
источник
S1 должен быть ведомым I 2 C. Либо S2, либо S3 будет разумным выбором для мастера. Но это только повторение того, что было упомянуто в первоначальном вопросе.
Часто MCU, который имеет дело с самым большим разнообразием входов, является хорошим кандидатом в мастера. В вашем случае это либо S2 (множество пользовательских кнопок, RTC), либо S3 (множество команд от Bluetooth). Если вы не можете решить, какой из них, то вы можете получить больший контроллер и поместить обе функции S2 и S3 в один MCU. Такой подход может дать вам больше гибкости.
источник
Каждый микроконтроллер в вашей системе может быть мастером. Однако некоторые из них больше подходят для этой функции. Как говорят другие люди, микроконтроллер с большей информацией должен быть Мастером.
источник