I2C 通讯

I2C 接口在设备之间是2根线:SDA(数据线)和SCL(时钟线),他们都是开漏,通过一个上拉电阻接到正电源,因此子啊不适用的时候仍保持高电平。当空闲时,SDA和SCL都是高电平,只有SDA变为低电平,接着SCL也变为低电平时才开始I2C 总线的数据传输。   

    I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。 

  开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。 
  结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。 
  应答信号:每个字节的第8位一旦发送结束,发送方就释放数据线SDA,然后逐级在SCL上产生一个额外的脉冲信号。这会触发接收方通过将SDA置为低电平来表示对收到的字节进行确认。发送方接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为接收方出现故障。
       
     I2C总线操作:  
     2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。 总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。    
       控制字节 
  在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。 
  写操作 
  写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。 
  读操作 
  读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。
 
     对于被传输的每一位,当SCL为低电平时在SDA上必须变为有效,该位是在SCL的上升沿对SDL上的数据进行采样,也必须一直保持有效到SCL再次变为低电平,然后SDA就在SCL再次变为高电平之前传输下一位。
 

SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。  任何时候时钟信号都是由主控器件产生。

 

注意:1 、开漏或开路集级引脚具有输出驱动,能够把信号线置为接地,但不能把信号提升为高电平。

        2、SPI和I2C都是高位先传输。

posted @ 2012-08-20 16:34  举子 刘  阅读(565)  评论(0编辑  收藏  举报