三、传输协议
位传输
数据位传输: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