一、概念
(一)概念
- 同步,串行,半双工总线
- 两线制:两根双向信号线,数据线SDA,时钟线SCL
- 多主机多从机,实际应用多使用单总机多从机
- 每个接到IIC总线上的器件都有唯一的地址
- IIC总线的数据线和时钟线均需要上拉电阻
(二)硬件连接
- 两根信号线:一根时钟线,一根数据线
- IIC总线上需要外接两个上拉电阻
- 每个接到IIC总线上的设备都有唯一的地址
(三)时序图
时序图:随着时钟信号的改变,数据线上数据的变化,形成的高低电平的变化
1. 开始信号和停止信号
在SCL线为高电平期间,SDA线产生一个下降沿,即起始信号;
在SCL线为高电平期间,SDA线产生一个上升沿,即终止信号。
2. 数据信号
在SCL线为低电平期间,此时SDA线允许数据变化,发送方写数据;
在SCL线为高电平期间,此时SDA线要求数据稳定,接收方读数据。
- 注:一个时钟周期完成一个bit位的数据收发
3. 应答信号
数据传送时,先传送最高位
每收发完成一个字节(8bit),都必须跟随一个应答位
在接收完一个字节后,接收方给发送方返回一个应答信号。(低电平表示应答信号,高电平表示非应答信号)
4. 设备地址
主机在起始信号之后必须传送一个从机地址(7位),第8位是数据的传送方向位(R/W),用‘0’表示主机发送数据,用‘1’表示主机接收数据
总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己被主机寻址,根据R/W位将自己定为发送器或接收器
(四)通信协议
1. 主机发送一个字节的数据给从机
首先主机发送一个起始位;
起始位后必须跟从机地址+数据传送方向位;
从机收到地址后回复一个应答;
主机收到应答后再发送8位寄存器地址;
从机收到地址后再次回复应答;
主机收到应答后再发送8位数据;
从机收到数据后回复应答;
主机发送停止位,通信停止。
2. 主机发送连续多字节的数据给从机
主机发送一个起始位,
起始位后必须跟从机地址+数据传送方向位;
从机收到地址后,发送一个应答位;
主机发送寄存器首地址;
从机收到后,发送一个应答;
主机发送8位数据位;
从机收到后发送应答;
主机发送8位数据位;
从机收到后发送应答;
主机发送停止位。
3. 主机从从机接收一个字节的数据
主机发送一个开始信号;
主机发送7位从机地址+1位写;
从机收到后回复ACK;
主机发送8位寄存器地址;
从机收到后回复ACK;
主机发送开始信号;
主机发送7位从机地址+1位读;
从机收到后回复ACK;
从机发送8位数据位;
主机回复NACK;
主机发送停止位。
4. 主机从从机接收连续多个字节的数据
- 注:主机从从机读取数据时,读取完最后一个字节数据时,主机需要给从机返回一个非应答信号。
- 因为从机只能被动的进行数据的收发,当从机给主机发送数据时,如果主机给从机发送应答信号时,从机会继续给主机发送下一个字节的数据;如果主机给从机发送一个非应答信号时,从机不会发送下一个字节了。
二、分析电路图
- 注:IIC一般使用开漏输出模式,但单个主机的情况下可以使用推挽输出。
- 一根IIC总线上可以接多个主机,多个主机需要总线裁决
三、芯片手册
(一)STM32MP157A芯片手册
本次IIC实验采用模拟的IIC总线的时序和通信协议
1. RCC
使能GPIOF的时钟源
2. GPIO
(二)SI7006温湿度传感器
1. 从机地址
2. SI7006的命令码
(1)测量温湿度通信协议
(2)读写用户寄存器
3. 用户寄存器
4. 模拟量转换为数字信号的时间
5. 将数字量温湿度转换为模拟量的温湿度公式
四、代码
(一)IIC驱动代码
(二)SI7006驱动代码
五、总结
1. IIC理解
同步串行半双工总线
有两根线,一根数据线,一根时钟线
支持多主机多从机设计,一般常用单主机多从机设计
需要外接两个上拉电阻,GPIO引脚设置为开漏输出模式
通信速率在100kbps~400kbps,4Mbps
2. IIC总线的时序
起始信号:在SCL高电平期间,SDA产生一个下降沿
停止信号:在SCL高电平期间,SDA产生一个上升沿
数据信号:
在SCL低电平期间,发送器向数据线写入数据,数据线上数据可以改变
在SCL高电平期间,接收器从数据线上读取数据,数据线上数据必须保持稳定
应答信号:
发送器每发送完一个字节的数据之后,接收器都需要给发送器回复一个应答信号。在第九个时钟周期的低电平期间,接收器写应答信号;在第九个时钟周期的高电平期间,发送器读应答信号。