首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在I2C设备上使用写()或read()调用,但是echo和i2c-工具可以工作。

不能在I2C设备上使用写()或read()调用,但是echo和i2c-工具可以工作。
EN

Stack Overflow用户
提问于 2018-08-03 01:39:49
回答 1查看 775关注 0票数 3

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

但是,我构建的任何代码如果试图通过调用write()read()来实现这一点,都会在“连接超时”时失败。打开设备文件工作:

代码语言:javascript
运行
复制
fd = open("/dev/i2c-10", O_RDWR);

设置从地址工作:

代码语言:javascript
运行
复制
ioctl(fd, I2C_SLAVE, addr);

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

代码语言:javascript
运行
复制
write(fd, buffer, len);

而且,一旦我尝试以这种方式写或读,它就会破坏I2C总线,我必须重新加载模块才能使它在i2c-tools中重新工作。我还尝试使用各种其他方式向i2c驱动程序(带有i2c_rdwr_ioctl_data消息的ioctl调用、i2c_smbus_ioctl_data消息)写入,但没有结果,它们返回相同的错误消息。

在我的生活中,我无法想到write()read()调用在我的代码中的工作方式与i2c-toolsecho中的任何不同。事实上,我甚至用i2c-tools源代码(busybox 1.26.2)编译了我的程序,并直接使用了i2cseti2cget使用的相同的函数.但还是不起作用。

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 19:05:36

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51664208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档