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为高电平、然后发出停止条件。
在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。
写操作
写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。
读操作
读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。
对于被传输的每一位,当SCL为低电平时在SDA上必须变为有效,该位是在SCL的上升沿对SDL上的数据进行采样,也必须一直保持有效到SCL再次变为低电平,然后SDA就在SCL再次变为高电平之前传输下一位。
SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。 任何时候时钟信号都是由主控器件产生。
注意:1 、开漏或开路集级引脚具有输出驱动,能够把信号线置为接地,但不能把信号提升为高电平。
2、SPI和I2C都是高位先传输。