iic通信协议是市面上比较常用的协议,主要是由两根通信线,一根是SCL、一根是SDA,分别表示串行时钟线和串行数据线。可支持总线挂载多个设备,是一个同步半双工的
然后iic是不允许从机控制SCL线,所以在主机对从机有着绝对的控制权。在设备线路上SDA和SCL添加一个上拉电阻是为了防止总线的SDA没协调好主机和从机的时间,因此设备需要配置位开漏输出模式。
时序基本单元
为了能识别不同发送的信息和主机从机之间的通信,在两条线之间设置了时序来,来识别。
起始条件:在SCL高电平期间SDA从高电平转到低电平,这句话表示在SCL位高电平时SDA如果从高电平转位低电平就是表示启动后续的时序。
终止条件:在SCL高电平期间SDA从低电平转为高电平。同上面起始条件原理类似,就是将SDA从高电平转换为低电平引发终止条件。
发送字节:SCL低电平期间,主机将数据位依次放在SDA线上,然后释放SCL,从机在SCL高电平期间读取数据位,期间SDA不允许有数据变化,,一直循环8次一个字节发送完毕。
表示SCL为低电平期间主机发送数据在SDA,接着SCL拉高从机开始读主机发送的数据,所以在SCL为低电平期间主机发送的SDA 不允许数据发生变化,不然会导致后面的从机读取数据错误
接受字节:SCL低电平期间,从机将数据放在SDA 上,然后在释放SCL,主机在SCL高电平期间读取从机发送SDA数据,然后释放SDA
表示为SCL低电平期间,从机发送数据在SDA上,然后SCL拉高,主机开始在SCL高电平期间读取SDA 数据。
发送应答:主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答数据1表示非应答
接受应答:主机发发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答,数据在接收之前需要释放SDA
总结:从机或主机发送完字节,主机来应答SCL高电平,来判断SDA1或0来确认发送和接收