三、传输协议

位传输

数据位传输: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