嗯,我正在尝试使用 ESP32S3 ULP Riscv 协处理器从 HDC1080 传感器 使用 I2C 读取深度睡眠时的温度值。首先,我在 Arduino 上编写代码进行测试。效果很好
double temp() {
Wire.beginTransmission((uint8_t)0x40);
Wire.write((uint8_t)0x00);
Wire.endTransmission();
delay(20);
Wire.requestFrom((uint8_t)0x40, (uint8_t)2);
byte msb = Wire.read();
byte lsb = Wire.read();
uint16_t t = msb << 8 | lsb;
return (t / pow(2, 16)) * 165.0 - 40.0;
}
现在我想将此库的代码转换为 ulp riscv i2c 库,以使用 ESP idf 在 ULP 模式下读取值。有一个 bmp180 传感器的示例代码如何在 ULP 模式下读取 I2C。如果我将 bmp180 与此示例代码一起使用,则一切正常。但我无法从 HDC1080 读取临时值。如何将上面的 arduino 代码转换为 ulp riscv i2c 库格式。
虽然我不完全确定,但是docs说ULP RISC-V I2C库总是需要一个从属子寄存器地址,但我似乎找不到这样一个子寄存器来从HDC1080。这可能是我无法执行读取的原因吗?我该怎么办,你能帮我吗?
我查看hdc1080的文档时,有一个寄存器表用于读取temp 0x00,但是如何到达[15:02]子寄存器
我假设您使用 ESP32-S3,ESP-IDF 文档中确实记录了此限制。
这是 ESP32-S3 内部 RISC-V ULP 协处理器的一个已知硬件问题。 驱动程序受硬件外设设计的限制,RTC I2C 外设始终期望对子寄存器地址进行编程。
到目前为止,在不写入 reg_addr 的情况下无法使用 RTC I2C 外设写入/读取数据,因此不期望它的传感器可能无法工作。