中国电子技术网

设为首页 网站地图 加入收藏

 
 

I2C总线的传输协议及工作原理

关键词:I2C总线 传输协议 主机总线

时间:2020-09-01 15:42:16      来源:网络

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。

一、特点

  I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。其主要特点可以概括如下:

  (1)在硬件上,12C总线只需要一根数据线SDA和一根时钟线SCL两根线,SDA传输数据,每次传输8bit,即一字节,且先传输高bit,再传输低bit。SCL是时钟线,用于时钟同步。

  (2)I2C总线是一个真正的多主机总线。如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有的地址,任何器件既可以作为主机也可以作为从机,但任何时间点只能有一个主机。总线上每个设备都有自己的一个地址,通过地址方式寻址各个器件,共7个bit,理论上总线可挂载127个器件(全0为广播地址),但一个系统中可能有多个同种芯片,因此地址又分为固定部分和可编程部份,具体视芯片而定。

  (3)连接到总线上的芯片数量除受7bit地址限制外,还受总线电容的限制。

  (4)串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。

  二、工作原理

  SDA和SCL都是双向I/O线,接口电路为开漏输出,使用时必须通过上拉电阻接到电源VCC.当总线空闲时,两根线都是高电平,连接总线的所有器件输出级都是开漏电路,从而在总线上消耗的电流很小。因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度。当电容过大时,有可能造成传输错误。由于其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。

  总线上的器件由一个主器件和其他从器件组成。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主器件要发送数据给从器件,则主器件首先寻址从器件,然后主动发送数据至从器件,由主器件终止数据传送;如果主器件要接收从器件的数据,首先由主器件寻址从器件.然后主器件接收从器件发送的数据,由主器件终止接收过程。在这种情况下,主器件负责产生定时时钟和终止数据传送。

  三、传输协议

  位传输

  数据位传输:SCL为高电平时,SDA线若保持稳定,那么SDA上是在传输数据;若SDA发生跳变,则用来表示一个会话的开始或结束。数据改变:SCL为低电平时,SDA线才能改变传输的数据位,具体如下图所示。

  

  开始和结束信号

  开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。其具体如下图所示。

  

  应答信号

  主设备每发送完8bit数据后等待从设备的ACK,即在第9个clk,读取到SDA低电平为有效;主设备把clk拉低,并将sda换成输入模式(上拉电阻,默认高电平)读取第9位,clk再次拉高,读取从设备发来的ACK。这里又分两种情况:

  1.写操作:主设备把clk拉高,等待读取ACK,从设备发现clk拉高后,就把sda拉低,告诉主设备,成功接收到8位数据。

  2.读操作:主设备发送芯片地址和寄存器地址,这两个字节的ACK都是由从设备来拉低,同写操作;从设备开始向从设备发送数据,clk为低时,sda变化,主设备clk拉高时读取sda,ACK由主设备拉低;当从设备发送完一个字节后,主设备强制把ACK拉高,通知从设备不要需要再发了,从设备发现这个ACK没有被拉低,认为主设备接收错误,也就结束发送了,当然从设备自己也知道这是一个字节。

  

  标准写流程

  a)主器件产生开始信号

  b)主器件发送从器件地址(7bit)和读写操作位0(1bit),改SDA为输入,等待ACK

  c)从器件发送ACK

  d)主器件发送从器件寄存器地址(8bit),改SDA为输入,等待ACK

  e)从器件发送ACK

  f)主器件发送数据字节(8bit),即要写入寄存器中的数据,改SDA为输入,等待ACK

  g)从器件发送ACK

  h)上述第f步至第g步可以重复多次,即可以按顺序写多个寄存器

  i)主器件产生停止信号,结束数据传输。

  ?标准读流程

  a)主器件产生开始信号

  b)主器件发送从器件地址(7bit)和读写操作位0(1bit),改SDA为输入,等待ACK

  c)从器件发送ACK

  d)主器件发送从器件寄存器地址(8bit),改SDA为输入,等待ACK

  e)从器件发送ACK

  f)主器件产生开始信号

  g)主器件发送从器件地址(7bit)和读写操作位1(1bit),改SDA为输入,等待ACK

  h)从器件发送ACK

  i)从器件发生数据字节(8bit),即寄存器中的值

  j)主器件发送ACK

  k)上述第i步至第j步可以重复多次,即可以按顺序读多个寄存器

  l)主器件产生停止信号,结束数据传输。

  • 分享到:

 

猜你喜欢

  • 主 题:汽车车身电子应用面临的挑战及解决方案
  • 公 司:NXP

  • 主 题:Infineon、MuRata和Arrow一站式物联网解决方案
  • 公 司:arrow&muRata&cypress&infineon

  • 主 题:针对储能系统的电池管理产品及系统设计
  • 公 司:ADI