i2c为什么要接上拉电阻?因为它是开漏输出。
1
为什么是开漏输出?
i2c协议支持多个主设备与多个从设备在一条总线上,如果不用开漏输出,而用推挽输出,会出现主设备之间短路的情况。
所以总线一般会使用开漏输出。
2
为什么要接上拉电阻?
接上拉电阻是因为i2c通信需要输出高电平的能力。一般开漏输出无法输出高电平,如果在漏极接上拉电阻,则可以进行电平转换。
i2c由两条总线sda和scl组成。连接到总线的器件的输出级必须是漏极开路,都通过上拉电阻连接到电源,这样才能够实现“线与”功能。
当总线空闲时,这两条线路都是高电平。
3
上拉电阻阻值怎么确定?
一般io端口的驱动能力在2ma~4ma量级。
阻值不能过小
功耗问题。如果上拉阻值过小,vdd灌入端口的电流将较大,功耗会很大,导致端口输出的低电平值增大(i2c协议规定,端口输出低电平的最高允许值为0.4v)。
故通常上拉电阻应选取不低于1k的电阻(当vdd=3v时,灌入电流不超过3ma)。
阻值不能过大
速度问题。它取决于上拉电阻和线上电容形成的rc延时,rc延时越大,波形越偏离方波趋向于正弦波,数据读写正确的概率就越低,所以上拉电阻不能过大。
i2c总线上的负载电容不能超过400pf。当i2c总线上器件逐渐增多时,总线负载电容也相应增加。当总的负载电容大于400pf时,就不能可靠的工作。这也是i2c的局限性。
建议上拉电阻可选用1.5k,2.2k,4.7k。
4
i2c总线基本操作
根据i2c总线规范,总线空闲时两根线都必须为高。假设主设备a需要启动i2c,他需要在scl高电平时,将sda由高电平转换为低电平作为启动信号。
主设备a在把sda拉高后,它需要再检查一下sda的电平。为什么? 因为线与,如果主设备a拉高sda时,已经有其他主设备将sda拉低了,由于 1 & 0 = 0 那么主设备a在检查sda电平时, 会发现不是高电平,而是低电平。
说明其他主设备抢占总线的时间比它早,主设备a只能放弃占用总线。如果sda是高电平,说明主设备a可以占用总线,然后主设备a将sda拉低,开始通信。
因此,模拟i2c一定要将gpio端口设置为开漏输出并加上拉电阻。
PLC控制伺服电机正反转的工作原理和接线方法
爱立信在5G设备订单方面继续居于第一名,订单已增加至118份
Python在实时嵌入式系统中扮演的角色
基于MEMS陀螺仪的汽车驾驶操作信号采集系统设计
未来10年全球芯片产能将有45%集中在中国
I2C总线一定要接上拉电阻?上拉电阻阻值怎么确定?
这些电感知识看完你就懂了
区块链到底是什么?它在未来又能为我们带来哪些改变呢?
苹果iPhone8正式发布:iPhone8发布会精彩回顾:iphone8有哪些黑科技和创新让你毫无保留的去卖肾?
一加9 Pro被曝光,欲在明年3月份发布
露点仪测量条件的选择
嵌入式Flash的边界是什么,有何作用?
泛在电力物联网的电网企业总体战略及目标
加密货币促进传统业务发展的六种方式
12V电机做个12V转220V逆变器的方法
目前攻击单片机主要有四种技术,分别都是哪四种
创维电视在北京举行新闻发布会宣布与CCTV-4K频道的全新合作
LED透明屏和LED玻璃屏的对比和优势
幽灵攻击的消减方法
压敏电阻器的型号命名方法