Я собираюсь спроектировать систему с ~ 128 MCU, взаимодействующими с одним мастером MCU. Связь будет двусторонней. Данные будут в основном считываться датчиками, но я планирую использовать шину также в качестве метода связи для пользовательского загрузчика, чтобы при необходимости перепрограммировать клиент. Расстояние между клиентами будет ~ 10-15 см (~ 3,90-5,90 дюйма). MCU будут общаться по проводам.
Сейчас я исследую, какую шину и какой протокол следует использовать с такими требованиями. Первой моей мыслью был I2C с 10-битной адресацией, но я боюсь, что количество клиентов превысит максимальную емкость шины I2C.
Ситуация «ведущий-ведомый», когда ведущий опрашивает подчиненных по одному, и оба могут передавать данные одновременно?
Я бы выбрал RS485, полный дуплекс для максимальной скорости, полудуплекс, если ведущий говорит, подчиненный отвечает, пока ведущий слушает (так же, как работает USB). Нагрузочный резистор на обоих концах цепи проводки, короткие шлейфы от цепи проводки к каждому ведомому устройству. На Maxim-ic.com есть несколько хороших статей, на которые я размещал ссылки в прошлом.
Если вам нужно простое существующее решение, вы можете выбрать Onewire . Он создан для сотен устройств и высокой нагрузки на шину, поэтому вам не нужны буферы. Главный недостаток - низкая скорость из-за этого.
У него только один провод данных, поэтому выбор времени может быть еще одной проблемой. Доступны различные клиентские реализации микроконтроллеров.
Но имейте в виду недостатки одного автобуса:
Для такой переполненной системы вы должны организовать их в группы. Каждая группа представляет собой подсеть, и только один из MCU в группе играет роль слушателя и говорящего снаружи и правителя внутри. Эти группы создают цели, которые мастер выбирает первым, а затем адрес элемента подсети или всю информацию, которая есть у группы.
Итак, преимущество в том, что теперь у вас есть свобода реализации различных топологий для основной сети и групповых элементов для более быстрой и надежной связи.
Нил_UK
злодемонический
Мэтью