Есть ли какое-нибудь определенное руководство по распиновке I2C? Не ищу «СТАНДАРТ»


16

РЕДАКТИРОВАТЬ: Это повторялось несколько раз, так что вкратце: да, хорошо известно, что не существует «стандарта» для соединителей между устройствами I2C, но, безусловно, это сообщество может сформулировать список «руководящих» пунктов для принятия такие межсоединения, основанные на поведении сигнала, минимизации шума и уменьшении риска из-за неправильных соединений.


NXP определили я понимаю, стандарт I2C без указания разводки для разъемов I2C. Единственное руководство от NXP, по-видимому, заключается в упоминании размещения заземления и / или Vss между SDA и SCL, если Vss / Gnd переносятся через межсоединение.

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

например

  • Моно OLED модуль: SCL, SDA, GND, 5V (очевидно, не идеальный, так как часы и данные находятся рядом друг с другом.
  • Щит датчика для Arduino: SDA, SCL, GND, 5 В (опять же не идеально, плюс переключаемый SCL / SDA)
  • Цветной ЖК-модуль: SCL, GND, 5V, SDA (ууу!)
  • Безымянный I2C-повторитель: SCL, 5V, GND, SDA (ой, они поменяли выводы питания! Почти выпустили волшебную дымку.)

Итак, мой вопрос заключается в следующем :
есть ли окончательное / авторитетное руководство для последовательности выводов 4-контактного разъема I2C, которую следует использовать, когда Vss и GND должны передаваться от хоста к устройству?

Если это не так, существует ли какой-либо каталог, хотя и неполный, модулей / устройств I2C, в котором содержится распиновка каждого из них?

Пояснение: ищем руководящие принципы, такие как «поставить VSS ближе к SCL, потому что ...», а не определенный стандарт, который явно не существует.


3
Отсюда и вопрос.
Аниндо Гош

1
По твоему собственному вопросу ясно, что нет никакого стандарта ... и если бы он был, очевидно, люди не следуют ему. Вы застряли делать прокладки. : P
Тоби Лоуренс

1
@AnindoGhosh хе. Если бы это был я, я, вероятно, отказался бы от предварительно купленных модулей и свернул бы свои собственные коммутационные платы стандартизированной распиновкой, используя поляризованный заголовок. Вероятно, что-то вроде 6 контактов, с GND рядом с SDA, SCL и 5V ..., а затем с использованием кабеля с тремя витыми парами, чтобы держать землю возле каждого сигнала, чтобы помочь снизить шум и устранить помехи.
Тоби Лоуренс

3
Некоторые люди обижаются на то, что I2C является популярной опцией подключения по умолчанию для большого количества модулей, продаваемых для пользователей Arduino. Даже если он никогда не был спроектирован для внешнего разъема платы, он здесь, и он продает и спрашивает, как лучше сделать разъем для новых устройств, полезен для нас, не экспертов, и возможно, что экспертам это не понравится.
Захватывающие

1
@ExcitingProjects Нет, они правы в том, что они говорят, I2C не был предназначен для этого и явно сталкивается с несколькими проблемами в межведомственном соединении. Это просто случайность, когда разработчики модулей решили использовать I2C. Я бы тоже «обиделась», если бы у меня был выбор.
Аниндо Гош

Ответы:


16

Я недавно свернул свой собственный, насколько разъемы I2C идут. Сам разъем не очень важен, сейчас я просто использую 100-миллиметровый заголовок (как правило, женский на плате, поэтому он не такой уж и трогательный, когда не подключен), но подойдет любой 4-контактный разъем. Кроме того, я использую P82B715от TI в качестве удлинителя шины I2C. Это устраняет проблемы с емкостью, связанные с запуском платы I2C, которая, как говорили люди, изначально не предназначалась для I2C. Я пробовал много разных комбинаций, как в приведенных вами примерах, и не заметил абсолютно никакой разницы в производительности. Я полагаю, что это потому, что I2C относительно медленный, помехи между SDA и SCL не являются большой проблемой. В основном время нарастания напряжений (когда возникнут помехи) на шине намного меньше, чем длина бита. Так что, возможно, это не то, что вы хотите услышать, но это предоставляет больше возможностей. Лично я пошел с [VCC, SDA, GND, SCL], чтобы его можно было легко маршрутизировать в / из этого чипа, а также быть невосприимчивым к смешиванию VCC / GND при подключении в обратном направлении.


2
+1 + Принять. Спасибо, возможно, самый практичный ответ на сегодняшний день: «Межведомственное I2C существует, вот как я его использую и почему». VCC / GND позволяет избежать путаницы. Хороший совет - избегать заголовков штифтов на плате, я случайно оторвал пару штырьков на некоторых сенсорных модулях.
Аниндо Гош

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

11

Когда она была впервые установлена, шина I2C (Inter-Integrated Circuit) предназначалась только для подключения микросхем на одной сборке печатной платы. Он никогда не предназначался для использования на кабелях для соединения нескольких плат вместе, и поэтому никакие разъемы для этой цели не были определены.

Мне известны только «стандартные» внешние интерфейсы на основе I2C - это недолговечный ACCESS.bus для подключения устройств пользовательского интерфейса к компьютерам и канал данных VESA Display, используемый для получения информации о мониторе через разъемы VGA, DVI и HDMI.


Я понимаю, что первоначальная цель была другой, но поскольку сейчас I2C используется для большого количества подключенных через кабель модулей, я надеюсь, что кто-то начал совместную базу данных для документирования выводов, используемых различными продуктами, особенно многими продуктами, предназначенными для Arduino и другие рынки микроконтроллерных плат.
Аниндо Гош

4

Нет стандартного вывода, нет стандартного разъема. Стандарт I2C не поддается подобным вещам. Это указывается на уровне шины, а не на уровне устройства. Например, когда вы хотите подключить устройство I2C, вы знаете по стандарту, есть ли подтягивания на хосте или на устройстве? Нет. Множество других вещей, которые вы не знаете, например, где ваши кабельные емкости, каким должен быть Vcc ....

Фактически, есть даже устройства I2C, которые нуждаются в дополнительных линиях для прерываний и других простых старых цифровых входов / выходов. Как добавить их в стандарт, если вы не можете договориться о том, сколько пинов вам нужно?

В итоге, если вы ищете мобильность и стабильность в своих межсоединениях, I2C и SPI - это не то, что вам нужно.


3
Что если кто-то ищет руководство по созданию собственного устройства, которое будет работать (и нравится) со всеми этими другими модулями для «duino»? Там есть рынок, не вижу смысла его игнорировать. Между прочим, подтяжки требуются на хосте и необязательны на устройстве согласно спецификации.
Аниндо Гош

5
«Хорошая» вещь в стандартах - это то, что есть из чего выбирать! Вы выбираете стандарт с четко определенным разъемом, таким как MIDI, USB, RS232 (помимо этих глупых нуль-модемных вещей), и встраиваете переводчик в свое собственное устройство. Другим вариантом является формирование рабочей группы по стандартизации через организацию по стандартизации, например IEEE. «Опциональные» подтягивания на устройстве влияют на поведение всей шины, точно подтверждая мою точку зрения. MIDI оптически изолирует каждое устройство по стандарту, поэтому совместимые устройства не вызывают этих проблем
Скотт Сейдман,

1
+1 за смешное, но очень верное замечание о стандартах! :-)
Anindo Ghosh

