DA14580与SHT25之间的I2C通信

时间:2016-09-27 07:25:02

标签: bluetooth communication i2c

我尝试通过i2c从SHT25(Sensirion)读出相对湿度/温度数据。我想评估智能手机上的数据。我有用于蓝牙低功耗的DA14580(Dialog Semiconductor)和用于传感器的通信接口。

当我通过BLE向DA14580发送特定命令时,我希望它将测量命令发送到SHT25。测量后我想从传感器读取数据(12/14位分辨率,2个字节作为值读出)。以下方案显示了使SHT25工作所需的通信顺序。首先发送测量命令。之后是一个读请求并接收1个字节,ACK,另一个字节,ACK。

I2C Com-Sequence SHT25

我的问题是,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进行通信,并且工作正常。这不是传感器故障。

谢谢!

0 个答案:

没有答案