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.

[参考译文] TDA4VM-Q1:libgpiod 1.6.3 与 ti-kernel 兼容

Guru**** 2868450 points

Other Parts Discussed in Thread: TCA9539

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1622018/tda4vm-q1-libgpiod-1-6-3-compatibilty-with-ti-kernel

器件型号: TDA4VM-Q1
主题中讨论的其他器件: TCA9539

My Application 使用 libgpiod 1.6.3 和 ti-kernel 6.1.X 进行编译

对于将 PAD 修改为用作 GPIO 的引脚的情况。 Libgpiod API 运行正常。

gpioget 和 gpioset。

 

对于 IO 扩展器、libgpiod API (gpioset 和 gpioget) 不工作。 尽管 DTS 更改为将 GPIO 列为额外的芯片。

附加日志以更清晰。

------------------------------------------------------------------------------------------------------------

root@j784s4-ospas120:~# gpiodetect
gpiochip0 [42110000.GPIO](89 行)
gpiochip1 [600000.GPIO](66 条线路)
Gpiochip2 [0-0075](16 行)

--------------------------------------------------------------------------------------------

root@j784s4-ospas120:~# ls /sys/class/i2c-dev/i2c-0/device/0-0075
温度              Name               有问题            uevent
Gpiochip2.            of_node             供应商:平台:600000.GPIO
MODALIAS             注意事项              供应商:监管机构:监管机构。0

----------------------------------------------------------------------------------------------------

root@j784s4-ospas120:~# gpioget gpiochip2 0
gpioget:读取 GPIO 值时出错:参数无效

----------------------------------------------------------------------------------------------------

root@j784s4-ospas120:~# gpioinfo gpiochip2
Gpiochip2 - 16 行:
     第 0 行:      未命名 的未使用输入 高电平有效
     第 1 行:      未命名 的未使用输入 高电平有效
     第 2 行:      未命名 的未使用输入 高电平有效
     第 3 行:      未命名 的未使用输入 高电平有效
     第 4 行:      未命名 的未使用输入 高电平有效
     第 5 行:      未命名 的未使用输入 高电平有效
     第 6 行:      未命名 的未使用输入 高电平有效
     第 7 行:      未命名 的未使用输入 高电平有效
     第 8 行:      未命名 的未使用输入 高电平有效
     第 9 行:      未命名 的未使用输入 高电平有效
     第 10 行:      未命名 的未使用输入 高电平有效
     第 11 行:      未命名 的未使用输入 高电平有效
     第 12 行:      未命名 的未使用输入 高电平有效
     第 13 行:      未命名 的未使用输入 高电平有效
     第 14 行:      未命名 的未使用输入 高电平有效
     第 15 行:      未命名 的未使用输入 高电平有效

