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

时间:2015-08-23 17:51:38

标签: c++ c raspberry-pi i2c

是否有人尝试使用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个输出(在这种情况下)将打开/关闭

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

我看了一下Arduino实现及其示例代码,当然这些代码都基于Atmel处理器,修改所有库和文件以符合ARM处理器可能会超出截止日期我的项目。 (这是一个简单的项目,用于显示在Pi上填充常规I / O与通过I2C使用I / O扩展器来节省I / O之间的区别)我还在编写教程以供个人参考和任何有兴趣的人。但我现在陷入困境。

请帮忙

1 个答案:

答案 0 :(得分:2)

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

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

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

  3. 在没有写入过程中的所有其他引脚的情况下,无法更改一个引脚的状态,并且引脚没有明确的输入状态。如果你想要这样的花哨功能,你需要一个更高级的I / O扩展器。 :)

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

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