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.

[参考译文] AM620-Q1:GPIO 读取错误

Guru**** 2487425 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1438828/am620-q1-gpio-read-error

器件型号:AM620-Q1

工具与软件:

您好、亲爱的专家。

我尝试读取 GPIO 输入值(GPIO0_39)、但即使没有电压输入、它也始终返回1。

执行

* SDK : 10.x

* EVB : AM62_LP (PROC124E2)

检查 GPIO0_39寄存器地址0x000f40a0

2.检查 padconfig 值。 我认为是正确的。 (GPIO 模式7、输出)

root@am62xx-lp-evm:~# devmem2 0x000f40a0
/dev/mem opened.
Memory mapped at address 0xffff8357e000.
Read at address  0x000F40A0 (0xffff8357e0a0): 0x00050007

3.检查 gpiochip ,我们已经知道 gpio0_x 属于 gpiochip2

root@am62xx-lp-evm:~# cat /sys/kernel/debug/gpio 
gpiochip0: GPIOs 512-514, parent: i2c/0-0030, tps65219-gpio, can sleep:

gpiochip1: GPIOs 515-538, parent: i2c/1-0023, 1-0023, can sleep:
 gpio-523 (WL_LT_EN            )
 gpio-524 (CSI_RSTz            )
 gpio-531 (SPI0_FET_SEL        )
 gpio-532 (SPI0_FET_OE         )
 gpio-533 (GPIO_OLDI_RSTn      )
 gpio-534 (PRU_3V3_EN          )
 gpio-537 (CSI_VLDO_SEL        )
 gpio-538 (SOC_WLAN_SDIO_RST   )

gpiochip2: GPIOs 539-630, parent: platform/600000.gpio, 600000.gpio:
 gpio-570 (                    |vddshv_sdio         ) out lo 

gpiochip3: GPIOs 631-682, parent: platform/601000.gpio, 601000.gpio:
 gpio-680 (                    |igo_update_pin      ) out lo 

gpiochip4: GPIOs 683-706, parent: i2c/1-0022, 1-0022, can sleep:
 gpio-683 (GPIO_CPSW2_RST      )
 gpio-684 (GPIO_CPSW1_RST      )
 gpio-685 (PRU_DETECT          )
 gpio-686 (MMC1_SD_EN          |regulator-3         ) out lo 
 gpio-687 (VPP_LDO_EN          )
 gpio-688 (EXP_PS_3V3_En       )
 gpio-689 (EXP_PS_5V0_En       )
 gpio-690 (EXP_HAT_DETECT      )
 gpio-691 (GPIO_AUD_RSTn       )
 gpio-692 (GPIO_eMMC_RSTn      )
 gpio-693 (UART1_FET_BUF_EN    )
 gpio-694 (BT_UART_WAKE_SOC    )
 gpio-695 (GPIO_HDMI_RSTn      )
 gpio-696 (CSI_GPIO0           )
 gpio-697 (CSI_GPIO1           )
 gpio-698 (GPIO_OLDI_INT       )
 gpio-699 (HDMI_INTn           )
 gpio-700 (TEST_GPIO2          |igo_reset_pin       ) out hi 
 gpio-701 (MCASP1_FET_EN       )
 gpio-702 (MCASP1_BUF_BT_EN    )
 gpio-703 (MCASP1_FET_SEL      )
 gpio-704 (UART1_FET_SEL       )
 gpio-706 (IO_EXP_TEST_LED     )

4.使用 gpioinfo 检查