-----------------------------------------------------------------------------------------------------------

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

    您好、Ankit、

    您能分享两件事吗:

    • 来自“dmesg"的“的日志
    • 具有 IO 扩展器节点的 DTS 文件?

    此致、

    Takuma

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

    尊敬的 Takuma:

    附加日志和 DTS 文件以供参考。

    e2e.ti.com/.../0755.Dmesg.txt

    DTS 文件:

    e2e.ti.com/.../k3_2D00_j784s4_2D00_ospas120.txt

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

    您好、Ankit、

    dmesg 日志和 dts 文件看起来不错。 我没有看到任何指向问题的内容。

    现在、您可以运行:

    • readlink /sys/bus/i2c/devices/0-0075/driver

    并分享打印出来的内容?

    此致、

    Takuma

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

    当然、
    root@j784s4-ospas120:~# ls -l /sys/bus/i2c/devices/0-0075/driver
    lrwxrwxrwx 1 根根 0 Oct 10 11:48 /sys/bus/i2c/devices/0-0075/driver ->../../../../../../bus/i2c/drivers/pca953x

    root@j784s4-ospas120:~# ls -l /sys/bus/i2c/devices/0-0075/driver
    lrwxrwx 1 根根根 0 10 月 10 日 11:49 0-0075 ->./../../../devices/platform/bus@10000/2040000.i2c/i2c-0/0-0075
    ——w----- 1 根根 4096 OCT 10 11:49 绑定
    ——w----- 1 根根目录 4096 10 月 9 日 15:18 uevent
    ——w----- 1 根根目录 4096 Oct 10 11:49 解除绑定

    请查看上面的日志

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

    您好、Ankit、

    看起来也不错。 到目前为止、从 Linux 内核的角度来看、一切似乎都按预期运行。

    作为故障排除的下一步、您是否可以尝试从 Linux 驱动程序解除绑定、然后使用 i2c 命令行工具访问 IO 扩展器来检查设备是否可访问? 类似:

    1. echo 0-0075 >/sys/bus/i2c/drivers/pca953x/unbind
    2. i2cget -y 0 0x75 0x0

    此致、

    Takuma

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

    尊敬的 Takuma:
    为相同附加日志。

    root@j784s4-ospas120:~# echo 0-0075 >/sys/bus/i2c/drivers/pca953x/unbind
    root@j784s4-ospas120:~# i2cdetect -l
    I2C-0 I2C OMAP I2C 适配器 I2C 适配器
    root@j784s4-ospas120:~# i2cdetect -y 0
    警告:无法使用 SMBus 快速写入命令、将跳过一些地址
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:
    10:
    20:
    第 30 章:你是我的女人 -----
    40:
    第 50 章:我是你的女人 ----- ----- --
    60:
    70:
    root@j784s4-ospas120:~# i2cget -y 0 0x75 0x0
    错误:读取失败

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

    您好、Ankit、

    这是一个有趣的结果。 看起来没有在 I2C 总线上检测到器件、即使 Linux 内核驱动程序认为器件已成功初始化。

    1. 能否在取消绑定前运行“i2cdetect -r -y 0“、然后在取消绑定后运行同一个命令? 取消绑定前的预期输出是地址 0x75 处的 UU、而取消绑定后的输出应该是地址 0x75 处的 0x75
    2. 此外、您是否可以使用示波器或万用表检查硬件并探测以下信号的电压电平?
      1. VCC
      2. 复位
      3. A0
      4. 答 1
      5. int

    此致、

    Takuma

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

    尊敬的 Takuma:

    附加日志以供参考。

    root@j784s4-ospas120:~# i2cdetect -y 0
    警告:无法使用 SMBus 快速写入命令、将跳过一些地址
       0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:
    10:
    20:
    第 30 章:你是我的女人 -----
    40:
    第 50 章:我是你的女人 ----- ----- --
    60:
    70:
    root@j784s4-ospas120:~#
    CoreIO-R5F 的起始集群为集群:1、内核:1
    i2cdetect -r -y 0
       0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- -----
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ----- ----- --
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- ----- --
    第 70 章:我是你的女人
    root@j784s4-ospas120:~# echo 0-0075 >/sys/bus/i2c/drivers/pca953x/unbind
    root@j784s4-ospas120:~# i2cdetect -r -y 0
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- -----
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ----- ----- --
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- ----- --
    第 70 章:我的心 -----
    root@j784s4-ospas120:~#

    电压电平:

    1. VCC:3.3V
    2. 复位:3.3V
    3. A0:3.3V
    4. A1 - 0.0。
    5. INT - 3.3V

    谢谢

    Ankit

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

    您好、Ankit、

    电压电平看起来正确。 但是、出现一个意外的位、指示器件在取消绑定后消失。 只要器件已加电、您就应该在 I2C 总线上看到器件。

    在软件中解除绑定后是否也测量电压电平?

    此致、

    Takuma

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

    是、取消绑定后电压电平没有变化。

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

    您好、Ankit、

    您能做两个实验吗?  

    • 是否可以在 DTS 中将 ENABLE GPIO 从高电平有效更改为低电平有效? tca9539 驱动程序下面的行:
      • ENABLE-GPIO =<&MAIN_GPIO0 16 GPIO_ACTIVE_HIGH>;
    • 如果上述问题没有解决、能否从 MAIN_i2c4 中删除整个 exp2 节点、然后执行 i2cdetect  -r -y 0?
      • 只要扩展器上电、就应该在 I2C 总线上检测 I2C 器件、即使在没有驱动器的情况下也是如此。

    此致、

    Takuma

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

    尊敬的 Takuma:

    附加日志以供实验 1 参考

    root@j784s4-ospas120:~# gpioinfo -c 2.
    Gpiochip2 - 16 行:
    第 0 行:未命名的输入
    第 1 行:未命名的输入
    第 2 行:未命名的输入
    第 3 行:未命名的输入
    第 4 行:未命名的输入
    第 5 行:未命名的输入
    第 6 行:未命名的输入
    第 7 行:未命名的输入
    第 8 行:未命名的输入
    第 9 行:未命名的输入
    第 10 行:未命名的输入
    第 11 行:未命名的输入
    第 12 行:未命名输入
    第 13 行:未命名输入
    第 14 行:未命名的输入
    第 15 行:未命名的输入
    root@j784s4-ospas120:~# gpioinfo -c 2.
    Coreio-R5F 从 Clusterset -c 2 11=1D 内核:1.
    Get -c 2 11
    gpioget:无法请求行:没有这样的设备
    root@j784s4-ospas120:~# gpioset -c 2 11=1
    gpioset:无法请求芯片上的行“gpioset"/dev/gpiochip2“/dev/gpiochip2:参数无效
    root@j784s4-ospas120:~# gpioinfo -c 2.
    Gpiochip2 - 16 行:
    第 0 行:未命名的输入
    第 1 行:未命名的输入
    第 2 行:未命名的输入
    第 3 行:未命名的输入
    第 4 行:未命名的输入
    第 5 行:未命名的输入
    第 6 行:未命名的输入
    第 7 行:未命名的输入
    第 8 行:未命名的输入
    第 9 行:未命名的输入
    第 10 行:未命名的输入
    第 11 行:未命名的输出
    第 12 行:未命名输入
    第 13 行:未命名输入
    第 14 行:未命名的输入
    第 15 行:未命名的输入
    root@j784s4-ospas120:~# gpioget -c 2 11.
    gpioget:无法请求行:参数无效

    状态无变化:

    对于扩展器的情况,libgpiod 的行请求 API 似乎存在问题。

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

    您好、Ankit、

    我怀疑在 I2C 总线上无法检测/访问该器件。 这将解释为什么扩展器不能从 libgpiod 控制。  

    • 您可以尝试将 IO 扩展器从 DTS 中移除的实验 2 吗? 这应该会使用户空间能够获得对 IO 扩展器的控制、然后您应该会在总线 0 地址 75 上看到可以使用 i2cdetect 检测的器件、以及使用 i2cget 访问它们。  

    为了进行澄清、TI EVM 上的 IO 扩展器均可通过  libgpiod 访问。 gpioget 和 gpioset 都按预期工作。 该 EVM 的 IO 扩展器使用不同的器件型号、但与 tca9539 共用相同的软件驱动程序。

    此致、

    Takuma

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

    尊敬的 Takuma:

    它未列出禁用扩展器上的 75;

    i2cdetect -y -r 0
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- -----
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ----- ----- --
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- ----- --
    第 70 章:我的心 -----

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

    您好、Ankit、

    感谢您试用。 似乎在 I2C 总线上根本找不到器件。

    您能否确认 SCL 和 SDA 上是否有上拉电阻器? 我认为这是我们唯一尚未检查的两个引脚。

    此致、

    Takuma

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

    ​此外、您是否可以尝试运行以下并共享输出:  k3conf dump devices | grep -i i2c

    I2C4 应恢复​器件状态为开启。 如果没有、请执行  k3conf 启用设备 、然后重新运行转储设备和 i2cdetect。

    此致、

    Takuma

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

    尊敬的 Takuma:

    K3conf 未安装在我的板上、请告诉我在 板上下载此内容的配方。  

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

    您好、Ankit、

    以下是 k3conf 的来源: https://git.ti.com/cgit/k3conf/k3conf/tree/README.md

    另一方面、您能否确认 SCL 和 SDA 上是否有上拉电阻器?

    此致、

    Takuma

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

    尊敬的 Takuma:

    这是 k3conf 日志。

    # k3conf dump devices | grep -i i2c
    | 270 | J784S4_DEV_I2C0 | DEVICE_STATE_ON |
    | 271 | J784S4_DEV_I2C1 | DEVICE_STATE_ON |
    | 272 | J784S4_DEV_I2C2 | DEVICE_STATE_ON |
    | 273 | J784S4_DEV_I2C3 | DEVICE_STATE_ON |
    | 274 | J784S4_DEV_I2C4 | DEVICE_STATE_ON |
    | 275 | J784S4_DEV_I2C5 | DEVICE_STATE_ON |
    | 276 | J784S4_DEV_I2C6 | DEVICE_STATE_ON |
    | 277 | J784S4_DEV_MCU_I2C0 | DEVICE_STATE_ON |
    | 278 | J784S4_DEV_MCU_I2C1 | DEVICE_STATE_ON |
    | 279 | J784S4_DEV_WKUP_I2C0 | DEVICE_STATE_ON |

    此外、SCL 和 SDA 还确认了上拉寄存器。

    此外、我检查了我正在使用的 libgpiod 版本是 2.2、ti-linux 内核版本现在是 6.6.44

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

    您好、Ankit、

    感谢您的检查。 到目前为止、Linux 端的一切看起来都很好、尽管可能存在 libgpiod 版本、Linux 内核版本和扩展器内核驱动程序的兼容性问题...

    但在我们扩展到其他理论之前、您能否通过尝试直接获取 I2C 寄存器值来尝试最后一个针对 I2C 问题怀疑的测试? 如下所示:

    • i2cget -f -y 0 0x75 0x0

    此致、

    Takuma

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

    尊敬的 Takuma:

    它无法读取 i2c 附加日志:

    ~# i2cdetect -y -r 0
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00:-------- -----
    10:-------- ----- ----- --
    第 20 章:一个男人 ----- ----- --
    第 30 章:你是我的女人 ----- ----- --
    第 40 章:我是你的女人 ----- ----- --
    第 50 章:我是你的女人 ----- ----- --
    第 60 章:我是你的女人 ----- ----- --
    第 70 章:我是你的女人
    root@j784s4-ospas120:~# i2cget -f -y 0 0x75 0x0
    错误:读取失败

    我做了一个小实验、通过禁用 R5f 固件加载、可以正常工作。 我想了解 r5f 和 A72 的配置是否相同。  

    它在 A72 端无法正常工作的原因。

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

    您好、Ankit、

    我通过禁用 R5f 固件加载完成了一个小实验、然后它就可以正常工作。 我想了解 r5f 和 A72 的配置是否相同。  [/报价]

    很好的实验。 看起来是 RTOS 和 Linux 之间的资源冲突。 如果 I2C 总线和/或 GPIO 扩展器由运行 RTOS 和 Linux 的 R5F 和 A72 内核控制、则双方都将无法跟踪 I2C 控制器的状态。 请删除  R5F 或 A72 内核对 I2C 总线的依赖关系。

    此致、

    Takuma