我似乎很难完成一个简单的 I2C 任务。我想将测量请求发送到霍尼韦尔传感器,以便它读取温度和湿度读数,这需要其数据表中的以下格式:

我一直在为我的测试代码使用以下内容:

当我读取数据时,我已经准备好接收 4 个字节的数组。我将它作为虚拟参数传递给传输函数,但将长度设置为 0,因为我们不需要为测量请求发送任何数据。
这是 I2C 线路上产生的内容。不幸的是,我工作的地方目前只有一个探头,所以我不得不分别读取 SCL 和 SDA 读数:

我将范围跟踪组合成一个图表。一切看起来都很好,直到 ACK 位之后出现一个额外的位并且在该位的开头只有一个尖峰:

就调试代码时收到的内容而言,我得到以下信息:

这实际上看起来是正确的格式,因为前两位是状态位,后两位将被忽略(“无关”位)所以它看起来像是一个有效的数据包,其中包含温度和湿度的最大传感器值(100% 和 125ºC)。
如果我第二次读取数据,我会看到状态位从 00 变为 01,这表明数据过时:

所以看起来 IC 的状态机正在工作并且它知道它正在被读取,但是测量请求数据包无效并且不会触发传感器进行读取?
在
电子方面,这里是原理图,I2C 线有 2.2k 上拉,与 Sparkfun 分线板相同:

与我们的
电路唯一不同的是,我们在 I2C 总线上还有一个地址为 0x50 的 EEPROM,因此它不会产生干扰。
我已经在 100 和 400 kHz 下尝试了 I2C,并且尝试了上升时间、下降时间和数字滤波器设置的各种设置:
有没有人能帮忙,因为我对此完全不知所措。我已经联系了霍尼韦尔的技术支持,但没有得到他们的回应,所以这真的是我唯一的希望。