I2C总线
I2C总线概述
I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
I2C总线特点
I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。
I2C总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
I2C总线工作原理
I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。
每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。主机通过SDA线发送设备地址(SLAVE_ADDRESS)查找从机,SLAVE_ADDRESS可以是7位或10位,紧跟着SLAVE_ADDRESS的一个数据位用来表示数据传输方向,即第8位或11位。为0时表示写数据,为1时表示读数据。
数据有效性
I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
数据传输格式
每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。
寻址字节的位定义
1~7位组成从机的地址。
0位是数据传送方向位,为0时表示主机向从机写数据,为1时表示主机由从机读数据。
I2C总线时序
起始和终止信号
SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号
SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号
应答信号
接收数据的IC(外设或者MCU)在接收到8bit(一个字节)数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据
另外的一种解释
数据接收方收到传输的一个字节数据后,需要给出响应,此时处在第9个时钟,发送端释放SDA线控制权,将SDA电平拉高,由接收方控制。若希望继续,则给出“应答(ACK)”信号,即SDA为低电平;反之给出“非应答(NACK)”信号,即SDA为高电平。
主机向从机发送数据
注:
- 阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。
- “0”表示主机发送数据(T) ,“1"表示主机接收数据(R)
- A表示应答,A非表示非应答(高电平)。S表示起始信号,P表示终止信号。
主机在第一个字节后,立即从从机读数据
注:
- 阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。
- “0”表示主机发送数据(T) ,“1"表示主机接收数据(R)
- A表示应答,A非表示非应答(高电平)。S表示起始信号,P表示终止信号。
传输中需要改变方向
在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。
注:
- 阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。
- “0”表示主机发送数据(T) ,“1"表示主机接收数据(R)
- A表示应答,A非表示非应答(高电平)。S表示起始信号,P表示终止信号。