I2C总线具有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL? 。
IIC总线上可以挂很多设备:多个主设备,多个从设备(外围 设备)。
多主机会产生总线裁决问题。当多个主机同时想占用总线时,企图启动总线传输数据,就叫做总线竞争。I2C通过总线仲裁,以决定哪台主机控制总线
IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL,其时钟信号是由主控器件产生。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。对于并联在一条总线上的每个IC都有唯一的地址。
一般情况下,数据线SDA和时钟线SCL都是处于上拉电阻状态。因为:在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。
1)、假设微控制器A 要发送信息到微控制器B:
? 微控制器A(主机)寻址微控制器B(从机)
? 微控制器A(主机—发送器)发送数据到微控制器B(从机—接收器)
? 微控制器A 终止传输
2)、如果微控制器A 想从微控制器B 接收信息:
? 微控制器A(主机)寻址微控制器B(从机)
? 微控制器A 主机接收器从微控制器B 从机发送器接收数据
? 微控制器A 终止传输
甚至在这种情况下,主机(微控制器A)也产生定时而且终止传输。
1>主机发送起始信号启用总线
?? ?2.>发送一个字节数据指明从机地址和数据方向
?? ?3>被寻址的从机发送应答信号回应主机
?? ?4>发送器发送一个字节数据
?? ?5>接收机器发送应答信号,回应发送器
?? ?(发送多个字节数据..... 4 . 5 ?循环)
?? ?6>通信完成主机发送停止信号释放总线
?? ?起始信号:SCL 为高电平时,SDA由高变低
?? ?停止信号:SCL 为高电平时,SDA由低变高
?? ?ACK:在第九个时钟周期,SCL处于高电平期间,接收机将SDA拉低
?? ?NACK:在第九个时钟周期,SCL处于高电平期间,接收机未将SDA拉低(拉高)
发送器每发送一个字节(8个bit),就在时钟脉冲9期间释放数据线,由接收器反馈一个应答信号。?
?? ?在SCL为低电平期间,把数据送到SDA数据线上
?? ?
?? ?在SCL为高电平期间,SDA数据线保持稳定(保持不变)
?? ?1>主机发送起始信号
?? ?2>主机发送从机设备地址+写的标记(0)
?? ?3>主机等待应答信号
?? ?4>主机发送一个字节数据
?? ?5>主机等待应答信号
?? ? ?....4 ? 5 循环
?? ?6>主机发送到最后一个字节数据
?? ?7>主机可以等待应答或者不应答信号
?? ?8>主机发送停止信号
? ? 1>主机发送起始信号
?? ?2>主机发送从机设备地址+读的标记(1)
?? ?3>主机等待应答信号
?? ?4>主机接收一个字节数据
?? ?5>主机产生应答信号
?? ? ?....4 ? 5 循环
?? ?6>主机接收到最后一个字节数据
?? ?7>主机不产生应答信号
?? ?8>主机发送停止信号