IIC
协议
1.1 IIC
协议概述
IIC
全称
Inter-Integrated Circuit (
集成电路总线
)
是由PHILIPS
公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式,速度约为10kb/s,IIC是一个多主从的串行总线(任意时刻只能有一个主机等特性),又叫I2C,属于半双工同步传输类型的总线; 它仅使用两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA。 SDA和SCK在空闲的时候要处于高电平状态,所以需要通过电阻上拉
IIC总线标准模式下速度可以达到100Kb/s,快速模式下可以达到400Kb/s。IIC总线工作是按一定的协议来运行的。IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI,IIC是支持多从机的,也就是一个IIC控制器下可以挂多个IIC从设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的IIC设备了,一个IIC总线连接多个IIC设备如下图:
IIC总线标准模式下速度可以达到100Kb/s,快速模式下可以达到400Kb/s。IIC总线工作是按一定的协议来运行的。IIC是为了与低速设备通信而发明的,所以IIC的传输速率比不上SPI,IIC是支持多从机的,也就是一个IIC控制器下可以挂多个IIC从设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的IIC设备了,一个IIC总线连接多个IIC设备如下图:
上图中SDA和SCL这两根线必须要接一个上接电阻,一般是4.7K。其余的IIC从器件都挂接到SDA和SCL这两根线上,这样就可以通过SDA和SCL这两根线来访问多个IIC设备。
通常我们为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备。
简单性和有效性。 由于接口直接在组件之上,因此IIC 总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降 低了互联成本。总线的长度可高达25 英尺,并且能够 10Kbps 的最大传输速率支持 40 个组件 多主控(multimastering) 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
构成
IIC 串行总线一般有两根信号线,一根是双向的数据线 SDA ,另一根是时钟线 SCL ,其时钟信号是由主控 器件产生。所有接到IIC 总线设备上的串行数据 SDA 都接到总线的 SDA 上,各设备的时钟线 SCL 接到总线 的SCL 上。对于并联在一条总线上的每个 IC 都有唯一的地址。
IIC
总线在传输数据的过程中一共有三种类型信号,分别为:开始信号、结束信号和应答信号。
起始位,停止位,数据位,速度
这些信号中,起始信号是必需的,结束信号和应答信号
起始信号
分析虚线区间可得:要发送起始信号,首先SCL为高电平,SDA也为高电平,延时>4.7us,SDA被拉低,再延时>4.7us
void IIC_Start()
{
SCL = 0;//防止雪花屏
SDA = 1;
SCL = 1;
_nop_();
SDA = 0;
_nop_();
}
终止信号
分析虚线区域可得 :要发送终止信号,SCL为高电平,SDA为低电平,延时>4.7us后,SDA被拉高,延时>4.7us
void IIC_Stop()
{
SCL = 0;//防止雪花屏
SDA = 0;
SCL = 1;
_nop_();
SDA = 1;
_nop_();
}
应答信号
发送器每发送一个字节(8个 bit ),就在时钟脉冲 9 期间释放(SDA置1)数据线,由接收器反馈一个应答信号。 应答信号为低电平时,规定为有效应答位(ACK ,简称应答位),表示接收器已经成功地接收了该字节应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。
检查应答信号:首先再时钟脉冲9释放数据线即将SDA置1,SCL为低电平,延时几位秒拉高SCL,延时>4us,检测若SDA为低电平则为应答模式,SDA为高电平则为非应答模式
char IIC_ACK()
{
char flag;
SDA = 1;//就在时钟脉冲9期间释放数据线
SCL = 0;
_nop_();//约5us
SCL = 1;
_nop_();
flag = SDA;//检测到底是0应答模式还是1非应答模式
_nop_();
SCL = 0;
_nop_();
return flag;
}
IIC发送数据分析