I2C时序
我们来看I2C协议中的数据传输时序图:
数据传送时,1个字节8位数据,后面跟一个应答位。所以,一桢有9位。
SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
从这个时序图中可以看到,SCL很重要,并且哪个时钟沿是干嘛的,都是确定好的。比如,前面7个必定是地址,第8个是读写标志,数据传输必须是8位,必须接个ACK信号等等。
下图是测到波形:
分析图中部分波形可知:
1、由主机发起,在SCL为高电平时,SDA由高到低切变,形成开始信号;
2、接着是7位地址和一位读写标志,这里7位地址为1000100,正是我们代码中设置的地址ID;最后一位为0表示写操作;
3、接着在下一个时钟,主机以高电平状态释放SDA,这时从机响应,将SDA拉低了。
I2C时序
我们来看I2C协议中的数据传输时序图:
数据传送时,1个字节8位数据,后面跟一个应答位。所以,一桢有9位。
SCL是时钟,SDA承载的是数据。当SDA从1变动到0,而SCL还是1时,表示开始数据传输。接下来的7位,就是设备的地址。紧接着的是读写标志,其为1时是读取,为0则是写。如果I2C总线上存在着和请求的地址相对应的设备,则从设备会发送一个ACK信号通知主设备,可以发送数据了。接到ACK信号后,主设备则发送一个8位的数据。当传输完毕之后,SCL保持为1,SDA从0变换到1时,标明传输结束。
从这个时序图中可以看到,SCL很重要,并且哪个时钟沿是干嘛的,都是确定好的。比如,前面7个必定是地址,第8个是读写标志,数据传输必须是8位,必须接个ACK信号等等。
下图是测到波形:
分析图中部分波形可知:
1、由主机发起,在SCL为高电平时,SDA由高到低切变,形成开始信号;
2、接着是7位地址和一位读写标志,这里7位地址为1000100,正是我们代码中设置的地址ID;最后一位为0表示写操作;
3、接着在下一个时钟,主机以高电平状态释放SDA,这时从机响应,将SDA拉低了。
举报