Выбор лучшей шины и протокола для ~128 клиентов по сети

Я собираюсь спроектировать систему с ~ 128 MCU, взаимодействующими с одним мастером MCU. Связь будет двусторонней. Данные будут в основном считываться датчиками, но я планирую использовать шину также в качестве метода связи для пользовательского загрузчика, чтобы при необходимости перепрограммировать клиент. Расстояние между клиентами будет ~ 10-15 см (~ 3,90-5,90 дюйма). MCU будут общаться по проводам.

Сейчас я исследую, какую шину и какой протокол следует использовать с такими требованиями. Первой моей мыслью был I2C с 10-битной адресацией, но я боюсь, что количество клиентов превысит максимальную емкость шины I2C.

  1. Какая шина и какой протокол подходят для такой системы?
  2. Если ответ — I2C, как можно убедиться, что параметры шины соответствуют спецификации? (Я слышал о буферах I2C, помогут ли они?)
Со 128 предметами в автобусе любой, кто замолчит или будет говорить только о разговоре, уничтожит автобус, какова будет ваша надежность? В сетке 12x12 каждому MCU потребуется 2 приемопередатчика I2C, один для севера/юга, один для востока/запада. Всего 12 узлов на шину. Любому случайному сообщению MCU для MCU потребуется 2 перехода, но это можно сделать одним из двух способов: сначала EW или сначала NS (или обоими), поэтому любой отказ MCU ограничивается этим MCU. Менее чем полное резервирование может быть достигнуто за счет использования только нескольких шин в одном направлении или даже только одной в одном направлении (более низкая емкость и ограниченный эффект отказа).
Сколько данных и как часто ?
Каждый клиент будет отправлять ~ 4 байта данных. Ограничение частоты объединения не является жестким требованием, но я думал о чтении данных со всех клиентов каждые 500 мс.

Ответы (3)

Ситуация «ведущий-ведомый», когда ведущий опрашивает подчиненных по одному, и оба могут передавать данные одновременно?

Я бы выбрал RS485, полный дуплекс для максимальной скорости, полудуплекс, если ведущий говорит, подчиненный отвечает, пока ведущий слушает (так же, как работает USB). Нагрузочный резистор на обоих концах цепи проводки, короткие шлейфы от цепи проводки к каждому ведомому устройству. На Maxim-ic.com есть несколько хороших статей, на которые я размещал ссылки в прошлом.

Если вам нужно простое существующее решение, вы можете выбрать Onewire . Он создан для сотен устройств и высокой нагрузки на шину, поэтому вам не нужны буферы. Главный недостаток - низкая скорость из-за этого.

У него только один провод данных, поэтому выбор времени может быть еще одной проблемой. Доступны различные клиентские реализации микроконтроллеров.

Но имейте в виду недостатки одного автобуса:

  • один автобус, скорее всего, с треском выйдет из строя, и как найти виновника?
  • обновление программного обеспечения через медленную шину будет неприятностью со 128 узлами.

Для такой переполненной системы вы должны организовать их в группы. Каждая группа представляет собой подсеть, и только один из MCU в группе играет роль слушателя и говорящего снаружи и правителя внутри. Эти группы создают цели, которые мастер выбирает первым, а затем адрес элемента подсети или всю информацию, которая есть у группы.

Итак, преимущество в том, что теперь у вас есть свобода реализации различных топологий для основной сети и групповых элементов для более быстрой и надежной связи.