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.

[参考译文] AM6548:uboot 中的控制 GPIO

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/986568/am6548-control-gpio-in-uboot

器件型号:AM6548

尊敬的 TI:

很抱歉再次开机自检。

从下面的前一个帖子中、我认为我没有疑问。  但我错了!

https://e2e.ti.com/support/processors/f/processors-forum/983550/am6548-read-write-gpio-in-uboot/3635938?tisearch=e2e-sitesearch&keymatch=%25252520user%2525253A445865#3635938

我执行了 GPIO 测试以再次使 LED 闪烁。

在 K3-am654-base-board.dts 中、我添加了测试 GPIO。

GPIO_TEST:GPIO_TEST{
兼容="GPIO-test";
pintest-GPIO =<&wkup_GPIO0 25 GPIO_ACTIVE_HIGH_>;
u-boot、dm-spl;
};

cbhass_wakeup{(&C)
wkup_pmx0:pinmux@4301c000{
兼容="pinctrl-single";
REG =<0x4301c000 0x118>;
#pinctrl-cells =<1>;
pinctrl-single、寄存器宽度=<32>;
pinctrl-single、function-mask =<0xffffff>;
};

wkup_GPIO0:wkup_GPIO0@42110000{
兼容="ti、am654-gpio"、"ti、keystone-gpio";
REG =<0x42110000 0x100>;
GPIO 控制器;
#GPIO-cells =<2>;
ti、ngpio =<56>;
TI、Davinci-GPIO-Unbanked =<0>;
时钟=<&K3_CLKS 59 0>;
时钟名称="GPIO";
u-boot、dm-spl;
};
};

wkup_pmx0{.wkup_pmx0}
pinctrl-names ="default";
pinctrl-0 =<&GPIO_Identify_pines>;

GPIO_Identify_pins:GPIO_Identify_pins{

pinctrl-single、pins =<
AM65X_WKUP_IOPAD (0x0034、PIN_OUTPUT、7)/*(T1) MCU_OSPI1_CLK.WKUP_GPIO0_25 LED-ERR*/
>;
u-boot、dm-spl;
};
};

我在 board_late_init()中添加了我的测试函数。

int GPIO_control_test (void)

结构 GPIO_desc PIN_GPIO;
int 节点、pin0Val、ret;


节点= FDT_NODE_OFFSET_BY_compatible (gd->FDT_BLOB、0、"GPIO-test");

RET = GPIO_REQUEST_BY_NAME_NODEV (OFFSET_TO_ofnode)、"pintest-GPIO"、0、PIN_GPIO、GPIOD_is_OUT);

IF (dm_gpio_is_valid (&pin_gpio))

pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [1]\r\n"、pin0Val);

DM_GPIO_SET_DIR_FLAGS (&PIN_GPIO、GPIOD_is_OUT);
DM_GPIO_SET_VALUE (&PIN_GPIO、1);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [2]\r\n"、pin0Val);

DM_GPIO_SET_VALUE (&PIN_GPIO、0);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [3]\r\n"、pin0Val);

DM_GPIO_SET_VALUE (&PIN_GPIO、1);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_CONTINL_TEST dm_GPIO_get_value =%d [4]\r\n",pin0Val? LEDST_ON:LEDST_OFF);

其他
printf ("Eric:gpio_control_test dm_gpio_is_valid 错误!! \r\n");

返回1;

在我的程序中、我想再次将 LED 闪烁为开、关和开。 它按我的要求工作。

但是、当我查看日志时、我始终从  dm_gpio_get_value 获取值为0。

我错过了什么吗?

谢谢。

Eric

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

    尊敬的 Eric:

    这确实很奇怪、在硬件级别、您可以切换、软件始终报告0。

    您能否转储 wkup_GPIO0的寄存器?

    MD 0x42110000 10.

    将 GPIO 设置为高电平、在 LED 亮起时进行转储、并将 GPIO 设置为低电平、然后获取上述转储。

    此致、
    基尔西

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

    您好 

    我已经转储了寄存器。

    LED_ON:

    => MD 0x42110000 10
    42110000:44832905 00000001 00000000 00000000 .)D...........
    42110010:edffff 12000000 12000000 12000000…
    42110020:00000203 00000000 00000000 00000000…
    42110030:00000000 00000000 ffFFFF 00000000…
    =>

    LED_OFF:

    => MD 0x42110000 10
    42110000:44832905 00000001 00000000 00000000 .)D...........
    42110010:edffff 10000000 10000000 10000000…
    42110020:00000203 00000000 00000000 00000000…
    42110030:00000000 00000000 ffFFFF 00000000…
    =>

    谢谢。

    Eric

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

    Eric、

    请检查以下内容以了解通用 GPIO 配置:  e2e.ti.com/.../948888

    我发现问题与 pinmux 设置有关。 在引脚级别、将配置保持为 PIN_INPUT。

    GPIO_Identify_pins:GPIO_Identify_pins{

    pinctrl-single、pins =<
    AM65X_WKUP_IOPAD (0x0034、PIN_INPUT、7)/*(T1) MCU_OSPI1_CLK.WKUP_GPIO0_25 LED-ERR*/
    >;
    u-boot、dm-spl;
    };

    您应该会看到正确的值。

    感谢寄存器的转储。 验证后解决此问题。

    此致、
    基尔西

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

    尊敬的

    那么、这是否意味着我们需要在需要获取任何 GPIO 值时将引脚配置为 PIN_INPUT?

    谢谢。

    Eric

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

    Eric、

    是的。 您能确认它是否适合您吗? 如果是、请解决该问题。

    此致、
    基尔西

x 出现错误。请重试或与管理员联系。