4

Многие люди используют какой-то разъем для передачи сигналов I²C и питания между двумя печатными платами. Например,

Некоторые общие советы по переносу сигналов I²C на большие расстояния:

PS: я вижу, что Википедия: I²C Цепь взаимосвязи связана с этим вопросом.


3

Несмотря на то, что нет распиновки I²C или стандарта разъема, есть довольно много мест, которые используются I²C, которые стандартизированы. На ум приходят модули памяти (DIMM, SO-DIMM), видеоразъемы ( DDC в DVI , VGA ) и SM-Bus (да, их веб-страница выглядит как нечто, созданное ребенком в середине 90-х). В частности, разъем SM-Bus имеет ключ и содержит только I²C и питание, но SM-Bus накладывает дополнительные ограничения, поэтому технически не каждое устройство I²C должно быть подключено к реальной SM-Bus. Также есть еще несколько фирменных разъемов, таких как датчики Lego NXT.


Принято считать, что стандарта нет ... Я надеюсь, что это канонический сборник руководств, которым могут следовать разработчики устройств. Например, SMBus имеет линию + 5 В снаружи, в то время как NXP рекомендует, чтобы и V +, и GND находились между трассами сигнала. Какой путь лучше и почему?
Аниндо Гош

2

Там нет стандарта.

Там нет общей практики.

Что касается вопросов для самостоятельного решения, что делать:

  1. Держите сигналы на одной доске, как будто они были предназначены в первую очередь. Линии IIC имеют довольно высокий импеданс, являются односторонними, и поэтому чувствительны к шуму и не будут хорошо заканчивать линии передачи. IIC просто не предназначен для выхода за борт.

  2. Если вы все равно собираетесь сойти с борта, держите автобус коротким. Несколько дюймов, вероятно, в порядке. Метр или больше действительно напрашивается на неприятности.

  3. Держите вне бортов подальше от источников шума. Не наматывайте их, например, на мотор, и даже не пытайтесь подойти к нему.

  4. Используйте разъем, который нельзя подключить назад. Если кто-то может подключить его задом наперед, кто-то это сделает.

  5. Ленточный кабель, вероятно, самый простой в использовании. Вам нужно минимум три провода, SCL, SDA и земля. Добавление мощности, вероятно, хорошая идея. В любом случае, убедитесь, что провод заземления находится между SCL и SDA, чтобы избежать перекрестных помех. Провод питания не должен быть шумным, поэтому наклейте его на одну сторону, не важно, какой именно.

  6. После того, как вы поигрались с разъемами и преследовали потенциальные проблемы, поймите, что пункт 1 на самом деле был единственным, что вам нужно знать.


Таким образом, мы должны положить голову в песок для всех сотен вещей I2C, которые люди делают и продают для начинающих Arduino и других микроконтроллеров?
Захватывающие

1

Как обычно для любого поста, спрашивающего о том, почему что-то стандартизировано [nt]:
К счастью, зарядка была решена теперь, когда мы все стандартизировали на мини-USB.  [Или это микро-USB?  Дерьмо.
из XKCD


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

1
@AnindoGhosh - я не понимаю, как это имеет значение. Если вы замените стандарт на руководство в вышеприведенном комиксе, это в равной степени действительно. Любая ситуация, когда есть несколько способов сделать что-то, обычно приводит к тому, что многие люди делают это по-разному. Даже если это не формальный «стандарт».
Коннор Вольф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.