【问题标题】:Read a word (2 byte) without providing a register address from userspace读取一个字(2 字节)而不提供来自用户空间的寄存器地址
【发布时间】:2021-10-02 20:40:24
【问题描述】:

我正在尝试从用户空间中的 C 读取 i2c 环境光传感器 BH1750。我在 Linux 上使用 BeagleBone pocket。

数据表说,在测量操作之后,需要使用以下 i2c 序列读取结果:S Adr Rd (A) (Data) A (Data) NA P

我遇到的问题:我发现的所有示例/命令要么只读取 1 个字节,要么需要一个寄存器地址才能读取更多。

我找到的最接近的是以下命令:i2c_master_recv()。 但是我对文档的解释是这个命令是在 kernel-device-drivers 中使用的。

如何从用户空间发出这样的 I2C-Read-Sequence?

【问题讨论】:

标签: c linux-device-driver i2c userspace iio


【解决方案1】:

我能够使用 Ian Abbott 的评论解决它:

假设已经打开了I2C控制器,并且已经使用I2C_SLAVE ioctl命令设置了Adr,那么长度为2的read syscall会执行上面的I2C读取事务。 – 伊恩·雅培 10 月 4 日 13:45

这是 I2C 通信结果的 Logicanalyzer-Trace:

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • 我编辑了您的答案以包含上述评论,因为这似乎是有用的信息,并且 cmets 将来可能会丢失。但是,我认为这个答案仍然可以改进,因为它基本上是一个仅链接的答案(尽管在这种情况下这可能已经足够好了 - 我无法真正判断这一点)。您可能需要添加一些额外的细节来帮助未来的读者。
  • 感谢让它变得更好!抱歉 - 我的错,我引用了错误的评论。复制/粘贴完整的评论,sonst 是一个完整的答案,如果 cmets 迷路了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2021-08-19
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多