16.1.3 I2C总线数据操作
在I2C总线上,数据是伴随着时钟脉冲,一位一位地传送的,数据位由低到高传送,每位数据占一个时钟脉冲。I2C总线上的在时钟线SCL高电平期间,数据线SDA的状态就表示要传送的数据,高电平为数据1,低电平为数据0。在数据传送时,SDA上数据的改变在时钟线为低电平时完成,而SCL为高电平时,SDA必须保持稳定,否则SDA上的变化会被当作起始或终止信号而致使数据传输停止。
1.写数据格式
I2C总线协议规定,数据传输的开始以主器件发出起始信号为准,然后发送寻址字节。寻址字节共8位,高7位是被寻址的从器件地址,最低一位是方向位,方向位表示主器件与从器件之间的数据传送方向,方向位为“0”时表示主器件向从器件发送数据(写)。在寻址字节后是将要传送的数据字节与应答位,数据可以多字节连续发送。在数据传送完毕后,主器件必须发送终止信号已释放总线控制权。如果主器件希望继续占用总线,则可以不产生终止信号,马上再次发送起始信号,并对另一从器件进行寻址,便可进行新的数据传送。
主器件向从器件发送多个数据时,数据传送方向在整个传送过程中不变。此时,数据传送格式如下,其中的A和A为应答信号或非应答信号,是由从器件发送的,其余的均由主器件发送。
2.读数据格式
I2C总线进行读数据时,数据传输的开始以主器件发出起始信号为准,然后发送寻址字节。寻址字节共8位,高7位是被寻址的从器件地址,最低一位是方向位,方向位表示主器件与从器件之间的数据传送方向,方向位为“1”时表示主器件从从器件中接收数据(读)。在寻址字节后是将要传送的数据字节与应答位,数据可以多字节连续发送。在数据传送完毕后,主器件必须发送终止信号已释放总线控制权。如果主器件希望继续占用总线,则可以不产生终止信号,马上再次发送起始信号,并对另一从器件进行寻址,便可进行新的数据传送。
主器件由从器件处读取多个数据时,在整个传输过程中除寻址字节外,都是从器件发送、主器件接收。此时,数据传送格式如下,其中的最后一个非应答信号由主器件发送,其余应答信号和数据是从器件发送的。
从I2C总线读数据格式和写数据格式可以看出:
❑无论进行何种数据传输,寻址字节都是由主器件发出,数据字节的传送方向由寻址字节中方向位的定义而确定。
❑寻址字节只表明从器件地址及数据传送方向,从器件内部的n个数据地址,是由编程者在传送的第一个数据中指定的,即第一个数据为器件内存储单元的子地址,随后地址会自动加减,这样可以减少单元地址寻址操作。
❑每个字节传送完毕,后面都必须有一个应答信号(A或A-)。