Я обдумываю проект, который потребовал бы, чтобы несколько AVR разговаривали друг с другом по шине. Они будут разделены на целых 6 футов.
Похоже, что и I2C, и SPI могут позволить ряду микросхем общаться по шине, но я не видел, чтобы кто-нибудь говорил о том, как долго это будет продолжаться. Кто-нибудь пробовал подключать эти протоколы на расстоянии нескольких футов?
avr
spi
i2c
digital-communications
edebill
источник
источник
Ответы:
Как уже говорили другие, SPI и I2C могут использоваться на больших расстояниях, если есть подтягивающие резисторы, тактовые частоты и так далее.
Основными альтернативами (которые дадут лучшую помехоустойчивость) являются RS485 и CAN . Оба из них используют дифференциальные линии для минимизации шумовых проблем и лучше подходят для такой длины передачи данных, чем I2C или SPI. Тем не менее, я не думаю, что многие (какие-либо?) AVR поставляются со встроенными периферийными устройствами CAN, которые значительно упрощают использование CAN.
Я бы сказал, что самое важное при выборе шины - это убедиться, что протокол, который вы используете для обмена данными между устройствами, содержит CRC или эквивалентный код, чтобы вы могли определить, было ли сообщение получено правильно (CAN имеет это как часть пакет). Учитывая это, также полезно иметь ответ типа ACK / NACK как часть протокола, так что поврежденное сообщение может быть повторно передано.
источник
Несколько футов не должно быть проблематичным, просто используйте витые провода, если можете. SPI гораздо проще буферизовать (если нужно), чем I2C, поскольку все сигналы SPI однонаправлены, тогда как сигналы I2C находятся на общих линиях.
Могут ли микроконтроллеры AVR работать с подчиненными режимами I2C и SPI, а также с основными режимами? (вам нужны оба)
источник
Для I2C на больших расстояниях вы, возможно, захотите найти некоторые решения «I2C bus повторитель». Имейте в виду, что любое максимальное расстояние, которое вы можете найти для связи I2C или SPI, в основном относится к общему расстоянию шины, а не к расстоянию между двумя узлами в шине.
Возможно, вы захотите изучить RS485 для подобных проблем. Это протокол последовательной шины, который связывается по дифференциальным линиям, поэтому при использовании витых проводов шумы минимизируются. Очень большие расстояния могут быть достигнуты таким образом. Недостатком может быть то, что вам понадобится дополнительная микросхема RS485 (например, MAX485, не очень дорогая) в вашей цепи.
источник
Еще одно преимущество SPI по сравнению с I2C, которое еще не упомянуто, заключается в том, что все провода SPI являются однонаправленными и всегда имеют высокий или низкий уровень. Это обеспечивает намного более быструю связь, чем это возможно с I2C, снижает восприимчивость к шуму и позволяет использовать простые затворы в качестве повторителей. Еще одна полезная опция - простая асинхронная связь (по одному проводу в каждом направлении). Единственный недостаток асинхронного взаимодействия, который я вижу, заключается в том, что для обмена данными обычно требуется, чтобы обе стороны были «бодрыми» со стабильными часами.
Для моего собственного проекта я использовал 3-проводной слегка модифицированный протокол SPI и нашел результаты удовлетворительными. Я отправляю данные растрового изображения (где случайное повреждение данных не составит большого труда) со скоростью 10 Мбит / с, а другие данные - со скоростью 2,5 Мбит / с без проблем.
источник
В то время как I2C и SPI предназначены для перевозок на короткие расстояния (несколько дюймов), оба могут использоваться на дальних рейсах с надлежащим кабелем и вниманием к общей емкости шины.
Хотя у меня мало опыта работы с SPI, I2C не так уж и сложен, учитывая, что вам всегда нужно рассчитывать правильный размер вашего подтягивающего резистора. Кроме того, существуют специальные и недорогие буферы I2C, которые довольно просты в использовании. Однако вам все равно придется использовать подтягивающий резистор подходящего размера для вашей сети.
Я использовал I2C для связи между двумя AVR на расстоянии 8 футов, используя только подтягивающие резисторы и высококачественный, хорошо экранированный, витой кабель.
источник
Как многие предполагали, I2C и SPI лучше всего использовать для коротких расстояний. Хотя может быть возможно реализовать решение с этими интерфейсами, я настоятельно рекомендую вам поискать другое, «более стандартное» решение (например, Ethernet, RS485, CAN и т. Д.). - Особенно, если вы планируете использовать кабели для достижения 6-футового расстояния между микроконтроллерами.
источник
Просто к сведению, интерфейс между беспроводным пультом Nintendo Wii и его спутником Nunchuck использует I2C по кабелю длиной около 3 футов. Существуют также удлинительные кабели длиной 3 фута, которые увеличивают общую длину до 6 футов. Не совсем так, как ваша установка (только два устройства соединены вместе), но это пример I2C по кабелю в широко используемом потребительском продукте.
источник
Я работал над проектом, включающим около 80 AVR-узлов в звездообразной сети, взаимодействующих через I2C. Это был полный беспорядок и в итоге не сработало. Получение обновлений для всех узлов заняло секунды, и одно неисправное соединение отбросило бы всю сеть. В последний раз я говорил с парнем, который сделал узлы, он сказал, что он перестал использовать I2C для подобных проектов. К сожалению, я не знаю, почему конкретно I2C был неадекватен здесь.
источник
Это должно быть легко с такими короткими расстояниями. Что вы можете сделать, это выяснить, что эти расстояния и ваши кабели означают с точки зрения емкости и сопротивления линии, и посмотреть, какие частоты (время нарастания / спада) вы можете пройти через них. За пределами определенного момента, лучше всего рассматривать их как линии электропередачи. Если все выглядит плохо, вы действительно можете переключиться на другую последовательную линию, такую как EIA-232 или 422. Это может означать дополнительную микросхему на обоих концах, но она простирается далеко. Если вам действительно нужно идти быстро и далеко, вам нужно что-то большее (Ethernet, не считайте радио или лазер :).
источник
Если вы можете контролировать тактовую частоту и вам не нужна высокоскоростная передача данных, вам следует попытаться замедлить время. Это сделает его менее восприимчивым к шуму.
источник