it芯片|【知识分享】I2C为什么要用开漏输出和上拉电阻?

it芯片|【知识分享】I2C为什么要用开漏输出和上拉电阻?

I2C为什么要接上拉电阻?
因为它是开漏输出 。

为什么是开漏输出?
I2C协议支持多个主设备与多个从设备在一条总线上 , 如果不用开漏输出 , 而用推挽输出 , 会出现主设备之间短路的情况 。 所以总线一般会使用开漏输出 。
【it芯片|【知识分享】I2C为什么要用开漏输出和上拉电阻?】为什么要接上拉电阻?
接上拉电阻是因为I2C通信需要输出高电平的能力 。 一般开漏输出无法输出高电平 , 如果在漏极接上拉电阻 , 则可以进行电平转换 。
I2C由两条总线SDA和SCL组成 。 连接到总线的器件的输出级必须是漏极开路 , 都通过上拉电阻连接到电源 , 这样才能够实现“线与”功能 。 当总线空闲时 , 这两条线路都是高电平 。
上拉电阻阻值怎么确定?
一般IO端口的驱动能力在2mA~4mA量级 。
阻值不能过小:
功耗问题 。 如果上拉阻值过小 , VDD灌入端口的电流将较大 , 功耗会很大 , 导致端口输出的低电平值增大(I2C协议规定 , 端口输出低电平的最高允许值为0.4V) 。 故通常上拉电阻应选取不低于1K的电阻(当VDD=3V时 , 灌入电流不超过3mA) 。
阻值不能过大:
速度问题 。 它取决于上拉电阻和线上电容形成的RC延时 , RC延时越大 , 波形越偏离方波趋向于正弦波 , 数据读写正确的概率就越低 , 所以上拉电阻不能过大 。
I2C总线上的负载电容不能超过400pF 。 当I2C总线上器件逐渐增多时 , 总线负载电容也相应增加 。 当总的负载电容大于400pF时 , 就不能可靠的工作 。 这也是I2C的局限性 。
建议上拉电阻可选用1.5K , 2.2K , 4.7K 。
I2C总线基本操作
根据I2C总线规范 , 总线空闲时两根线都必须为高 。 假设主设备A需要启动I2C , 他需要在SCL高电平时 , 将SDA由高电平转换为低电平作为启动信号 。
主设备A在把SDA拉高后 , 它需要再检查一下SDA的电平 。 为什么? 因为线与 , 如果主设备A拉高SDA时 , 已经有其他主设备将SDA拉低了 , 由于 1 & 0 = 0 那么主设备A在检查SDA电平时 会发现不是高电平 , 而是低电平 。 说明其他主设备抢占总线的时间比它早 , 主设备A只能放弃占用总线 。 如果SDA是高电平 , 说明主设备A可以占用总线 , 然后主设备A将SDA拉低 , 开始通信 。
因此 , 模拟I2C一定要将GPIO端口设置为开漏输出并加上拉电阻 。
|本文转载自网络 , 如涉及作品内容、版权和其它问题 , 请于联系工作人员 , 我们将在第一时间和您对接删除处理!