Почему у I²C есть только подтягивающие резисторы (вопрос для интервью)?


15

Интервьюер хотел знать, почему подтягивающие резисторы используются в SDA и SCL, когда также может быть реализована противоположная логика. Есть ли объяснение того, почему использование подтягивающего резистора является выбранной конструкцией?


Смотрите предыдущий ответ: electronics.stackexchange.com/questions/113009/…
Чу

Так же, как комментарий, протокол сверхбыстрого режима шины I2C работает как двухтактная конфигурация, см. Nxp.com/documents/user_manual/UM10204.pdf , раздел 3.2 Протокол
сверхбыстрого

Интересно, почему в NXP не был указан сверхбыстрый протокол I2C, в котором использовались двунаправленные SDA и однонаправленные SCK, жесткий SDA основного диска, когда он хотел вывести высокий уровень, и главный мастер ожидал достаточно долго, чтобы линия была поднята высоко в тех случаях, когда это будет важно, что раб должен был сказать?
суперкат

Интервьюер дал свою версию ответа?
медь

Ответы:


14

Чтобы немного расширить ответ Джона:

Да, все это связано с тем, какие MOSFET вы хотите использовать.

N-канальные MOSFET намного лучше переключают логику, чем P-канал, потому что:

  • Они обычно имеют намного меньшее сопротивление ( )рDSОN
  • Они включаются и выключаются быстрее

Таким образом, для конфигурации с открытым стоком (то есть, чем является I2C), гораздо дешевле и проще создать ее, используя схему «высокий холостой ход» с N-канальными MOSFET, а не «низкий уровень холостого хода» с P-канальными MOSFET.

Третий вариант - «низкий уровень холостого хода» с использованием N-канальных MOSFET, но для этого вам потребуется высоковольтный драйвер затвора, чтобы поднять напряжение на затворе достаточно далеко над напряжением источника, чтобы MOSFET включился. Непрактично для небольших коммуникационных шин, но эта схема на самом деле довольно часто используется в H-мостах для вождения двигателя, где требуется одинаковый (или аналогичный) отклик между верхней и нижней сторонами H-моста. Использование пар P-channel и N-channel в H-мосте обычно означает, что вы должны включить мертвую зону между выключением P-канала и включением N-канала, так как это занимает намного больше времени, и это снижает эффективность использования энергии. ,

Но для небольших коммуникационных шин, таких как I2C, где вам нужна высокая скорость, низкая стоимость и простота использования, «холостой ход» с N-канальными МОП-транзисторами и подтягивающими резисторами, безусловно, является наиболее экономически эффективным.


Я не согласен с тем, что в I2C учитывается «высокая скорость» (по крайней мере, в его первоначальном дизайне). Резистивные подтягивания вряд ли являются способом достижения высокой скорости, если это является целью.
Фотон

1
Не путайте более высокую скорость переключения с более высокой пропускной способностью. Высокая скорость переключения дает вам более острые края, что означает более надежную связь.
Majenko

1
Резистивные подтягивания также не являются способом достижения более высокой скорости переключения.
Фотон

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

Да, вы можете выбрать резисторы, чтобы получить лучшее время нарастания. Но вся система все еще работает медленнее и / или потребляет больше энергии, чем это было бы с драйверами тотемных столбов (что, конечно, добавило бы другие затраты).
Фотон

12

Другое преимущество пассивного подтягивания / активного опускания состоит в том, что он может работать с диапазоном напряжений питания. Обратите внимание, что цифровые верхние и нижние уровни явно указываются с помощью IIC. Эти уровни достаточно низкие, чтобы работать с подтягиванием 3,3 В. Поэтому могут быть созданы устройства, которые работают как с напряжением 5 В, так и 3,3 В. Фактически, линии шины IIC могут быть подняты до 3,3 В, и это будет работать с различными устройствами на шине, которые по отдельности питаются от разных напряжений.


Я почти на 100% - это ответ, который они искали, у меня есть друг, которого спросили об этом на собеседовании в крупной компании по производству процессоров (угадайте, какая именно), и это был ответ, который они искали.
user34920

6

Хотя у NMOS есть преимущество перед PMOS с точки зрения скорости / площади, эта разница действительно незначительна, когда вы говорите о драйвере на одном или двух выводах. И в конце концов, большинство драйверов вывода на самом деле являются типами тотемных полюсов, которые требуют как NMOS, так и PMOS, поэтому, независимо от того, выбрали ли они конфигурацию с понижением или повышением, они бы получили драйвер вывода, меньший, чем тотем. Полюс