root@am62xx-lp-evm:~# gpioinfo -c gpiochip2
gpiochip2 - 92 lines:
        line   0:       unnamed                 input
        line   1:       unnamed                 input
        line   2:       unnamed                 input
        line   3:       unnamed                 input
        line   4:       unnamed                 input
        line   5:       unnamed                 input
        line   6:       unnamed                 input
        line   7:       unnamed                 input
        line   8:       unnamed                 input
        line   9:       unnamed                 input
        line  10:       unnamed                 input
        line  11:       unnamed                 input
        line  12:       unnamed                 input
        line  13:       unnamed                 input
        line  14:       unnamed                 input
        line  15:       unnamed                 input
        line  16:       unnamed                 input
        line  17:       unnamed                 input
        line  18:       unnamed                 input
        line  19:       unnamed                 input
        line  20:       unnamed                 input
        line  21:       unnamed                 input
        line  22:       unnamed                 input
        line  23:       unnamed                 input
        line  24:       unnamed                 input
        line  25:       unnamed                 input
        line  26:       unnamed                 input
        line  27:       unnamed                 input
        line  28:       unnamed                 input
        line  29:       unnamed                 input
        line  30:       unnamed                 input
        line  31:       unnamed                 output consumer=vddshv_sdio
        line  32:       unnamed                 input
        line  33:       unnamed                 input
        line  34:       unnamed                 input
        line  35:       unnamed                 input
        line  36:       unnamed                 input
        line  37:       unnamed                 input
        line  38:       unnamed                 input
        line  39:       unnamed                 input
        line  40:       unnamed                 input
        line  41:       unnamed                 input
        line  42:       unnamed                 input
        line  43:       unnamed                 input
        line  44:       unnamed                 input
        line  45:       unnamed                 input
        line  46:       unnamed                 input
        line  47:       unnamed                 input
        line  48:       unnamed                 input
        line  49:       unnamed                 input
        line  50:       unnamed                 input
        line  51:       unnamed                 input
        line  52:       unnamed                 input
        line  53:       unnamed                 input
        line  54:       unnamed                 input
        line  55:       unnamed                 input
        line  56:       unnamed                 input
        line  57:       unnamed                 input
        line  58:       unnamed                 input
        line  59:       unnamed                 input
        line  60:       unnamed                 input
        line  61:       unnamed                 input
        line  62:       unnamed                 input
        line  63:       unnamed                 input
        line  64:       unnamed                 input
        line  65:       unnamed                 input
        line  66:       unnamed                 input
        line  67:       unnamed                 input
        line  68:       unnamed                 input
        line  69:       unnamed                 input
        line  70:       unnamed                 input
        line  71:       unnamed                 input
        line  72:       unnamed                 input
        line  73:       unnamed                 input
        line  74:       unnamed                 input
        line  75:       unnamed                 input
        line  76:       unnamed                 input
        line  77:       unnamed                 input
        line  78:       unnamed                 input
        line  79:       unnamed                 input
        line  80:       unnamed                 input
        line  81:       unnamed                 input
        line  82:       unnamed                 input
        line  83:       unnamed                 input
        line  84:       unnamed                 input
        line  85:       unnamed                 input
        line  86:       unnamed                 input
        line  87:       unnamed                 input
        line  88:       unnamed                 input
        line  89:       unnamed                 input
        line  90:       unnamed                 input
        line  91:       unnamed                 input

4.使用 gpioget 检查值

 root@am62xx-lp-evm:~# gpioget -c gpiochip2 39
"39"=active

5.导出读取

因为 GPIO0_0 = 539。 因此 GPIO0_39 = 578

root@am62xx-lp-evm:/# echo 578 > /sys/class/gpio/export
root@am62xx-lp-evm:/# cd /sys/class/gpio/gpio578
root@am62xx-lp-evm:/sys/class/gpio/gpio578# ls
active_low  device      direction   edge        power       subsystem   uevent      value
root@am62xx-lp-evm:/sys/class/gpio/gpio578# echo in > direction
root@am62xx-lp-evm:/sys/class/gpio/gpio578# cat value 
1
root@am62xx-lp-evm:/sys/class/gpio/gpio578# cat value 
1

即使 GPIO0_0输入电压= 0、它也始终返回1。

我会错过什么吗?

需要更多的调试建议。

非常感谢。

