I2C协议基础介绍

一、I2C为什么采用开漏输出

I2C是有很多设备线与连接而成,如果采用推挽输出的话,难免会出现下面的情况,一个设备输出高,另外设备输出低,也就是左边设备的PMOS打开而右边设备的NMOS打开,这样就在VCC和GND之间形成短路,此时大的电流会把设备烧毁,后果是灾难性的。

但凡多个设备直接相连并且双向输出的总线, 要么设计成开漏输出,要么设计成三态门。

二、I2C上拉电阻选择

I2C的上拉电阻可以是 1.5K,2.2K,4.7K, 电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响,一般接1.5K或2.2K。

1.先确定最大值:取值太大的话,会导致两个后果,一是芯片接收端驱动能力不足是上升时间不够。
2.再确定最小值:电阻取值太小的话,会导致Vol太大,芯片低电平下不来。

I2C 上拉电阻计算公式

  • Rmin={Vdd(min)-0.4V}/3mA
  • Rmax=(T/0.874)*C, (T=1us 100KHz;T=0.3us 400KHz)

C是总线电容,标准模式,100Kbps 总线的负载最大容限<=400pF;快速模式,400Kbps 总线的负载最大容限<=200pF,根据具体使用情况、目前的器件制造工艺、PCB 的走线距离等因素以及标准的向下兼容性,设计中以快速模式为基础,即总线负载电容<200pF,也就是传输速度可以上到400Kbps 是不成问题的。

上拉电阻Rp 最大值由总线最大容限(Cbmax)决定,上拉电阻Rp最小值由 Vol 与上拉驱动电流(最大取3mA)决定。

三、I2C通信时序

开始信号:SCL为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

(1)I2C的读操作步骤

  • 1.Start
  • 2.Master发device address3Master发 R/W为Write;4.Slave 回ACK
  • 5.Master发寄存器地址,也叫Word Address
  • 6.Slave收到后再回ACK
  • 7.此时Slave内部的寄存器指针已经知道对应的寄存器地址
  • 8.Master发start
  • 9.Master再次发device address
  • 10.Master 发R/W为Read
  • 11.Slave发出ACK
  • 12.Slave发数据给Master
  • 13.Master收到数据后发NAK给Slave
  • 14.Master发stop结束本次读操作

(2)I2C的写操作步骤

  • 1.Start
  • 2.Master发device address
  • 3.Master发 R/W为Write
  • 4.Slave 回ACK
  • 5.Master发寄存器地址,也叫Word Address
  • 6.Slave 再回ACK
  • 7.Master发要写的数据给Slave
  • 8.Slave收到数据后回ACK
  • 9.Master看到ACK后发Stop结束本次操作

(3)I2C的读或写操作

四、I2C电平转换电路

SDA是双向的,电路分析有四种情况

(1)Master往Slave发数据1

  • 左边MasterSDA _1为输出,驱H-3.3VNMOS的VGS=0,此时NMOS关闭;
  • 右边的Slave的SDA_ 2是输入,对外呈现高阻;
  • NMOS关断和SLAVE为输入,导致SDA2悬空;
  • 最终SDA _2依靠RP2上拉到5V,完成3.3V到5V的转换;

(2)Master往Slave发数据0

  • 左边MasterSDA_1为输出,驱Low=0,NMOS的VGS>0,此时NMOS打开;
  • 右边的Slave的SDA_2是输入,对外呈现高阻;
  • NMOS打开和SLAVE为输入,导致SDA_2=SDA_1=0:
  • 最终SDA_2被SDA_1拉到0,完成低电平的转换;

(3)Slave往Master发数据1

  • 右边Slave SDA_2为输出,驱H-5V;
  • 左边Master SDA _1为输入,对外高阻,被RP1上拉到3.3V;
  • NMOS 因为VGS=0一直关闭;
  • NMOS关闭,MasterSDA_1维持3.3V高电平,完成电平转换;

(4)Slave往Master发数据0

  • 右边Slave SDA_2为输出,驱LOW;
  • 左边Master SDA_1为输入,对外高阻,被RP1上拉到3.3V;
  • NMOS 因为VGS=0一直关闭;
  • 由于左边SDA_1为高,右边SDA 2为LOW,MOS管体二极管导通;
  • SDA_1被拉低,导致NMOS VGS>0 后打开;
  • NOMO打开后,SDA_1和SDA_2相当于短在一起;
  • 最终左边SDA_1被右边的SDA_2拉低变为Low;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值