无法在I2C设备上使用write()或read()调用,但echo和I2C工具可以工作



我正在尝试从嵌入式linux(4.6(上的I2C设备进行读写。我可以使用i2cseti2cgeti2cdetect与我的设备进行良好的交互。我还可以使用echocat从设备驱动程序(i2c-ocores(读取/写入。

然而,我构建的任何试图通过调用write()read()来实现这一点的代码都会失败,并显示"Connection timed out"。打开设备文件工作:

fd = open("/dev/i2c-10", O_RDWR);

设置从属地址有效:

ioctl(fd, I2C_SLAVE, addr);

但是写入或读取返回-1并将errno设置为"Connection timed out">

write(fd, buffer, len);

此外,一旦我尝试以这种方式写入或读取,它就会断开I2C总线,我必须重新加载模块才能使其再次使用i2c-tools。我还尝试过使用各种其他方式写入i2c驱动程序(ioctl调用i2c_rdwr_ioctl_data消息,i2c_smbus_ioctl_data消息(,但都没有成功,它们返回相同的错误消息。

我想不出write()read()调用在我的代码中与i2c-toolsecho中的工作方式有什么不同的原因。事实上,我甚至用i2c-tools源代码(busybox1.26.2(编译了我的程序,并直接使用了i2cseti2cget使用的相同函数。。。并且它仍然不起作用。

欢迎任何帮助或建议。

在echo或i2cset调用中使用strace。在代码中使用strace。比较系统调用。

相关内容

  • 没有找到相关文章

最新更新