Преобразование I2C 3,3 в 5,0 В

Я пытаюсь подключить устройство 3.3VI 2 C к 5V Arduino.

У меня нет проблем с линией SCL. Я могу использовать простой делитель напряжения, но у меня проблема с линией SDA, так как она двунаправленная.

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

Есть ли другие решения?

Будущие читатели должны знать, что хотя OP может использовать SCL только в одном направлении, I2C обычно допускает двунаправленность SCL.

Ответы (4)

Хорошим документом по этому вопросу является двунаправленный переключатель уровня для шины I2C и других систем, в которых используется один MOSFET в качестве двунаправленного переключателя уровня.

Мне нравится схема Philips. Умный. В некотором смысле было бы лучше, если бы выходы I2C не потребляли весь ток от всех подтягивающих устройств, но разработать активный повторитель I2C сложно; Я не думаю, что это можно сделать с помощью обычной логики, поскольку повторитель должен иметь возможность обнаруживать нарастающий фронт и реагировать на него до того, как это смогут сделать какие-либо устройства I2C.
Ссылка мертва!
Интернет-архив @Zimano спешит на помощь: web.archive.org/web/20121222214842/http://ics.nxp.com/support/…
@ Адриан Круто! Спасибо!

Чтобы расширить ответ sivu, это обычное использование так называемых «переключателей шины», которые в основном представляют собой полевые МОП-транзисторы с логическим управлением. Использование дискретных МОП-транзисторов имеет некоторые недостатки (один из них — паразитная емкость/емкостная связь), и выбор хорошего МОП-транзистора может быть сложным. Коммутаторы шины оптимизированы для использования в высокоскоростных логических схемах.

Их производят несколько производителей, в том числе Fairchild, TI, IDT и Pericom. Взгляните на NC7SZ384 .

Среди прочего см. следующие приложения:

Многие платы Arduino имеют встроенную поддержку для работы при напряжении 3,3 В. На самом деле все они могут работать при напряжении 3,3 В, и схема микросхемы FTDI объясняет, как это делается в примере. Пол, который сделал Teensy USB Arduino , предложил мне соединить USB-кабель и подать напряжение 3,3 В вместо линии V CC кабеля. Вы можете попробовать это. Но есть и другие варианты.

  1. Проверьте логические уровни для Arduino. Я считаю, что они поддерживают 3,3 В как ВЫСОКИЙ логический уровень даже на 5-вольтовом источнике Atmel. В статье SparkFun говорится: «* Подключить цифровой выходной контакт 3,3 В к входному контакту 5 В часто несложно. Большинство устройств довольно терпимы к минимальному напряжению, которое они примут в качестве цифрового высокого значения. Большинство микроконтроллеров Atmel, например, воспринимайте все, что выше 0,6 * В CC , как высокое, поэтому устройство 3,3 В должно выдавать уровень выше 3 В (0,6 * 5 В). *"
  2. Купите один из клонов Arduino с перемычками на селекторах 3,3 В и 5 В. Я использую клоан RBBB , в котором я установил чип FTDI для кабелей питания на 3,3 В. Но есть много других, которые имеют фактические варианты конфигурации 3,3 В, включая один из последних официальных Arduinos, если я правильно помню. Вы также можете использовать Teensy USB с его плагином для Arduino и следовать инструкциям на его сайте, чтобы установить стабилизатор на 3,3 В.
  3. Соедините USB-кабель и подключите лабораторный источник питания 3,3 В вместо линии V CC USB-кабеля. Как предложил Пол, он должен быть слаботочным. Следовательно, либо источник напряжения хорошего качества. Вы также можете просто поставить пару аккумуляторов последовательно, чтобы получить желаемое напряжение.
  4. Если вам интересно, я могу попытаться изучить схему вашего Arduino и, возможно, можно внести изменения в конфигурацию FTDI, которые позволят использовать 3,3 В.

Наконец, у нас есть обсуждение, которое может вас заинтересовать, здесь, на Chiphacker, об однонаправленных и двунаправленных решениях для понижения напряжения. Эта статья о SparkFun , упомянутая todbot, полезна, как и обсуждение статьи о двунаправленных полевых МОП -транзисторах, на которую ссылается SparkFun. Подводя итог статье SparkFun:

  • Встроенный резистор. Однонаправленный. Только понижение - уменьшает ток, ограничивающие диоды ввода-вывода ИС могут ограничивать максимальный вход.
  • Последовательные резисторы. Однонаправленный. Только шаг вниз, но гранулированный.
  • Диод. Однонаправленный. Шаг вниз. Безопаснее. Высокий от 5 В блокирует диод; сторона 3,3 В затем привязывается к высокому. Но если вы поменяете конфигурацию диодов, не сможете ли вы также увеличить мощность?
  • МОП-транзистор. Двунаправленный. Шаг вниз или шаг вверх.
  • В комментариях: Пример оптической развязки: 4N25. Высокий ток.
  • В комментариях: Пример стабилитрона: 1N4728A
  • В комментариях: 74HC244/125 однонаправленный

Существуют микросхемы, специально предназначенные для I2C со сдвигом уровня:

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