Но есть одно преимущество выходов с открытым стоком NMOS по сравнению с открытым стоком PMOS, которое не относится к I2C напрямую: когда VCC положительный, открытый сток NMOS позволяет соединять микросхемы с различными уровнями VCC. Именно поэтому (часть) доступны многочисленные дискретные логические ИС с открытым стоком NMOS.

С другой стороны, я не знаю ни о каких доступных на рынке чипах с открытым стоком PMOS. На самом деле я не верю, что когда-либо сталкивался с выходом PMOS с открытым стоком на любом чипе. (Я использовал ECL много раз, у которого выход NPN с открытым эмиттером похож на поведение PMOS с открытым стоком)

Наличие дискретных логических чипов NMOS с открытым стоком делает NMOS с открытым стоком гораздо более знакомым разработчикам электронных схем, чем PMOS с открытым стоком.

Как знакомство, так и доступность дискретных чипов (например, для создания прототипов), вероятно, повлияли на разработчиков I2C при выборе конфигурации с открытым стоком NMOS.


6

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

В первые годы существования интегральных микросхем это было довольно серьезным ограничением, и поэтому было предпочтение использовать транзисторы с N-каналом (или NPN) для достижения максимально возможной производительности. Из этого мы получили отрицательную систему заземления и выходы с открытым коллектором, которые требовали использования подтягивающих резисторов, а не понижения.

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


2

Вот некоторые (исторически обоснованные) предположения ...

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

В «старые времена» биполярных транзисторов в простейшей логике TTL использовались открытые коллекторы с NPN-транзисторами - все привязано к земле, что позволяет легко определить уровни триггера независимо от напряжения на шине. Кроме того, NPN был быстрее, чем PNP.

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

С CMOS история меняется - теперь уровень триггера - средний уровень. Но ЭЭ могут быть традиционной связкой. Конечно, исходя из первых транзисторных дней, я никогда даже не ставил под сомнение выбор подтягиваний по вышеуказанным причинам.

Как я уже сказал, это всего лишь предположение.


1

Это может быть исторической вещью.

Старые транзисторы и интегральные схемы на самом деле потребляли меньше энергии, когда они были при 5 В, чем при 0 В. Поскольку между двумя уровнями было существенное различие, разработчики решили сделать состояние «холостой» 5 В. Затем, с течением времени, транзисторы и интегральные схемы улучшились, в результате чего оба состояния потребляли примерно одинаковое количество энергии, но реальной причины для изменения стандартов не было.

Теперь вы видите много таких вещей - где напряжение составляет 5 В - просто потому, что стандарты никогда не менялись.


Все еще верно, что большинство микросхем может потреблять больше энергии, чем они могут получать, поэтому это все еще применимо.
Джоэл Б

1

Прошло много лет с тех пор, как я прочитал спецификацию I2C, но я помню, когда она впервые использовалась, люди часто называли ее шиной с 2 ​​проводами с открытым коллектором. Это сделало соединения и обнаружение столкновений супер легкими даже для ударов битами. Даже 20 лет назад он не считался высокопроизводительным автобусом, просто дешевым и простым.


1

Я бы сказал, что это потому, что I2C определяется как шина, где все подключенные устройства должны быть с открытым стоком или с открытым коллектором. Это означает, что он может вести автобус только низко, но не высоко. (Когда выходной управляющий транзистор отключен, вывод находится в состоянии высокого импеданса.)

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

Очевидно, что стандарт можно было бы определить с другой стороны, как конфигурацию idle-low / active-high, и другие ответы здесь довольно хорошо затрагивают этот элемент.

Источник: LabWorX 1, Освоение шины I2C, автор Винсент Химп. Действительно хорошая книга о I2C, его историческом прошлом, о том, как внедрить его в аппаратное обеспечение и как использовать его в программном обеспечении и отладке.


1

Реальный ответ, которого еще никто не затронул, заключается в том, что он позволяет подключать устройства, которые питаются от разных напряжений (при условии, что выводы ввода / вывода допустимы). Например, устройство 3,3 В может связываться с устройством, которое отключено от 1,8 В до тех пор, пока IO устройства 1,8 В допускает напряжение до 3,3. Конечно, каждое устройство может подавать напряжение 0 В, но не каждое устройство может подавать напряжение до ваших подтягивающих резисторов.

Кроме того, большинство микросхем может потреблять больше тока, чем они могут быть источником. Это из-за рассеивания тепла. Таким образом, ослабление тока (заземление) от подтягиваний для детали легче, чем подача тока (возбуждение высокого напряжения) в подтягивания.

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