我尝试通过i2c从SHT25(Sensirion)读出相对湿度/温度数据。我想评估智能手机上的数据。我有用于蓝牙低功耗的DA14580(Dialog Semiconductor)和用于传感器的通信接口。
当我通过BLE向DA14580发送特定命令时,我希望它将测量命令发送到SHT25。测量后我想从传感器读取数据(12/14位分辨率,2个字节作为值读出)。以下方案显示了使SHT25工作所需的通信顺序。首先发送测量命令。之后是一个读请求并接收1个字节,ACK,另一个字节,ACK。
我的问题是,DA14580只提供通过I2C与EEPROM通信的代码,我无法读出数据。 (我甚至不确定我是否可以正确发送数据......)。
uint8_t i2c_eeprom_read_byte(uint32_t address)
{
i2c_wait_until_eeprom_ready();
i2c_send_address(address);
WAIT_WHILE_I2C_FIFO_IS_FULL(); // Wait if Tx FIFO is full
SEND_I2C_COMMAND(0x0100); // Set R/W bit to 1 (read access)
WAIT_UNTIL_I2C_FIFO_IS_EMPTY(); // Wait until I2C Tx FIFO empty
WAIT_FOR_RECEIVED_BYTE(); // Wait for received data
return (0xFF & GetWord16(I2C_DATA_CMD_REG)); // Get received byte
}
提供读取一个字节的代码。即使我只想要一个字节,它也会卡在WAIT_FOR_RECEIVED_BYTE()
中,这是一个makro来读出接收到的数据(#define SEND_I2C_COMMAND(X) SetWord16(I2C_DATA_CMD_REG, (X))
我已经在我的代码中使用命令触发了测量,因此它的价值应该是可用的。我没有逻辑分析仪来查看公交车上发生了什么,但我看不出有什么问题。
我有什么想法可以检查吗?或者我可以尝试其他什么?我尝试通过Arduino Uno与SHT25进行通信,并且工作正常。这不是传感器故障。
谢谢!