Usb 设置Devantech数字罗盘的i2c从机地址

Usb 设置Devantech数字罗盘的i2c从机地址,usb,i2c,slave,digital-compass,Usb,I2c,Slave,Digital Compass,我正在尝试与这里找到的Devantech数字指南针接口- 我正在使用i2c usb转换器将其插入我的笔记本电脑- 首先,我对电气工程知之甚少。我对最基本的东西有一个很好的想法,但之后我就迷路了 我正在努力学习本教程- 然而,当我试图设置设备地址时,我在一开始就被卡住了 if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 ) { fprintf( stderr, "Failed to set slave address: %m

我正在尝试与这里找到的Devantech数字指南针接口-

我正在使用i2c usb转换器将其插入我的笔记本电脑-

首先,我对电气工程知之甚少。我对最基本的东西有一个很好的想法,但之后我就迷路了

我正在努力学习本教程-

然而,当我试图设置设备地址时,我在一开始就被卡住了

if( ioctl( fd, I2C_SLAVE, ADDRESS ) < 0 )
    {
            fprintf( stderr, "Failed to set slave address: %m\n" );
            return 2;
    }

为什么您要尝试向设备发送
0xAA
? 据我所知,这不是它的寄存器(对于
CMPS03
,唯一的命令是register
15
,它的用法并不常见:更改
I2C
地址,工厂重置,…)。 而且
0x55
似乎显然不是设备的地址
0xC0
应为写入代码

可能是
/dev/i2c-0
未正确创建/不正确? 您是如何创建
/dev/ic2-0

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