我正在尝试与Bosch Sensortec BNO055传感器对话。我正在使用穿梭板。 VDD和VDDIO连接到3.3V,引脚17和18是SDA和SCL。这些连接到嵌入式linux板。另一个传感器在同一条总线上,我可以看到它在示波器上的值。 我有以下代码:
BNO055_RETURN_FUNCTION_TYPE Bno055I2cBusWrite(u8 dev_addr, u8 reg_addr, u8* reg_data, u8 wr_len){
//According to https://www.kernel.org/doc/Documentation/i2c/dev-interface
int file = 0;
char filename[20];
snprintf(filename, 19, "/dev/i2c-%d", ADAPTER_NR);
if(open(filename, O_RDWR) < 0){ /*error*/ }
if(ioctl(file, I2C_SLAVE, dev_addr) < 0){ /*error*/ }
char buf[1 + wr_len];
buf[0] = reg_addr;
memcpy(&buf[1], reg_data, wr_len);
int written_bytes = 0;
if(write(file, buf, wr_len) != wr_len){
printf("Error BusWrite-write: %s.\n", strerror(errno));
exit(-1);
}
}
前两个if语句通过正常。 写操作失败。在示波器上,我看到了正确的设备地址(然后没有确认)。 我做了什么:
我的传感器只是在设备地址出现在线路上时才会确认。
恢复:
答案 0 :(得分:1)
嗯......看起来这个范围的电线干扰得太多了。设备地址由驱动程序在写入或读取时发送,以回答我自己的问题。