This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/PCF8574:在板级配置文件中设置 PCF8574后、我看不到内核中注册的 GPIO

Guru**** 2483895 points
Other Parts Discussed in Thread: PCF8574

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/678410/linux-pcf8574-after-setting-up-pcf8574-in-board-file-i-cannot-see-gpios-registered-in-the-kernel

部件号:PCF8574

工具/软件:Linux

我正在将 PCF857r GPIO 扩展器驱动程序集成到 Linux 内核(版本~3.2 Linux)中。 由于这是在较旧版本的 Linux 内核上构建的、因此我使用板级配置文件来设置此驱动程序。 下面是板级配置文件(./mach-exynos/mach-u1.c)中的一段代码、其中我设置了此扩展器:  

/* PCF8574 GPIO 扩展器平台数据*/

静态结构 pcf857x_platform_data pcf857x_data[]={

  {

          .GPIO_base = 300、   

  }、};

 /* I2C1 */

静态结构 i2c_board_info i2c_devs1[]__initdata ={

  {

      I2C_Board_info ("pcf857x"、0x20)、

          .type ="PCF8574"、

          .platform_data =&pcf857x_data[0]、

  }、};

我在相应的 I2C 总线上的正确地址(I2C1为0x20)看到 PCF8574寄存器。 但是、我看不到正在注册任何 GPIO。 目前、我还没有将扩展器连接到 I2C1总线、但我认为我应该仍然能够看到已注册的 GPIO。 具体而言、我应该看到已注册的 GPIO 300-307 (因为它是一个8位扩展器)。 但我不这么做。

我通过"cat /sys/kernel/debug/gpio "从硬件(Exynos 4210 SoC)看到的 GPIO 范围为0-287。 由于我不想与任何物理 GPIO 发生冲突、因此我选择的扩展器 GPIO 超出此范围(300+)。 我认为、问题的一部分是超出此范围的 GPIO 不存在。 我是否需要以某种方式创建“虚拟”GPIO 以便 PCF8574能够识别和采用? 我不确定如何继续。 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Joe、您好!

    我们在该论坛上的专业知识更多地涉及硬件/芯片方面、因此遗憾的是、我们可能有点难调试似乎是驱动程序问题(因为您的系统似乎识别出 PCF8574器件本身)。 不过、我们可以尝试提供帮助。 将 GPIO 视为"已注册"需要什么? 您是否曾尝试将扩展器 IO 端口分配为较低的值、而只是进行实验来确认您的理论、即大于300的值会导致问题?

    此致、
    最大
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Max:

    感谢您的回复!  

    通过"注册"、我意味着我能够通过 sysfs 接口在 Linux 内核中查看 GPIO。 例如、如果内核中注册了 GPIO 300、我认为我能够成功导出该 GPIO (echo 300 >/sys/class/gpio/export)。

    我曾尝试将扩展器 GPIO 与0-287范围相关联、但这不起作用。 我认为这可能不起作用、因为这些 GPIO 连接到物理 SoC GPIO。  

    我已经读了一点、对于超过特定版本(版本3.0)的 Linux 内核版本、我可能不会看到扩展器 GPIO、除非 PCF8574扩展器物理连接到我的硬件(在引导之前)。 这听起来可以吗? 我还没有尝试过这种方法、但很快就会尝试。 不过、在我看来、无论物理器件是否存在、我都应该看到 GPIO。 但我读出、在引导过程中、如果物理设备不存在、它们可能不会被探测、因此不会在 sysfs 中创建相应的条目。 不确定这一点,但值得一试。

    您的整体看法是什么? 再次感谢 Max!

    最棒的

    Joe

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿 Joe、

    "我已经读过一些内容、对于超过特定版本(版本3.0)的 Linux 内核版本、我可能看不到扩展器 GPIO、除非我的 PCF8574扩展器物理连接到我的硬件(在引导之前)。 这听起来是否可行?"

    这种问题与我们的专业知识有点不符,因为我们更多地关注此线程中支持的模拟方面,而不是软件方面。 我可以从模拟方面说得更好:如果您尝试查看您的软件是否识别该器件、我们会在 I2C 中发送器件地址、其中包含一个读取或写入位、器件需要确认该位才能让主器件 (发送地址的人员)知道它已听到读取/写入命令。 在这种情况下、您似乎需要了解需要读取器件的 GPIO 状态。 因此、在这种情况下、您确实需要对器件进行物理连接。

    如果您可以在尝试与器件通信时向我们发送 SDA/SCL o 示波器截图、则更能为我们提供帮助。 这通常是我们查看实际情况最简单的方法、因为我们可以看到器件看到的内容及其对地址的响应方式。

    谢谢、
    -Bobby