Я проектирую встроенное устройство, которое я хотел бы сделать совместимым со сторонними периферийными устройствами через последовательную шину. Стоит ли выбирать SPI, I²C или другую шину?
Периферийные устройства будут иметь довольно низкую пропускную способность (некоторые датчики, которые обмениваются данными по шине, периодически опрашиваются) и, скорее всего, в пределах метра или меньше от контроллера. Единственная задача контроллера состоит в том, чтобы собрать данные датчика, каким-то образом упаковать их, а затем отправить их на беспроводной модуль через другую шину (хотя шина датчика потенциально может быть использована для этого тоже).
Ответы:
Если вы не уверены, и ваши требования довольно расплывчаты, я бы выбрал I²C.
Основное различие между SPI и I²C состоит в том, что SPI требует линии выбора микросхемы для каждого периферийного устройства. I²C транслирует периферийный адрес в начале связи, поэтому он не нуждается в линиях выбора микросхемы. Строки выбора фишек становятся громоздкими после первых нескольких.
С другой стороны, SPI, вероятно, проще реализовать и отладить. Это может быть победителем, если вы просто хотите подключиться к паре устройств.
Я бы исключил USB, если вам не нужны высокие скорости передачи данных на относительно большие расстояния (м, а не см). Я бы также исключил RS-232, если только это не 1976 год, а вашим периферийным устройствам нужен мощный сигнал, чтобы немного отличить его от шума.
Вы могли бы рассмотреть 1-проводной Даллас, но я подозреваю, что это не так распространено, как I²C, и "1-проводная" шина, которая нуждается в 2 проводах, всегда казалась мне немного подозрительной.
источник
Поскольку вы сказали, что это будет низкая пропускная способность, я бы выделил достаточно ввода-вывода для обработки как SPI, так и I2C. Я также, если возможно, имел бы дополнительные линии CS, чтобы вы могли запускать несколько устройств SPI. Также не забудьте посмотреть, как вы собираетесь питать периферийные устройства. Если вы работаете от батареи, чтобы получить максимальный срок службы, вам необходимо перевести устройство в режим низкого энергопотребления или отключить питание, когда оно не используется. Также используйте ваш контроллер последовательного контроллера, если это возможно, многие контроллеры будут мультиплексировать SPI, I2C и последовательный. Если вы можете и отделить беспроводную связь от датчика, это облегчит выключение устройств, когда они не используются. Кроме того, некоторые датчики имеют линию, которая сообщает контроллеру, когда они должны быть обслужены, так что вы также хотите иметь дополнительный ввод / вывод, в идеале тот, из которого вы можете генерировать прерывание.
источник
Вопрос представляет собой небольшую проблему из-за проблем с определением.
Сериализованная связь - это, в основном, то, что вам нужно, если вы хотите обмениваться данными с некоторыми внешними периферийными устройствами без использования множества портов на вашем контроллере. В принципе, для каждого метода последовательной связи требуются часы и конфигурация для обработки соединений данных.
SPI - это 4-х проводная шина. I2C - это двухпроводная шина.
У каждого разные характеристики. Что вам нужно ответить, так это то, насколько быстрой должна быть ваша коммуникация, насколько надежной она должна быть, какие опции предлагает ваш микроконтроллер и т. Д.
Эта статья в Википедии и этот справочный сайт объясняют гораздо яснее, чем я, также следуйте ссылкам, чтобы узнать больше!
источник
По сути, вы должны выбрать между I2C и SPI.
Независимо от того, какую шину вы используете, вы должны учитывать уровень напряжения ваших датчиков и сторонних периферийных устройств. Вы можете сделать это, сделав свой собственный преобразователь с двумя полевыми МОП-транзисторами (только в одну сторону - Поднять / без изменений или с понижением / без изменений; проблема только в том случае, если вам нужно запустить ваши датчики на 3.3 и взаимодействовать с мастерами 1.8 и 5V). См. NXP AN10441 [PDF]. Это также будет работать для SPI (просто удалите подтягивания). Вам нужно будет добавить строку в разъем , чтобы установить опорное напряжение (если вы не делаете так уже.)
Недостатком I2C является то, что вы ограничены самыми медленными часами на шине. Если один датчик способен работать только на 100 кГц, и вы хотите общаться с вашей памятью на частоте 400 кГц или 1 МГц (обе допустимые скорости), поведение вашего более медленного датчика не определено. Если вы используете SPI, строка выбора микросхемы означает, что более медленный датчик даже не будет прослушивать, что находится на шине, и вы можете запускать разные скорости для разных датчиков.
источник
Я бы использовал I2C. Просто убедитесь, что вы можете получить беспроводной модуль, который может обмениваться данными через I2C, если вы хотите, чтобы он был на той же шине, что и ваши датчики. Большинство коммуникационных периферийных устройств, которые я видел, используют SPI, а не I2C.
источник