I2C Bus(Inter-Integrated Circuit 集成电路总线)。
I2C在硬件上连接如图所示,主芯片引出2条线,SCL(Serial Communication Loop 串行通讯环路)和SDA(Synchronous Data Adapter 同步数据衔接器),它们一般都接有上拉电阻,用于确定默认电平。
IIC采用主从结构,所有数据传输都是由master发起的,salve进行接收,整个流程如下:
- 主设备发出开始信号。
- 主设备发出地址信号(7 bit,先传输最高位)和读写信号(1 bit,0-write,1-read)。
- 从设备响应ACK信号(1 bit),向主设备报告自身存在。
- 如果是写操作,主设备在每个时钟高电平时,将数据发送到SDA数据线上,最后从设备响应ACK信号。
- 如果是读操作,从设备在每个时钟高电平时,将数据发送到SDA数据线上,最后主设备响应ACK信号。
- 当传输结束时,主设备发送P信号结束I2C流程。
S开始信号:SCL高电平,SDA由高到底。
P结束信号:SCL高电平,SDA由底到高。
设备地址:7位,都写死在芯片内部,先传输最高位。
ACK信号:1位,SDA底电平。
在SCL高电平的时候,读取SDA上的数据。
由于SCL、SDA都接有上拉电阻,使用默认为高电平,
如何在SDA上实现双向传输?
- 1、主设备发送时,从设备不发送:可以通过时钟来控制
- 2、主设备发送时,从设备的发送引脚不应该影响数据
利用开极电路,
- 1、不想影响SDA,不驱动三极管
- 2、想输出高电平,不驱动
- 3、想输出低电平,驱动三极管。
当SCL为底电平时,意味着有设备正在忙,都不应该驱动SDA引脚,等它变为高电平时才驱动。
发生I2C中断时,SCL被拉低,阻止继续使用I2C,清只读后,才允许继续执行
S3C2440A 的 IIC 总线接口有 4 种工作模式: – 主机发送模式 – 主机接收模式 – 从机发送模式 – 从机接收模式