在 Raspberry Pi 上为 PCF8575 I/O-Expander 编写 C 代码的经验

Experience writing C-code for PCF8575 I/O-Expander on Raspberry Pi

有没有人尝试使用 SparkFun 的 PCF8575 I/O-Expander 编写 C/C++ 例程来扩展 Raspberry PI 上的 I/O?

我可以找到很多 Python 示例,这些示例对我帮助不大,因为我需要用 C 进行开发。

我已正确配置所有内容,而且我知道我的 I2C 设备会响应。例如,我可以从命令行执行此操作:

i2cset -y 1 0x20 0xff 0xff
i2cset -y 1 0x20 0x00 0x00

并且所有 16 个输出(在本例中)将变为 on/off

我也知道我可以简单地做 system();从我的 C 代码中运行, 但这不是我想要解决这个问题的方式,因为我希望能够解决该词中的单个位,然后再切换模式等。

我查看了 Arduino 实现及其示例代码,(当然)全部基于 Atmel 处理器并修改所有库和文件以与 ARM 处理器兼容可能会让我超越我的项目的截止日期。 (这是一个简单的项目,展示了在 Pi 上填充常规 I/O 与通过 I2C 使用 I/O 扩展器来保存 I/Os 之间的区别)我也在写一个教程我的个人参考和任何感兴趣的人。但是我卡在了这一点上。

请帮忙

关于寻址单个位和改变模式:你不能。 PCF8575是一个非常简单的I/O扩展器,只支持两种操作:

  1. 写入两个字节来设置所有引脚的状态。

  2. 读取两个字节读取所有管脚的状态。如果引脚设置为高电平,引脚将进入准输入状态(带上拉)。

如果不写入进程中的所有其他引脚,则无法更改一个引脚的状态,并且引脚没有明确的输入状态。如果您想要这样的奇特功能,则需要更高级的 I/O 扩展器。 :)


现在,综上所述,一种读取和写入 I2C 设备的方法,例如这个 I/O 扩展器,无需向 i2cset 命令。具体来说,如果您使用 C 语言工作,则可以读取和写入 I2C 设备节点以与设备通信。有关如何执行此操作的文档可作为 Linux 内核的一部分提供,位于:

https://www.kernel.org/doc/Documentation/i2c/dev-interface