至于起源什么的百度或者其他都能介绍的很详细。
IIC总线是一种串行数据总线,IIC主要有两条线,时钟线SCL和数据线SDA。通常IIC空闲时线路电平为高,主要依靠外部上拉电阻来控制,也就是说启动IIC通讯模式之后数据线和时钟线默认是拉高的。
当时钟线保持高电平数据线从高变低是起始信号,意味着主设备准备好通讯了;需要注意的是起始信号过后两条线都会被拉低因为要为收发数据做准备。总线状态也从空闲状态变成准备通讯状态。
通讯两边分为主设备与从设备,无论是写数据还是读数据时钟信号都是有主设备产生,主设备决定数据线是谁来用。
写数据时:主设备先发送从设备的器件地址(这个地址一般情况下为7bit但是也有其他的类型具体时间芯片情况,最后一个bit决定读写,0位写,1为读),如果从设备确认无误此时会将返回一个ACK信号,ACK信号为低电平,此时主设备将继续发送要写的寄存器地址(8位),第九个时钟仍然是ACK位。确认无误之后在发送数据data,第九个仍然是ACK位。
一个数据写分为三个阶段,写器件地址,写寄存器地址,写数据data,最后又主设备决定是否要继续往后写数据,如果不用就会发出结束信号,时钟线为高电平时数据线由低变高,此时主线状态由工作状态变为空闲状态,两根线为高电平。
分析一下上面其中一个阶段,就说发送器件地址这个阶段,数据线的控制权是有主设备决定的除了第九个时钟周期将数据线交给从设备让从设备产生一个ACK位,其余时间都是在主设备控制的,从设备在时钟信号的上升沿latch数据线上的数据,时钟信号的下降沿主设备要准备好下一个bit的数据(是高还是低),这样能确保在上升沿来临之前准备好数据。
贴张图: