1. IIC通信协议
1.1 IIC通信协议简介
1.1.1 什么是IIC?
串行通信协议的一种,属于串行通信协议中的半双工同步通信。
IIC是一种被定义好的标准,采用二线制,一条数据线,一条时钟线;
数据线传输数据,一位一位传输;时钟线控制传输速率。
1.1.2 有什么用?
IIC用于收发数据。
与串口比线用的更少,两条线可以控制N多设备(自动寻址方式);传输数据的正确率更高。缺点是传输距离近。
1.1.3 如何使用?
从时序图可以得到IIC由:起始信号—>八位数据(MSB:高位在前)—>应答信号(ACK)—>停止信号,组成。
1.2 IIC时序详解
SCL是时钟线,SDA是数据线。
在IIC规定了时钟线和数据线在空闲时一定是高电平。
1.2.1 起始信号
在SCL高电平的时候,拉低SDA就是起始信号。
1.2.2 停止信号
停止信号:SCL为高电平期间,SDA由低电平向高电平跳变。
1.2.3 应答信号
CPU(主机)给外设(从机)传输数据,CPU拉高SCL和SDA代表等待应答,外设会拉低SDA代表给出应答,如果没有拉低代表未应答。
CPU接收外设的数据:CPU拉低SCL然后拉低SDA,拉高SCL保持一段时间即可,这时候外设检测到这个低电平就代表得到了应答。
什么时候应答??数据是8位的,第九位就是应答信号
1.2.4 数据传输
在时钟线为高电平的时候不允许改变数据线,所以在发送数据的时候要拉低时钟线。
主机发从机收(out):所以对于IIC协议的设备来说(从机),它在检测到时钟线变低了就代表对面(主机)在放数据了,时钟线拉高了代表对面放完了,自己可以读取数据了。
从机发主机收:主机拉低时钟线代表可以放入数据了,主机拉高时钟线代表不允许再操作数据线了。所以主机拉低时钟线一段时间,再拉高时钟线就可以从数据线上读取到从机想传输给主机的数据了。
1.3SHT30读取温湿度
1.3.1SHT30怎么读取温湿度?
SHT30使用的是IIC通信协议传输数据,具体怎么读取的?
从图上可以知道,首先起始信号写指令(0x88),然后发送转换指令(0x2C06 高重复性测量),接着再来起始信号读指令(0x89),接下来就是十六位的温度+CRC读取,再然后就是十六位湿度+CRC读取。
1.3.2 器件地址
上图可知器件地址有0x44和0x45,这个选择需要查看硬件连接方式,地址引脚ADDR接地使用的是0x44。
注意:地址应该是0x44才对,为什么使用的是0x88??因为在启动传输后,随后传输的 IIC 首字节包括 7 位的IIC 设备地址和一个 SDA方向位(读 R:‘1’,写 W:‘0’),所以地址需要向左移动一位为读/写位留出空间。
1.3.3 温湿度转换
相对湿度转换
不论基于哪种分辨率,相对湿度 RH 都可以根据SDA 输出的相对湿度信号 SRH通过如下公式计算获得(结果以 %RH 表示)。
温度转换
不论基于哪种分辨率,温度 T 都可以通过将温度输出信号 ST代入到下面的公式计算得到(结果以温度°C 表示)。
1.3.4 温湿度转换应用
1)SHT30初始化
2)湿温度读取