20250607在荣品的PRO-RK3566开发板的Android13的uboot中使用gpio命令来配置GPIO的状态

发布于:2025-06-08 ⋅ 阅读:(24) ⋅ 点赞:(0)

20250607在荣品的PRO-RK3566开发板的Android13的uboot中使用gpio命令来配置GPIO的状态
2025/6/7 16:09


【结论:GPIO 0A6可以操作,但是应该不太完美!GPIO3A1被占用了?】


根据经验/很容易得知/艰难知道:
Z:\Android13.0\u-boot\.config
【有】
CONFIG_DM=y
CONFIG_DM_GPIO=y

【无】
CONFIG_DWAPB_GPIO=y
CONFIG_CMD_GPIO=y


Z:\Android13.0\u-boot\configs\rk3568_defconfig
# CONFIG_EFI_LOADER is not set
CONFIG_AVB_LIBAVB=y
CONFIG_AVB_LIBAVB_AB=y
CONFIG_AVB_LIBAVB_ATX=y
CONFIG_AVB_LIBAVB_USER=y
CONFIG_RK_AVB_LIBAVB_USER=y
CONFIG_OPTEE_CLIENT=y
CONFIG_OPTEE_V2=y
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITION=y
【简单起见:直接全部加在最后面了^_】
CONFIG_DM=y
CONFIG_DM_GPIO=y
CONFIG_DWAPB_GPIO=y
CONFIG_CMD_GPIO=y


参考资料:
https://www.cnblogs.com/xu-long/p/16805994.html
怎么在uboot下使用通用GPIO接口
一:在uboot下的defconfig 打开如下配置

CONFIG_DM=y
CONFIG_DM_GPIO=y
CONFIG_DWAPB_GPIO=y
CONFIG_CMD_GPIO=y
二:重新编译u-boot后会生成cmd:gpio

(板子上电时连续按回车键)进入到板端uboot cmdline下执行" gpio status -a " 查看板端对应的gpio numbe
三:利用 uboot gpio 命令操作GPIO 做测试

gpio c 0 ; 将第0根PIN清零(拉低)
gpio s 0 ; 将第0根PIN设为output同时拉高

四:gpio 操作demo

直接以下demo code添加到uboot/cmd路径下,再在uboot/cmd/Makefile中添加编译选项,编译完成后可以直接操作gpio
复制代码
#include <command.h>
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <asm/gpio.h>

int do_gpio_test(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[])
{
    if (argc < 2) {
        printf("usage: gpio_test [requ/out/on/off]\n");
        return 0;
    }

    if (strcmp("requ", argv[1]) == 0) {
        gpio_request(126, "ir_a");
        gpio_request(127, "ir_b");
        mdelay(10);
    } else if (strcmp("out", argv[1]) == 0) {
        gpio_direction_output(126, 1);
        gpio_direction_output(127, 1);
        mdelay(10);
    } else if (strcmp("on", argv[1]) == 0) {
        gpio_set_value(126, 0);
        gpio_set_value(127, 1);
        mdelay(100);
        gpio_set_value(126, 1);
        gpio_set_value(127, 1);
    } else if (strcmp("off", argv[1]) == 0) {
        gpio_set_value(126, 1);
        gpio_set_value(127, 0);
        mdelay(100);
        gpio_set_value(126, 1);
        gpio_set_value(127, 1);
    }

    return 0;
}

U_BOOT_CMD(
    gpio_test, 4, 1, do_gpio_test,
    "u-boot gpio cmd test",
    "gpio - just for test\n"
);
复制代码
 编译完成升级后,进入到uboot会有gpio_test命令
gpio_test requ
  初始化gpio
gpio_test out
  设置gpio direction
gpio_test on
  设置 ir_cur (的两根PIN) 状态


【完整的LOG:】
final DSI-Link bandwidth: 996 Mbps x 4
unsupport command data type: 48
failed to send on cmds: -22
disp info 0, type:11, id:0
hdmi@fe0a0000 disconnected
CLK: (sync kernel. arm: enter 816000 KHz, init 816000 KHz, kernel 0N/A)
  apll 1104000 KHz
  dpll 528000 KHz
  gpll 1188000 KHz
  cpll 1000000 KHz
  npll 1200000 KHz
  vpll 644000 KHz
  hpll 24000 KHz
  ppll 200000 KHz
  armclk 1104000 KHz
  aclk_bus 150000 KHz
  pclk_bus 100000 KHz
  aclk_top_high 500000 KHz
  aclk_top_low 400000 KHz
  hclk_top 150000 KHz
  pclk_top 100000 KHz
  aclk_perimid 300000 KHz
  hclk_perimid 150000 KHz
  pclk_pmu 100000 KHz
Net:   eth1: ethernet@fe010000
Hit key to stop autoboot('CTRL+C'):  0 
=> <INTERRUPT>
=> <INTERRUPT>
=> <INTERRUPT>
=> gp
  gpio gpt
=> gpio 
gpio - query and control gpio pins

Usage:
gpio <input|set|clear|toggle> <pin>
    - input/set/clear/toggle the specified pin
gpio status [-a] [<bank> | <pin>]  - show [all/claimed] GPIOs
=> 
=> gpio c 6
Device 'gpio@fdd60000': seq 0 is in use by 'gpio0@fdd60000'
gpio: pin 6 (gpio 6) value is 0
=> 
=> gpio s 6
gpio: pin 6 (gpio 6) value is 1
=> gpio s 6
gpio: pin 6 (gpio 6) value is 1
=> gpio c 97
Device 'gpio@fe740000': seq 1 is in use by 'gpio@fdd60000'
Device 'gpio@fe750000': seq 2 is in use by 'gpio2@fe750000'
gpio: pin 97 (gpio 97) value is 0
   Warning: value of pin is still 1
=> 


这片荣品的PRO-RK3566核心板的底板,USB3.0接口的电源是由GPIO 0A6所控制的。

拉低GPIO 0A6:gpio c 6


拉高GPIO 0A6:gpio s 6
拉高的时候,可以看见USB3.0接口上的鼠标的红灯闪烁一下就没有了。
电压有了,但是USB通讯协议在uboot模式下应该还没有加载完成。
USB通讯失败,USB鼠标就闪烁了一下而已就熄灭了。^_