Gibbs

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

    嗨、Gibbs、

    请注意、sysfs GPIO 已经过时了一段时间。 我不知道 libgpiod 命令会如何响应 sysfs 命令。

    是否有驱动引脚输入的因素? 比如外部模块或3.3V/0V 信号?

    此致、

    Anshu

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

    您好、Anshu

    所有测试均在 EVB (AM62_LP (PROC124E2))上进行、GPIO0_39 (J3)直接连接到引脚 J20

    我们将3.3V 或0v 引导至 GPIO0_39、但它始终检测输入为"1"  

    除了 sysfs GPIO 库之外、我们是否还有其他方法来测试  GPIO0_39作为输入?

    您能否基于 GPIO0_39为我们提供一个输入示例、直接寄存器 R/W 也可以。

    谢谢你。

    Gibbs

     

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

    更新了、

    如何使用这种方式?

    直接存储器寄存器检查?

    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1398803/faq-processor-sdk-am62x-how-to-toggle-gpios-and-leds-from-u-boot-command-prompt

    我想我们需要阅读示例。

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

    尊敬的专家:

    如下所示、需要仔细检查。

    在执行该测试时、我们是否需要关注引脚多路复用模式?

    GPIO1中有4个存储体、GPIO0中有5个存储体。 每组包含16个 GPIO 引脚。

    GPIO1、BANK0 -> PIN 0~15

    GPIO1、组1 -> PIN 16~31

    GPIO1、组2 -> PIN 32~47

    GPIO1、BANK3 -> PIN 48~63

    GPIO1、BANK4 -> PIN 64~79

    GPIO0、BANK0 -> PIN 0~15

    GPIO0、组1 -> PIN 16~31

    GPIO0、组2 -> PIN 32~47

    GPIO0、BANK3 -> PIN 48~63

    GPIO0、BANK4 -> PIN 64~79

    GPIO0、BANK5 -> PIN 80~95

      

    如果我们需要检查 GPIO0_37、 GPIO0_41。  GPIO0_42作为输入、这些引脚属于组2

    因此、我们需要将 GPIO_DIR23 (0x0060 0038)-> mw.l 0x00600038 0x00000610、位6、位9、位10设置为输入

    然后读取 GPIO_IN_DATA23 (0x0060 0048)--> md.l 0x0060 0048;检查 bit 6、bit 9、bit 10 status

    我对吗?

    谢谢你。

    Gibbs

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

    嗨、Gibbs、

    执行此测试时、我们是否需要关注 Pinmux 模式?

    是的、应在进行任何测试之前检查引脚多路复用模式。

    GPIO1中有4个存储体、GPIO0中有5个存储体。 每个组包含16个 GPIO 引脚。[/QUOT]

    每个 GPIO 模块总共有9组、每个模块提供144个引脚、但最多只能支持198个引脚(包括所有 GPIO 模块)。

    GPIO1、BANK0 -> PIN 0~15

    GPIO1、组1 -> PIN 16~31

    GPIO1、组2 -> PIN 32~47

    GPIO1、BANK3 -> PIN 48~63

    GPIO1、BANK4 -> PIN 64~79

    GPIO1、BANK5 -> PIN 80~87

    GPIO0、BANK0 -> PIN 0~15

    GPIO0、组1 -> PIN 16~31

    GPIO0、组2 -> PIN 32~47

    GPIO0、BANK3 -> PIN 48~63

    GPIO0、BANK4 -> PIN 64~79

    GPIO0、BANK5 -> PIN 80~86

    MCU_GPIO0、BANK0 -> PIN 0~15

    MCU_GPIO0、组1 -> PIN 16~22

    请参阅下面 TRM 的屏幕截图。

    [报价 userid="533255" url="~/support/processors-group/processors/f/processors-forum/1438828/am620-q1-gpio-read-error/5521246 #5521246"]

    如果我们需要检查 GPIO0_37、 GPIO0_41。  GPIO0_42作为输入、这些引脚属于组2

    因此、我们需要将 GPIO_DIR23 (0x0060 0038)-> mw.l 0x00600038 0x00000610、位6、位9、位10设置为输入

    然后读取 GPIO_IN_DATA23 (0x0060 0048)--> md.l 0x0060 0048;检查 bit 6、bit 9、bit 10 status

    [报价]

    要检查该引脚的方向、请检查 GPIO_DIR23 (0x600038)寄存器的位5、位9、位10 (从0开始计数)。 类似地、读取 GPIO_IN_DATA23以了解引脚状态。

    例如-如果上述 GPIO 引脚设置为高电平并且所有其他引脚都设置为低电平、GPIO_IN_DATA23寄存器将产生0x00000620。

    此致、

    Tushar

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

    您好、Tushar

    感谢您的回复。

    因为客户"需要测试许多 GPIO (输入)"、而每个 GPIO (输入)都有相同的问题

    因此、我选择 gpio0_37来复制该问题、我发现 EVB 有相同的问题。

    测试后、它仍然 无法正常工作。

    步骤如下:

    1、修改引脚多路复用、已检查 GPIO 输入模式

    root@am62xx-evm:~# devmem2 0x000f4098
    /dev/mem opened.
    Memory mapped at address 0xffffb37b9000.
    Read at address  0x000F4098 (0xffffb37b9098): 0x00050002
    root@am62xx-evm:~# devmem2 0x000f4098 w 0x00050007
    /dev/mem opened.
    Memory mapped at address 0xffffb87d6000.
    Read at address  0x000F4098 (0xffffb87d6098): 0x00050002
    Write at address 0x000F4098 (0xffffb87d6098): 0x00050007, readback 0x00050007
    root@am62xx-evm:~#
    root@am62xx-evm:~# devmem2 0x000f4098
    /dev/mem opened.
    Memory mapped at address 0xffff9a798000.
    Read at address  0x000F4098 (0xffff9a798098): 0x00050007

    2.检查  GPIO_DIR23、输入模式

    root@am62xx-evm:~#
    root@am62xx-evm:~# devmem2 0x00600038
    /dev/mem opened.
    Memory mapped at address 0xffffa9f07000.
    Read at address  0x00600038 (0xffffa9f07038): 0xFFFFFFFF

    3.   当 GPIO0_37 = 0v 时、读取 GPIO_IN_DATA23

    root@am62xx-evm:~# devmem2 0x00600048
    /dev/mem opened.
    Memory mapped at address 0xffff8cf1e000.
    Read at address  0x00600048 (0xffff8cf1e048): 0x00001828

    4  当 GPIO0_37 = 3.3V 时、读取 GPIO_IN_DATA23

    root@am62xx-evm:~# devmem2 0x00600048
    /dev/mem opened.
    Memory mapped at address 0xffff9b786000.
    Read at address  0x00600048 (0xffff9b786048): 0x00001828

    结果表明、即使 GPIO0_37为0v 或3.3V、GPIO0_37始终读取返回值为1。  

    因此、我认为结果与 GPIO 库相同、如下所示。

    root@am62xx-evm:~# gpioinfo -c gpiochip0
    gpiochip0 - 92 lines:
            line   0:       unnamed                 input
            line   1:       unnamed                 input
            line   2:       unnamed                 input
            line   3:       unnamed                 input
            line   4:       unnamed                 input
            line   5:       unnamed                 input
            line   6:       unnamed                 input
            line   7:       unnamed                 input
            line   8:       unnamed                 input
            line   9:       unnamed                 input
            line  10:       unnamed                 input
            line  11:       unnamed                 input
            line  12:       unnamed                 input
            line  13:       unnamed                 input
            line  14:       unnamed                 input
            line  15:       unnamed                 input
            line  16:       unnamed                 input
            line  17:       unnamed                 input
            line  18:       unnamed                 input
            line  19:       unnamed                 input
            line  20:       unnamed                 input
            line  21:       unnamed                 input
            line  22:       unnamed                 input
            line  23:       unnamed                 input
            line  24:       unnamed                 input
            line  25:       unnamed                 input
            line  26:       unnamed                 input
            line  27:       unnamed                 input
            line  28:       unnamed                 input
            line  29:       unnamed                 input
            line  30:       unnamed                 input
            line  31:       unnamed                 output consumer=tlv71033
            line  32:       unnamed                 input
            line  33:       unnamed                 input
            line  34:       unnamed                 input
            line  35:       unnamed                 input
            line  36:       unnamed                 input
            line  37:       unnamed                 input
            line  38:       unnamed                 input
            line  39:       unnamed                 input
            line  40:       unnamed                 input
            line  41:       unnamed                 input
            line  42:       unnamed                 input
            line  43:       unnamed                 input
            line  44:       unnamed                 input
            line  45:       unnamed                 input
            line  46:       unnamed                 input
            line  47:       unnamed                 input
            line  48:       unnamed                 input
            line  49:       unnamed                 input
            line  50:       unnamed                 input
            line  51:       unnamed                 input
            line  52:       unnamed                 input
            line  53:       unnamed                 input
            line  54:       unnamed                 input
            line  55:       unnamed                 input
            line  56:       unnamed                 input
            line  57:       unnamed                 input
            line  58:       unnamed                 input
            line  59:       unnamed                 input
            line  60:       unnamed                 input
            line  61:       unnamed                 input
            line  62:       unnamed                 input
            line  63:       unnamed                 input
            line  64:       unnamed                 input
            line  65:       unnamed                 input
            line  66:       unnamed                 input
            line  67:       unnamed                 input
            line  68:       unnamed                 input
            line  69:       unnamed                 input
            line  70:       unnamed                 input
            line  71:       unnamed                 input
            line  72:       unnamed                 input
            line  73:       unnamed                 input
            line  74:       unnamed                 input
            line  75:       unnamed                 input
            line  76:       unnamed                 input
            line  77:       unnamed                 input
            line  78:       unnamed                 input
            line  79:       unnamed                 input
            line  80:       unnamed                 input
            line  81:       unnamed                 input
            line  82:       unnamed                 input
            line  83:       unnamed                 input
            line  84:       unnamed                 input
            line  85:       unnamed                 input
            line  86:       unnamed                 input
            line  87:       unnamed                 input
            line  88:       unnamed                 input
            line  89:       unnamed                 input
            line  90:       unnamed                 input
            line  91:       unnamed                 input
    root@am62xx-evm:~# gpioget -c gpiochip0 37
    "37"=active
    root@am62xx-evm:~# gpioget -c gpiochip0 37
    "37"=active

    我尝试在 GPIO0_37未连接任何东西(悬空)时测量电压、它显示大约为0.4V

    您能复制我的步骤并再次测试它吗?

    需要您的建议。

    谢谢你。

    Gibbs

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

    嗨、Gibbs、

    您能否复制我的步骤并重新测试它?

    让我检查以上情况并返回。

    此致、

    Tushar

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

    您好、Tushar

    我想我犯了个错误、下面的更新。

    请检查 GPIO0_39的"仅此次更新"。

    我测量 GPIO0_39、SK_AM62B_P1上的引脚18

    (1)检查并修改 PADCONFIG40 (0x000F40A0)

    此设置表明 GPIO0_39是输入、默认情况下为内部下拉

    root@am62xx-evm:~# devmem2 0x000f40a0
    /dev/mem opened.
    Memory mapped at address 0xffffbdaea000.
    Read at address  0x000F40A0 (0xffffbdaea0a0): 0x08214007
    \root@am62xx-evm:~# devmem2 0x000f40a0 w 0x00050007
    /dev/mem opened.
    Memory mapped at address 0xffffa0aa2000.
    Read at address  0x000F40A0 (0xffffa0aa20a0): 0x08214007
    Write at address 0x000F40A0 (0xffffa0aa20a0): 0x00050007, readback 0x00050007
    root@am62xx-evm:~# devmem2 0x000f40a0
    /dev/mem opened.
    Memory mapped at address 0xffff8fb92000.
    Read at address  0x000F40A0 (0xffff8fb920a0): 0x00050007

    (2)当 GPIO0_39 =悬空= 0.6V 时检查 GPIO 状态

    为什么当 GPIO 引脚悬空时软件读取 GPIO0_39 =1?

    root@am62xx-evm:~# gpioget -c gpiochip0 39
    "39"=active

    仔细检查 GPIO_IN_DATA23、位7 = GPIO0_39、寄存器告诉我们 GPIO 状态= 1

    root@am62xx-evm:~# devmem2 0x00600048
    /dev/mem opened.
    Memory mapped at address 0xffff98493000.
    Read at address  0x00600048 (0xffff98493048): 0x000018A8

    (3)将 GPIO0_39物理连接到地、并再次读取 GPIO 状态。

    检测到"0"似乎没问题!!

     

    root@am62xx-evm:~# gpioget -c gpiochip0 39
    "39"=inactive

    root@am62xx-evm:~# devmem2 0x00600048
    /dev/mem opened.
    Memory mapped at address 0xffff9af97000.
    Read at address  0x00600048 (0xffff9af97048): 0x00001828

    我的问题:

    (1)我已在 PADCONFIG 中设置了默认下拉、GPIO 悬空时为什么我们仍然读取值为"1"

    (2)我们知道的唯一一件事,检测"0"是可以的,需要建议。

    (3) 为了进行输入高电平测试、我们应该将10k 电阻器串联到3.3V 吗?

    或在没有电阻器的情况下直接输入3.3V 输入可以吗?

     

    谢谢你。

    Gibbs

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

    嗨、Gibbs、

    [报价 userid="533255" url="~/support/processors-group/processors/f/processors-forum/1438828/am620-q1-gpio-read-error/5531858 #5531858"]我已在 PADCONFIG 中设置默认下拉、为什么 GPIO 悬空时我们仍读取值为"1"

    可以看到 PADCONFIG 寄存器值0x50007将位16配置为置位状态、从而禁用 PULLUDEN 选项。 这意味着所选的拉动类型将对 GPIO 无影响。

    您能否将 PADCONFIG 寄存器配置为值0x40007并更新结果?

    此致、

    Tushar

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

    谢谢 Tushar、

    它在我这边工作。

    DT:  

    AM62X_IOPAD(0x00a0, PIN_INPUT_PULLDOWN, 7) /* (K25) GPMC0_WPn.GPIO0_39 */

    root@am62xx-evm:~# devmem2 0x000f40a0                                                                                                                           
    /dev/mem opened.                                                                                                                                                
    Memory mapped at address 0xffff864cc000.                                                                                                                        
    Read at address  0x000F40A0 (0xffff864cc0a0): 0x00040007

    引脚多路复用

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

    嗨、Gibbs、

    感谢您的更新。

    关闭螺纹。

    此致、

    Tushar