- I2C,两线式串行总线。分别为数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速总线可达400kbps以上。I2C是半双工通信方式。
- I2C的空闲状态。当I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。
- I2C的起始信号。当SCL为高期间,SDA由高到低的跳变。
启动信号是一种电平跳变时序信号,而不是一个电平信号
-
I2C的停止信号。在SCL为高期间,SDA由低到高的跳变;
l停止信号也是一种电平跳变时序信号,而不是一个电平信号。
- 应答信号ACK。发送器每发送一个字节,就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位。
接收器在第九个时钟脉冲(高电平)之前将SDA线拉低,SCL高电平到来时,产生一个应答位,并且需要确保SCL线在该时钟的高电平期间为稳定的低电平。最后将SDA拉高,为接受下一个字节准备。
- 无效应答NoACK。和上面一样,当SCL高电平到来时,SDA若为高,则为无效应答位。
- 等待应答waitACK。即第九个时钟脉冲(高电平)到来时,如果SDA线为低电平,则表示有效ACK,否则无效ACK。
- 发送数据。I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。即:数据在SCL的上升沿到来之前就需准备好。并在在下降沿到来之前必须稳定。
当SDA为高电平,传输高电平(1),反之传输0。
- 读数据:从从机设备寄存器中读取数据。
- 向设备寄存器中写入值(写1个字节)的时序。
主机:起始信号 + 7位地址位1个写位 + 读取ACK + 发送寄存器 + 读取ACK + 发送寄存器的值 + 读取ACK + 停止信号
- 从设备寄存器中读值(读一个字节)的时序。
主机:起始信号 + 7位地址位1个写位 + 读取ACK + 发送寄存器 + 读取ACK + 起始信号 + 7位地址位1个读位 + 读ACK + 读寄存器数据 + 发送NoACK + 停止信号