第1章 IIC
1.1 IIC介绍
IIC:Inter-Integrated Circuit(集成电路总线),IIC通信协议是飞利浦公司于80年代初发明的一种运用于芯片与芯片之间进行信息交换的串行、同步、半双工通信协议。
应用场合:芯片与芯片之间。板间通信。共模通信。抗干扰能力很差。
1.2 IIC总线
1) IIC协议有两根总线:时钟总线SCK,数据总线SDA。
2) 这两根总线都需要接上拉电阻。
3) 所有IIC设备都接在该总线上:一个主机和多个从机。
4) IIC总线空闲为高电平。
5) 时钟总线SCK由主机控制。
1.3 IIC协议
IIC起始条件:表示IIC通信开始,在主机发出起始条件之后,所有的从机都会准备接收设备地址。主机发出的设备地址和从机自身的设备地址相同时,从机就会发送应答。如果不相同,从机静默。
IIC结束条件:表示IIC通信结束,在主机发出结束条件之后,所有的从机都会进入空闲状态。
IIC位传输:一次传输8个位的数据,高位在前,一个时钟发送一个位的数据。
IIC应答:每次收到数据的设备都会应答。
1.3.1 IIC基本信号
IIC起始信号:在SCK高电平期间,SDA的下降沿都是起始信号。
IIC结束信号:在SCK高电平期间,SDA的上升沿都是结束信号。
IIC应答信号:在第9个时钟的高电平期间,SDA为低电平表示应答;反之则为非应答。
IIC数据发送:一个时钟准备一个位的数据(拉高或者拉低SDA),在时钟的低电平期间准备数据。高位在前。
IIC数据接收:一个时钟接收一个位的数据,在时钟的高电平期间采样数据。高位在前。
注意:在数据发送期间,SCK为高电平的时候,SDA绝对不允许发生改变。所以IIC数据发送时,只能在SCK为低电平期间准备数据。
IIC的时钟:可以有以下两种:两种都可以使用
SCK_L(); //延时 SCK_H(); //延时 | SCK_H(); //延时 SCK_L(); //延时 |
1.4 IO口双向切换
1)IO口配置为推挽输出,能否正常使用按键检测。
2)漏极输出:开漏输出
3)开漏输出模式下,IO输出低电平,输入数据寄存器不能正常工作。。
4)开漏输出模式下,IO输出高电平(输出部分高阻态),输入数据寄存器能正常工作。
开漏输出模式下,IO口需要输出高低电平:直接控制ODR寄存器。
漏极输出需要切换为“输入模式(输出部分高阻态)”:IO输出高电平。
1.5 IIC通信速度
IIC属于一种低速通信协议,IIC的常见通信速度:100KHz,400KHz,3.4MHz。
假如我们需要100KHz的IIC,一个时钟周期10us.
SCK_L();
delay_us(5);
SCK_H();
delay_us(5);
假如我们需要400KHz的IIC,一个时钟周期2.5us.
SCK_L();
delay_us(1);
SCK_H();
delay_us(1);
IIC协议要求是比较宽松的。不太严格。比如某器件要求100KHz的IIC速度。
50KHz~100KHz都不会出错。
1.6 模拟IIC
1.6.1 起始信号
tSU:STA:起始信号建立时间,起始信号产生前,总线空闲的时间,最小4.7us。
tHD:STA:起始信号保持时间,产生起始信号之后,总线保持不变的时间,最小4us
1.6.2 结束信号
tSU:STO:停止信号建立时间,产生停止信号之前,SCK为高,SDA为低的保持时间,最小4us。
tBUF: 新的发送前,总线空闲时间,最小4.7us。
1.6.3 主机发送数据从机应答
主机准备数据的时间:在SCK为低电平期间。
主机读取应答的时间:在第9个时钟周期的高电平期间采样SDA。低电平表示应答,高电平表示非应答。
1.6.4 主机接收数据主机应答
主机采样数据的时间:在SCK为高电平期间。
主机准备应答的时间:在第9个时钟周期的低电平期间准备应答。低电平表示应答,高电平表示非应答。
1.7 作业
1) 复习IIC协议规范
2) 自己动手完成IIC的4个基本信号编程,替换法验证。
3) 预习AT24C02,了解的存储空间大小,特性,了解从设备地址。
4) 从设备地址 = 7位硬件地址+读写方向位