当前位置: 首页 > news >正文

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

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鼠标就闪烁了一下而已就熄灭了。^_

http://www.lqws.cn/news/213391.html

相关文章:

  • 【Hugging Face】实践笔记:Pipeline任务、BERT嵌入层、Train任务、WandB解析
  • Python 训练营打卡 Day 38-Dataset和Dataloader类
  • Pytorch学习——自动求导与计算图
  • Spring AI与Spring Modulith核心技术解析
  • 如何判断指针是否需要释放?
  • [面试精选] 0104. 二叉树的最大深度
  • 初识redis
  • Kafka 消息模式实战:从简单队列到流处理(一)
  • c++ 静态成员变量
  • 《高精度》题集
  • 【题解-洛谷】B3622 枚举子集(递归实现指数型枚举)
  • 【Latex】Windows/Ubuntu 绘制 eps 矢量图通用方法(drawio),支持插入 Latex 数学公式
  • 一款“短小精悍的”手机录屏软件
  • 安达发|装饰材料行业APS生产排程软件:破解生产困局,智造升级新引擎
  • Java高级 |【实验八】springboot 使用Websocket
  • Spring中循环依赖问题的解决机制总结
  • day 27 装饰器函数
  • [GitHub] 优秀开源项目
  • 区块链技术概述
  • Java方法引用深度解析:从匿名内部类到函数式编程的演进
  • MySQL 8.0 绿色版安装和配置过程
  • SQL Server 日期时间类型全解析:从精确存储到灵活转换
  • SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
  • 使用Caddy在Ubuntu 22.04上配置HTTPS反向代理
  • 开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
  • 指针的定义与使用
  • Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
  • 虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
  • 露亦如电 · 时之沙 | 让遗憾在灰烬里随风而去
  • CCPC chongqing 2025 L