进行温湿度测量,需先发送一个开始信号,然后发送一个 I2C的写操作头,然后再跟随一个 16 位的温湿度转换命令。传感器收到上位机发送的每个字节数据后,会通过将 SDA 总线拉到低电平给出 ACK 信号。完整的温湿度测量和数据读取过程见下表。
单次转换模式的测量命令 第一个 SCL 空闲时间段表示至少等待 1ms (白色框代表上位机发送的数据,灰色框代表传感器芯片发送的数据)
在正确的收到温湿度转换命令并发送 ACK 信号给微处理器之后,GXHT30 内部开始启动温度和湿度的转换测量。
读取单次转换模式中温湿度数据
在传感器完成温湿度测量之后,上位机可以通过发送 START 信号+I2C 读取数据头来 读取温湿度数据,如果温湿度数据已经准备好,那么芯片会向上位机发送 ACK 信号,并随后发送 2 字节的温度数据加 1 字节的 CRC 校验数据,然后再发送 2 字节的湿度数据加 1 字节的 CRC 校验数据。上位机需要对接收到的每个字节数据发送 ACK,否则芯片会停止发送数据。微处理器在收到湿度数据的 CRC 字节后应该发送一个 NACK 和一个 STOP 信号来结束本次数据传输。
I2C 主机能够随时发送 NACK 来终止数据传输,比如 I2C 不关心温度数据的 CRC 结果或者不关心后面的湿度数据,都可以在收到想要的数据后终止数据传输,节约时间。
Clock Stretching 关闭
如果 clock stretching 功能关闭,那么发送温湿度转换命令后,如果温湿度转换还没有完成就开始读温湿度数据,这时候芯片会给出 NACK。只有等待时间足够长,保证温湿度转换已经完成再读数据才会得到芯片的响应。
Clock Stretching 开启
当 clock stretching 开启时,不论温湿度测量是否完成,只要上位机发送读数据头,芯片都会给出 ACK,然后将 SCL 拉低。一旦测量完成会立刻释放 SCL 总线,然后芯片开始发送测量到的温湿度数据。
周期测量温湿度的命令
在收到周期转换温湿度命令后,芯片会周期性转换温湿度。可以选择不同的周期转换模式。这些命令的主要差别在于重复率(高、中、低)和周期转换频率(如每秒 0.5次,1 次,2 次,4 次和 10 次)。在周期转换模式下 clock stretching 不能开启。周期转换频率和重复率的不同会影响测量的时间和功耗。
周期转换命令(白色框由上位机控制,灰色框由传感器芯片控制)注意最高转换频率可能会引起芯片的自发热问题。
读取周期测量的温湿度数据
读取周期测量得到的温湿度数据需要发送专用的数据读取命令,如下表所示。如果当前没有测量数据,那么芯片会对上位机发送的读数据头给出 NACK (见第 9bit 位) ,然后上位机需要停止通信。 如果上位机读出了温湿度数据,那么存储温湿度数据的缓存器会被清零,直到下一次测量得到的温湿度数据被装载进来。
读取周期转换的温湿度数据命令(白色框由上位机控制,灰色框由传感器芯片控制)。
中断周期测量模式
通过发送表中的命令中断芯片的周期测量模式。除了读取周期测量温湿度数据的命令外,发送其它任何命令之前建议先发送中断周期测量模式的命令。芯片收到这个命令之后会在当前测量完成之后退出周期测量模式,进入正常的单次测量模式。这个模式切换的时间需要 1ms。
中断周期测量模式 (白色框由上位机控制,灰色框由传感器芯片控制)。