Какая самая популярная встроенная последовательная шина? [закрыто]


8

Я проектирую встроенное устройство, которое я хотел бы сделать совместимым со сторонними периферийными устройствами через последовательную шину. Стоит ли выбирать SPI, I²C или другую шину?

Периферийные устройства будут иметь довольно низкую пропускную способность (некоторые датчики, которые обмениваются данными по шине, периодически опрашиваются) и, скорее всего, в пределах метра или меньше от контроллера. Единственная задача контроллера состоит в том, чтобы собрать данные датчика, каким-то образом упаковать их, а затем отправить их на беспроводной модуль через другую шину (хотя шина датчика потенциально может быть использована для этого тоже).


3
Это зависит от того, с какими периферийными устройствами вы хотите взаимодействовать, при каких напряжениях, с какой скоростью и на каком расстоянии.
Тоби Джаффей

1
Я добавил больше деталей к вопросу
pfyon

1
Я не могу поверить, что UART вообще не упоминался ... Я просто говорю.
Викацу

Поправь меня, если я ошибаюсь, но я не думал, что UART - это автобус. Я думал, что это была просто последовательная связь между двумя устройствами.
pfyon

То есть шина не для последовательной связи между двумя устройствами? Вы обесцениваете это, потому что это иногда просто используется точка-точка? PCIe, SATA, HT, как правило, являются двухточечными. Несмотря на это, большинство периферийных устройств UART могут использоваться для RS-422, RS-485 или LIN, которые являются многоточечными.
Ник Т

Ответы:


12

Если вы не уверены, и ваши требования довольно расплывчаты, я бы выбрал I²C.

Основное различие между SPI и I²C состоит в том, что SPI требует линии выбора микросхемы для каждого периферийного устройства. I²C транслирует периферийный адрес в начале связи, поэтому он не нуждается в линиях выбора микросхемы. Строки выбора фишек становятся громоздкими после первых нескольких.

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

Я бы исключил USB, если вам не нужны высокие скорости передачи данных на относительно большие расстояния (м, а не см). Я бы также исключил RS-232, если только это не 1976 год, а вашим периферийным устройствам нужен мощный сигнал, чтобы немного отличить его от шума.

Вы могли бы рассмотреть 1-проводной Даллас, но я подозреваю, что это не так распространено, как I²C, и "1-проводная" шина, которая нуждается в 2 проводах, всегда казалась мне немного подозрительной.


1
Я думаю, что если у вас очень простой контроллер и вам нужно использовать битовую синхронизацию (в основном ручное управление тактовой частотой), гораздо проще реализовать SPI на 4 оставшихся через порты GPIO.
Воутер Симонс

1
Я думаю, что вы правы в том, что SPI проще, чем I2C. Я надеюсь, что это не приведет к битам
pfyon

3
+1 для подозрительности 2-проводной системы, продаваемой как "1-проводная".
Семай

И что еще хуже, многим микросхемам, которые реализуют 1-проводную (+ заземление) систему, требуется третий вывод - Vcc - потому что они не могут работать от паразитного питания! Когда я думаю о 1-проводной шине, я представляю себе какую-то емкость с емкостной связью, с мостовым выпрямителем с ограничением по току и некоторым кодом линии самосинхронизации; не 2 или 3 провода.
Кевин Вермеер

«1-проводной» должен был называться «1-проводной», поскольку это больше, чем он есть. Дополнительные провода - заземление и (иногда) стабильная линия электропередачи.
Йохан

3

Поскольку вы сказали, что это будет низкая пропускная способность, я бы выделил достаточно ввода-вывода для обработки как SPI, так и I2C. Я также, если возможно, имел бы дополнительные линии CS, чтобы вы могли запускать несколько устройств SPI. Также не забудьте посмотреть, как вы собираетесь питать периферийные устройства. Если вы работаете от батареи, чтобы получить максимальный срок службы, вам необходимо перевести устройство в режим низкого энергопотребления или отключить питание, когда оно не используется. Также используйте ваш контроллер последовательного контроллера, если это возможно, многие контроллеры будут мультиплексировать SPI, I2C и последовательный. Если вы можете и отделить беспроводную связь от датчика, это облегчит выключение устройств, когда они не используются. Кроме того, некоторые датчики имеют линию, которая сообщает контроллеру, когда они должны быть обслужены, так что вы также хотите иметь дополнительный ввод / вывод, в идеале тот, из которого вы можете генерировать прерывание.


2

Вопрос представляет собой небольшую проблему из-за проблем с определением.

Сериализованная связь - это, в основном, то, что вам нужно, если вы хотите обмениваться данными с некоторыми внешними периферийными устройствами без использования множества портов на вашем контроллере. В принципе, для каждого метода последовательной связи требуются часы и конфигурация для обработки соединений данных.

SPI - это 4-х проводная шина. I2C - это двухпроводная шина.

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

Эта статья в Википедии и этот справочный сайт объясняют гораздо яснее, чем я, также следуйте ссылкам, чтобы узнать больше!


2

По сути, вы должны выбрать между I2C и SPI.

Независимо от того, какую шину вы используете, вы должны учитывать уровень напряжения ваших датчиков и сторонних периферийных устройств. Вы можете сделать это, сделав свой собственный преобразователь с двумя полевыми МОП-транзисторами (только в одну сторону - Поднять / без изменений или с понижением / без изменений; проблема только в том случае, если вам нужно запустить ваши датчики на 3.3 и взаимодействовать с мастерами 1.8 и 5V). См. NXP AN10441 [PDF]. Это также будет работать для SPI (просто удалите подтягивания). Вам нужно будет добавить строку в разъем , чтобы установить опорное напряжение (если вы не делаете так уже.)

Недостатком I2C является то, что вы ограничены самыми медленными часами на шине. Если один датчик способен работать только на 100 кГц, и вы хотите общаться с вашей памятью на частоте 400 кГц или 1 МГц (обе допустимые скорости), поведение вашего более медленного датчика не определено. Если вы используете SPI, строка выбора микросхемы означает, что более медленный датчик даже не будет прослушивать, что находится на шине, и вы можете запускать разные скорости для разных датчиков.


1

Я бы использовал I2C. Просто убедитесь, что вы можете получить беспроводной модуль, который может обмениваться данными через I2C, если вы хотите, чтобы он был на той же шине, что и ваши датчики. Большинство коммуникационных периферийных устройств, которые я видел, используют SPI, а не I2C.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.