我正在尝试从嵌入式linux(4.6(上的I2C设备进行读写。我可以使用i2cset
、i2cget
和i2cdetect
与我的设备进行良好的交互。我还可以使用echo
和ca
t从设备驱动程序(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-tools
和echo
中的工作方式有什么不同的原因。事实上,我甚至用i2c-tools
源代码(busybox1.26.2(编译了我的程序,并直接使用了i2cset
和i2cget
使用的相同函数。。。并且它仍然不起作用。
欢迎任何帮助或建议。
在echo或i2cset调用中使用strace。在代码中使用strace。比较系统调用。