我正在尝试从嵌入式Linux(4.6)上的I2C设备读取和写入。我可以使用i2cset
,i2cget
和i2cdetect
与我的设备进行互动。我还可以使用echo
和ca
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-tools
和echo
中的工作方式有任何不同。实际上,我什至用i2c-tools
源代码(busybox 1.26.2)编译了程序,并直接使用了i2cset
和i2cget
使用的相同功能…… em> still 不起作用。
非常欢迎任何帮助或建议。
答案 0 :(得分:0)
在回声或i2cset调用中使用strace。在代码中使用strace。比较系统调用。