Можно ли получить еще одно соединение I²C от Arduino Nano Every?

Я хочу объединить в сеть несколько устройств (платы в корпусе Eurorack) через I²C, но я не хочу компрометировать адресное пространство, доступное каждому отдельному устройству, для собственных нужд. Очевидным решением здесь является дать каждому устройству собственную шину I²C, которой оно управляет, а затем соединить их вместе через другую.

В этой конфигурации потребуются два независимых соединения I²C на микроконтроллере, и, если я правильно понимаю техническое описание, MCU на Arduino Nano Every может выступать в качестве хоста на одной шине и клиента на другой, используя настройку двойного режима двухпроводного интерфейса (см. главу 25 связанного описания), но на плате есть только два набора выводов с поддержкой I²C, и на схеме они соединены вместе.< /p>

Какие шаги мне нужно предпринять, чтобы подключить еще одно соединение I²C к Arduino Nano Every?

, 👍0

Обсуждение

ATmega4809 имеет только один аппаратный интерфейс i2c. Если вам нужен второй i2C, вы можете использовать любые контакты GPIO в качестве контактов i2c и самостоятельно создать программное обеспечение i2C (bit-banging) или найти какую-либо библиотеку программного обеспечения i2c в Интернете. Вы также можете купить расширитель/удлинитель i2c в качестве аппаратного решения., @hcheung

Если это так, то для чего именно нужен двойной режим? Возможности хоста и клиента явно не могут использовать одну и ту же шину независимо, поскольку I²C является только полудуплексным, поэтому, если то, что вы говорите, верно, таблица данных, похоже, искажает TWI 4809., @EnronEvolved

Если вы спрашиваете об *аппаратной* поддержке I2C/TWI, то, похоже, вы сами ответили на свой вопрос. Итак, вы можете опубликовать ответ, в котором говорится: «Нет, не без изменения платы». Что бы это ни стоило, я недостаточно хорошо понимаю задействованные устройства, а также топологию и направление потока данных, чтобы знать, что модификация платы в конечном итоге вам все равно поможет. То же самое для использования мультиплексора I2C., @timemage

Спецификация ATmega4809 не искажает TWI. Двойной режим не означает два порта TWI, это означает, что у вас может быть два набора проводов TWI, один для главного и один для подчиненного, внутренне он управляется путем настройки регистров, вы можете думать, что есть два переключателя STDP, управляемые Регистр PORTMUX, который переключается между ведущим и подчиненным проводами. Прочтите «15 PORTMUX» и «25. TWI — двухпроводной интерфейс» таблицы технических данных, чтобы понять двухрежимный TWI., @hcheung


1 ответ


1

Добро пожаловать!

Теоретически к шине I2C можно подключить 127 устройств. Я предлагаю вам немного почитать о шине I2C, прежде чем вы начнете свой проект. Надеюсь, все эти устройства I2C находятся на одной плате, но, поскольку вы хотите объединить их в сеть, у меня такое чувство, что вы совершаете очень болезненную ошибку. I2C никогда не предназначался для использования в сети.

Для группы устройств я бы серьезно посмотрел на CAN, два провода для их подключения - это все, что нужно даже для расстояния более 250 метров или 800 футов при скорости передачи 250 кбит/с. Я обычно также бегаю по земле. Это будет намного быстрее, чем I2C. CAN — это симплексный режим связи, который очень быстро переключается. Каждый узел может отправлять и получать данные под управлением программного обеспечения. Он выполняет свой собственный арбитраж, не нужно беспокоиться об этом, контроллеры сделают это за вас.

,

Я думал о CAN, но подумал, что он немного перегружен для того, чего я пытаюсь достичь. Я уточнил вопрос, так как не дал понять, что шкала длины короче, чем предполагает глагол «сеть»., @EnronEvolved

Вам, вероятно, придется экранировать шину I2C, так как многие из них на аудиомикшере будут создавать шум. Возможно, вам также придется замедлить его из-за емкости шины. Дайте нам знать, как вы это делаете., @Gil