I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线
两根通信线:SCL(Serial Clock),SDA(Serial Data)
同步(有一根时钟线),半双工(只有一根数据线)
带数据应答
支持总线挂载多设备(一主多从,多主多从)
硬件电路
所有的I2C设备的SCL连在一起,SDA连在一起
设备的SCL和SDA均要配置成开漏输出

为什么要配置为开漏输出?推挽输出可以吗?
不可以,若配置为推挽输出,无法支持I2C的多主多从模式。两个从设备一个拉高,一个拉低,就会造成短路。而开漏输出,有上拉电阻限流,这样都不会造成短路。

所以I2C的设计是,禁止所有设备输出强上拉的高电平,采用外置弱上拉电阻加开漏输出的电路结构。
I2C基本时序单元
起始条件:SCL高电平期间,SDA从高电平切换到低电平
终止条件:SCL高电平期间,SDA从低电平切换到高电平


发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

接受一个字节:SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接受一个字节(主机在接受之前,需要释放SDA)

发送应答:主机在接受完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答。
接收应答:主机在发送完一个字节之后,在下一个时钟接受一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

注:虚线表示从机占用数据线。
I2C时序
指定地址写
对于指定设备(Slave Address),在指定地址(Reg Address)下,写入指定数据(Data)

当前地址读
对于指定设备(Slave Address),在当前地址指针指示的地址下,读取从机数据(Data)

指定地址读
对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)

本文只是自己在所学I2C通信协议时的体会与笔记,所学浅薄,如有不对,还望指正。
本文介绍了I2C通信协议,它由Philips公司开发,有两根通信线,同步半双工且带数据应答,支持多设备挂载。阐述了硬件电路需将SCL和SDA配置为开漏输出的原因,还介绍了基本时序单元和三种I2C时序,包括指定地址写、当前地址读和指定地址读。
2274

被折叠的 条评论
为什么被折叠?



