我正在尝试与此处找到的 Devantech 数字指南针交互 -
http://www.acroname.com/robotics/parts/R117-COMPASS.html
我正在使用 i2c-usb 转换器将其插入我的笔记本电脑 -
http://www.robot-electronics.co.uk/htm/usb_i2c_tech.htm
首先,我对电气工程了解不多。我对基本的基础有一个很好的了解,但在那之后我迷路了。
我正在尝试遵循本教程-
https://xgoat.com/wp/2007/11/11/using-i2c-from-userspace-in-linux/
但是,当我尝试设置设备地址时,我一开始就卡住了。
if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 )
{
fprintf( stderr, "Failed to set slave address: %m\n" );
return 2;
}
返回“设置从地址失败:参数无效”
我最初认为地址应该是 0xC0,因为指南针手册中的一句话是“首先发送一个起始位,模块地址(0xC0)......”但这不起作用。
现在我有一个从 1 到 100 的循环,并尝试每个地址的地址,但它们都失败了。循环是 -
for(int i=0x0;i<0x100;i++) {
if( ioctl( fd, I2C_SLAVE, i ) < 0 )
fprintf( stderr, "Failed to set slave address for address %i: %m\n", i );
}
我不确定还能尝试什么。现在,我只想设置地址,这样我就可以开始尝试读写了。由于转换器是实际连接到电脑的东西,我应该使用该地址吗?如果是这样,我在哪里可以在该链接上找到它的信息?如果有人知道我可以尝试什么或有什么问题,那就太好了。
编辑:
好的,我现在有这样的代码 -
#define ADDRESS 0x55
int fd = open("/dev/i2c-0", O_RDWR);
if (fd < 0) {
printf("\n<0, %m", errno);
return -1;
}
if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 ) {
fprintf( stderr, "Failed to set slave address: %m\n" );
return 2;
}
if( i2c_smbus_write_byte( fd, 0xAA ) < 0 )
fprintf( stderr, "Failed to write 0xAA to I2C device: %m\n" );
它会设置地址,但不会写任何东西。每当我尝试给它写信时,我都会得到 -
Failed to write 0xAA to I2C device: No such device or address