有在Raspberry Pi上为PCF8575 I/ o扩展器编写c代码的经验

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

本文关键字:代码 经验 扩展器 Pi Raspberry 上为 PCF8575 有在      更新时间:2023-10-16

有没有人试图用SparkFun的PCF8575 I/O扩展器在树莓派上写一个C/c++例程来扩展I/O ?

我可以找到很多Python示例,但它们对我帮助不大,因为我需要用c语言开发。

我已经正确配置了一切,并且我知道我的I2C设备响应。例如,我可以从命令行做到这一点:

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

和所有16个输出(在这种情况下)将打开/关闭

我还知道我可以简单地执行system();函数从我的c代码,但这不是我想要的方式,因为我希望能够在那个词中处理单个比特,然后做切换模式,等等。

我看了看Arduino的实现和它们的示例代码,这些代码(当然)都是基于Atmel处理器的,修改所有的库和文件以符合ARM处理器可能会使我超出项目的最后期限。(这是一个简单的项目,以显示在Pi上填充常规I/O与通过I2C使用I/O扩展器来保存I/O之间的差异)我还编写了一个教程,供我个人参考和任何感兴趣的人使用。但我被困在这一点上。

请帮

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

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

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

在不写入进程中所有其他引脚的情况下,无法改变一个引脚的状态,并且引脚没有显式的输入状态。如果您想要这样奇特的功能,您将需要一个奇特的I/O扩展器。:)


现在,所有这些都说了,一种读写I2C设备的方法,例如这个I/O扩展器,而不需要使用i2cset命令。具体来说,如果您使用C语言,则可以读写I2C设备节点以与设备通信。关于如何做到这一点的文档是Linux内核的一部分,在:

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