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

时间:2018-08-03 01:39:49

标签: linux timeout driver embedded-linux i2c

我正在尝试从嵌入式Linux(4.6)上的I2C设备读取和写入。我可以使用i2cseti2cgeti2cdetect与我的设备进行互动。我还可以使用echoca t从设备驱动程序(i2c-ocores)进行读取/写入。

但是,我构建的任何尝试通过调用write()read()来执行此操作的代码始终会因“连接超时”而失败。打开设备文件的工作原理:

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

设置从站地址有效:

ioctl(fd, I2C_SLAVE, addr);

但是写入或读取返回-1并将errno设置为“连接超时”

write(fd, buffer, len);

此外,一旦我尝试以这种方式进行写入或读取,它就会中断I2C总线,并且我必须重新加载模块以使其可以与i2c-tools一起使用。我还尝试了使用其他各种方式写入i2c驱动程序(使用ioctl消息,i2c_rdwr_ioctl_data消息的i2c_smbus_ioctl_data调用),但它们均返回相同的错误消息。 >

我一生都无法想到write()read()调用在我的代码中的工作方式与在i2c-toolsecho中的工作方式有任何不同。实际上,我什至用i2c-tools源代码(busybox 1.26.2)编译了程序,并直接使用了i2cseti2cget使用的相同功能…… em> still 不起作用。

非常欢迎任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

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