I2C总线 (InterIC BUS)
I2C总线是由Philips公司开发的一种通用数据总线两根通信线:SCL (Serial Clock) 、SDA (Serial Data)。
I2C总线特点:
同步,半双工 、带数据应答、支持总线挂载多设备(一主多从、多主多从)
1.1概念解释
全双工:设备1和设备2可以同时发送接收;
半双工:设备1和设备2能发送也能接收;但在同一时间中设备1和设备2只能接收或发送;
单工:设备1只能发送(设备2只能接收)或设备2只能发送(设备1只能接收);
异步时序优点:省一根时钟线,节省资源;缺点:对实践要求严格,对硬件电路的依赖比较严重;同步时序优点:对事件要求不严格,对硬件电路不怎么依赖;缺点:多用一根时钟线;
1.2硬件电路连接方式:
所有12C设备的SCL连在一起,SDA连在一起;
设备的SCL和SDA均要配置成开漏输出模式;
SCL和SDA各添加一个上拉电阻,阻值一般为4.7KQ左右
“线与”现象:只要有任意一个或多个设备输出低电平,总线就处于低电平;只有全部设备输出高电平。总线就处于高电平
I2C时序的基本单元
起始和终止都是由主机产生的(从机不允许产生起始和终止 )
1、 起始条件:SCL高电平期间,SDA从高电平切换到低电平;
2、 终止条件:SCL高电平期间,SDA从低电平切换到高电平;
3、发送一个字节:
SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次即可发送一个字节。
4、接收一个字节:
SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次即可接收一个字节(主机在接收之前,需要释放SDA)。
5、发送应答:
主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
6、接收应答:
主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
1.3 I2C完整时序:
1、指定地址写
对于指定设备(SlaveAddress),在指定地址 (Reg Address) 下,写入指定数据(Data)。
2、当前地址读
对于指定设备(Slave Address) ,在当前地址指针指示的地址下读取从机数据(Data)。
3、指定地址读
对于指定设备(Slave Address)在指定地址(Reg Address)下,读取从机数据(Data )。其实相当于在指定地址写的前半部分加上当前地址的组合