你好,我正在读取Si705的温度。当我使用本文(pdf)中描述的测量过程阅读固件版本时,我已经连接到传感器,因为我已经测试了它。https://www.silabs.com/documents/public/data-sheets/Si7050-1-3-4-5-A20.pdf16)页面。然而,当我试图读取温度时,我的输出结果是0,0。现在我的代码是这样的:
uint8_t cmd;
uint8_t数据[2];
uint16_t度;
cmd = Temp_H;
user_i2c_set_slave_address (Si705_I2C_ADDRESS);
user_i2c_multi_byte_read (cmd,数据,2);
度= convert_to_uint16(数据);
度= convert_to_celsius(度);
返回度;
我使用的代码读取字节如下:
无效user_i2c_multi_byte_read(uint32_t reg_address, uint8_t *rd_data, uint32_t num_bytes) {
user_i2c_send_address (reg_address);
Uint32_t index = 0;
For (uint32_t I = 0;我< num_bytes;) {
SEND_I2C_COMMAND (0 x0100 & 0 x3ff);//设置R/W位为1(读访问)MSB
如果(!(++i % 24)){//FIFO是32位
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//等待直到没有主活动
For (uint8_t j = 0;j < 24;j + +) {
//在ram中存储FIFO内容
rd_data[index++] = (0xFF & GetWord16(I2C_DATA_CMD_REG));//接收字节
}
24 / (i2c_cfg_env reg_address + =。//计算下一个要读出的寄存器
user_i2c_send_address (reg_address);/ /重新启动读
}
}
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待I2C Tx FIFO空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();
而(指数< num_bytes) {
rd_data[index++] = (0xFF & GetWord16(I2C_DATA_CMD_REG));//接收字节
}
WAIT_UNTIL_I2C_FIFO_IS_EMPTY ();//等待Tx FIFO为空
WAIT_UNTIL_NO_MASTER_ACTIVITY ();//直到没有主活动}
嗨kaptajnen,
非常感谢您创建您的第一个论坛帖子和张贴您的问题。如果你要开始一个新的设计,我们建议从DA14585开始——SDK有了很大的改进,我们有很多软件示例和更详细的文档,这将对开始非常有帮助。此外,我们的下一代设备DA14585上也有软件路线图支持,这是11月5日宣布的,请检查DA14585/6支持端口,并看看我们最新的SDK6:
//www.wsdof.com/雷电竞官网登录products/connectivity/bluetooth-low-energy/smartbond-da14585-and-da14586
在我们的支持网站上有两个DA14585的I2C软件示例:
SW示例:读取I2C加速度计并发送通知数据
SW示例:DA14585/586接口与mCube加速度计通过I2C
谢谢,PM_Dialog