I2C 文件描述符上的 I2C 总线可写/可读标志

Posted

技术标签:

【中文标题】I2C 文件描述符上的 I2C 总线可写/可读标志【英文标题】:I2C Bus writable/readable flags on I2C file descriptor 【发布时间】:2018-10-11 16:43:33 【问题描述】:

我想通过 Raspbian 上的 I2C 总线将多个温度计连接到 Raspberry 板,使用 C++ 应用程序和包含 pselect() 的事件循环。从应用程序打开默认的i2c-0 文件描述符(并使用linux/i2c-dev.h 接口),我会将文件描述符添加到pselect()fd_set *readfdsfd_set *writefds。我想知道这个文件描述符是否会变成 FD_WRITEABLEFD_READABLE ?由于I2C是主/从设置,温度计应该不可能发起通信,因为读写操作都是由用户态的应用程序发起的,所以我想FD_READABLE应该是不可能的,是吗?对吧?

我还没有发现任何关于将 I2C 与 pselect 一起使用的信息,what does readable/writable mean in a socket file descriptor? And why regular files don't bother with that? 是我偶然发现的最接近的答案:“可读意味着套接字接收缓冲区中存在数据或 FIN。 可写意味着套接字发送缓冲区中有可用空间。” I2C 设备是否已缓冲?我可以依赖这种机制吗?

非常感谢!

【问题讨论】:

【参考方案1】:

所以是这样的:

pselect() 和 select() 函数应支持常规文件、终端和伪终端设备、基于 STREAMS 的文件、FIFO、管道和套接字。 pselect() 和 select() 在引用其他类型文件的文件描述符上的行为未指定。

i2c-0 是字符设备文件类型:https://www.kernel.org/doc/Documentation/i2c/dev-interface

pselect() 确实不保证该文件的任何内容。所以,不,你不能依赖它。

【讨论】:

以上是关于I2C 文件描述符上的 I2C 总线可写/可读标志的主要内容,如果未能解决你的问题,请参考以下文章

I2C总线的仲裁机制

Linux I2C总线驱动调试之i2c-tools工具使用

I2C协议详解

I2C和SPI总线对比

#导入Word文档图片# Linux下I2C驱动架构全面分析

FPAG学习笔记——I2C接口实现