一、I2C总线概述
I2C总线有两根线:SCL有一定的时钟周期控制信号、SDA数据线
I2C属于边沿触发类总线:即当SCL处于上升沿时,接收器接收信号
总线空闲状态为:SDA和SCL都处于高电平状态
I2C只要主设备才能操作SCL时钟控制线,从设备应答信号为拉低SDA数据线电平。
二、I2C传输过程理解
规定:SCL处于高电平期间,SDA是不可以变化的;因为,SCL为高电平状态下,如果SDA为电平变化下降沿、则代表一组数据的开始,SCL为高电平状态下,如果SDL电平变化为上升沿、则是一组数据的起始。故,SCL为高电平期间,SDA必须保持不变。
进而,在SCL由低电平变为高电平,也就是SCL上升沿时;则为接受端去接收SDA的1个bit位的过程。
数据发送过程如下:
1.开始传输:SCL为高电平,SDL从高电平变为低电平的瞬间。
2.一次传输8位:SCL保持低电平,SDA发送8位有限数据;SCL突变为高电平,即SCL上升沿,一次读取SDL八位数据。同时,发送端会释放SDA总线,即设置SDA总线为高电平。
SCL的时钟周期为:1、8、1,依此保证一次8位的正常数据接收。
释放总线,即SCL和SDA都释放;由上拉电阻默认设置为高电平。
3.应答:当接受端收到数据以后,在SCL的低电平时钟周期下降沿,发送SDA为低电平的应答。
4.释放SCL:数据传输完毕以后,设SCL为高电平;并释放SDA(也就是由上拉电阻设置为高电平)。
由于I2C也是一种共用总线;故,传输的发起和结束都有master控制。而,I2C设备间,都是平等的;即在一次数据传输过程中,主动发起者就是本次数据传输过程的master;反之,身份就又变成slave。