I2C 3.3至5.0 V转换


35

我正在尝试将3.3VI 2 C设备连接到5V Arduino。

我对SCL线没有任何问题。我可以使用一个简单的分压器,但是SDA线存在双向问题,因此我对此有疑问。

我完全不确定该如何处理。尽管我要增加一对二极管,在从机输入侧有一个分压器,在主输入上没有多余的东西。

还有其他解决方案吗?


未来的读者应该意识到,即使OP可能仅在一个方向上使用SCL,I2C通常也允许SCL是双向的。
Photon

Answers:


25

关于该主题的好文献是用于I2C总线和其他系统的双向电平转换器,它使用单个mosfet作为双向电平转换器。


我喜欢飞利浦的电路。聪明。如果I2C输出不必吸收所有上拉电路的所有电流,从某种角度来说可能会更好,但是设计有源I2C中继器非常困难。我认为用常规逻辑无法做到这一点,因为转发器必须能够检测到上升沿并对任何I2C器件做出反应。
supercat

2
链接已死!
Zimano

14

为了扩展sivu的答案,这是所谓的“总线开关”的普遍用法,该总线开关基本上是逻辑控制的MOSFET。使用分立的MOSFET有一些缺点(寄生电容/电容耦合是一个缺点),选择一个好的MOSFET可能很棘手。总线开关经过优化,可用于高速逻辑电路。

一些制造商制造了它们,包括飞兆半导体,TI,IDT和Pericom。看看NC7SZ384

请参阅以下应用笔记,以及其他内容:


8

许多Arduino具有板载支持以3.3 V运行。实际上,所有Arduino都可以以3.3 V运行,并且FTDI芯片原理图在示例中进行了说明。制作Teensy USB Arduino的保罗建议我可以将USB电缆剪断,并提供3.3 V电压代替电缆的V CC线。你可以试试看。但是,还有其他选择。

  1. 检查Arduino的逻辑级别。我相信即使在5 V源Atmel上,它们也支持3.3 V作为逻辑高电平。一个SparkFun文章指出:“ *将3.3 V数字输出引脚连接到5 V输入引脚通常很简单。大多数设备都可以承受其可接受的数字高值的最小电压。例如,大多数Atmel微控制器,接受高于0.6 * V CC的电压,因此3.3 V器件必须输出高于3 V(0.6 * 5 V)的电平。*“
  2. 购买具有3.3 V和5 V选择器跳线的Arduino克隆之一。我使用RBBB克隆,将电源电缆FTDI芯片设置为3.3V。但是,还有许多其他的具有实际3.3 V配置选项,如果我没记错的话,包括最近的官方Arduino之一。您还可以将Teensy USB与他的Arduino插件一起使用,并按照他的网站上的说明安装3.3 V稳压器
  3. 连接USB电缆,并提供实验室电源质量为3.3 V的电源来代替USB电缆的V CC线。如Paul所建议的,它应该是低电流的。因此,要么是高质量的电压源。您也可以串联几个电池以获得所需的电压。
  4. 如果您有兴趣,我可以尝试检查Arduino的原理图,也许可以对允许3.3 V的FTDI配置进行更改。

最后,我们在Chiphacker上进行的讨论可能会引起您的兴趣,有关降压的单向和双向解决方案。todbot提到的有关SparkFun的这篇文章很有用,SparkFun链接的有关MOSFET的讨论也很有用。总结SparkFun文章:

  • 串联电阻。单向。仅降压-降低电流,IC I / O钳位二极管可以限制最大输入。
  • 串联电阻。单向。仅降压,但细化。
  • 二极管。单向。降压。更安全 从5 V高阻二极管;然后将3.3 V端连接至高电平。但是,如果您反转二极管的配置,您是否也不能升压?
  • MOSFET。双向的。降压或升压。
  • 在注释中:光电隔离示例:4N25。大电流。
  • 注释中:稳压二极管示例:1N4728A
  • 在评论中:74HC244 / 125单向

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.