我试图从嵌入式linux (4.6)上的I2C设备上进行读写。我可以使用i2cset、i2cget和i2cdetect与我的设备进行良好的交互。我还可以使用echo和cat从设备驱动程序(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驱动程序(带有i2c_rdwr_ioctl_data消息的ioctl调用、i2c_smbus_ioctl_data消息)写入,但没有结果,它们返回相同的错误消息。
在我的生活中,我无法想到write()和read()调用在我的代码中的工作方式与i2c-tools和echo中的任何不同。事实上,我甚至用i2c-tools源代码(busybox 1.26.2)编译了我的程序,并直接使用了i2cset和i2cget使用的相同的函数.但还是不起作用。
任何帮助或建议都非常欢迎。
发布于 2018-08-03 19:05:36
在回显或i2cset调用中使用strace。在代码中使用strace。比较一下系统调用。
https://stackoverflow.com/questions/51664208
复制相似问题