gpt4 book ai didi

c - I2C 用户空间读/写问题

转载 作者:太空狗 更新时间:2023-10-29 11:13:57 24 4
gpt4 key购买 nike

我正在编写一个用户空间程序,使用 open()、ioctl()、read() 和 write() 来读取和写入 EEPROM,但它似乎无法正常工作我期待。

我想首先我要问的是整个 I2C protocol for read and write通过使用 I2C 文件描述符调用 read() 和 write() 来处理? According to the link here ,整个事务由 read() 和 write() 处理。

如果是这样,那么 read() 和 write() 如何知道要读取哪个寄存器地址?我读过的大多数地方都说使用传递给 read() 和 write() 的数据缓冲区的第一个字节来存储要读取或写入的寄存器地址。但是,如果我正在与之通信的设备使用 16 位寄存器地址和寄存器数据怎么办? read() 和 write() 如何知道地址是 8 位还是 16 位长?

最佳答案

我认为底层协议(protocol)是通过三个系统调用实现的:readwriteioctl,如in the kernel I²C documentation 所述。 .不过,我建议使用 libi2c,这样您就不必担心这些细节。我在这里写了关于如何使用该库的文章:

http://blog.davidegrayson.com/2012/06/using-ic-on-raspberry-pi.html

我成功地将它包装在一个 C++ 类中,您可以在这里看到:

https://github.com/DavidEGrayson/minimu9-ahrs/blob/master/I2CBus.cpp

此外,在 I²C 中,设备地址是 7 位的。如果您的设备实现某种 16 位地址,则可能会在向设备的 7 位地址的数据传输中实现。

关于c - I2C 用户空间读/写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25941917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com