RK3576开发板GPIO驱动入门教程,基于触觉智能开发板教学-上

触觉智能Purple Pi OH2开发板板载双20Pin的GPIO排针(兼容树莓派),提供了丰富的拓展空间。本文基于Purple Pi OH2为大家讲解GPIO概念、原理、代码示例、调试方法灯。

一、GPIO 基本概念

1.1 什么是 GPIO?

GPIO(General Purpose Input/Output,通用输入输出)是嵌入式系统中最基础的外设接口。每个 GPIO 引脚可以被配置为:

输入模式 :读取外部信号(如按键、传感器)

输出模式 :控制外部设备(如 LED、继电器)

中断模式 :检测边沿变化触发中断

1.2 RK3576 GPIO 资源

RK3576 芯片共有 5 组 GPIO(GPIO0~GPIO4),每组包含 32 个引脚(A0-A7, B0-B7, C0-C7, D0-D7)。

从设备树可以看到:

复制代码
gpio0 = &gpio0;
gpio1 = &gpio1;
gpio2 = &gpio2;
gpio3 = &gpio3;
gpio4 = &gpio4;

1.3 GPIO 命名规则

RK 平台使用 GPIOx_PYz 的命名方式:

x : GPIO 组号(0-4)

Y : 端口(A、B、C、D)

z : 引脚号(0-7)

例如:GPIO0_PB4 表示 GPIO0 组的 B 端口第 4 号引脚

二、GPIO 工作原理

2.1 内部结构

2.2 工作模式

|------|--------------------|--------|
| 模式 | 说明 | 典型应用 |
| 输入模式 | 高阻态,读取外部电平 | 按键检测 |
| 输出模式 | 驱动外部电路 | LED 控制 |
| 中断模式 | 边沿 / 电平触发 | 事件通知 |
| 复用模式 | 作为其他功能(UART/I2C 等) | 引脚复用 |

三、GPIO 设备树配置

3.1 在设备树中添加 GPIO 节点

编辑设备树文件(如ido-evb7609-v1a.dtsi):

复制代码
// 定义 LED 设备节点
/ {
    leds: leds {
        status = "okay";
        compatible = "gpio-leds";
        pinctrl-names = "default";
        pinctrl-0 = <&leds_gpio>;
        work_led: work {
            gpios = <&gpio4 RK_PC7 GPIO_ACTIVE_HIGH>;
            linux,default-trigger = "heartbeat";
        };
        hub_rst {
            gpios = <&gpio4 RK_PD0 GPIO_ACTIVE_HIGH>;
            default-state="on";
        };
    };

    // USB 电源控制
    cgpio:cgpios{
        status = "okay";
        compatible = "cust,cgpio";

        usb_pwr {	//SD-card、USB-A、Wi-Fi
            gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
            init-status = <1>;
        };
    };
};

3.2 pinctrl 引脚配置

&pinctrl {    // LED 引脚配置
    led_pins: led-pins {
        rockchip,pins =
            <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
    };

    // 按键引脚配置
    key_pins: key-pins {
        rockchip,pins =
            <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
    };
};

3.3 GPIO 上下拉配置详解

RK3576 的 GPIO 支持多种上下拉配置,通过 rockchip,pins 属性的最后一个参数指定。

上下拉配置类型

|----------|------------------|------------|------------------|
| 配置 | 设备树值 | 说明 | 典型应用 |
| 上拉 | &pcfg_pull_up | 引脚默认上拉到高电平 | 按键输入、I2C SDA/SCL |
| 下拉 | &pcfg_pull_down | 引脚默认下拉到低电平 | 复位信号、使能信号 |
| 无上下拉 | &pcfg_pull_none | 浮空输入,无上拉电阻 | LED 输出、GPIO 输出 |
| 保持 | &pcfg_pull_bus | 总线保持器 | 低功耗场景 |

实际设备树配置示例

复制代码
&pinctrl {
    /* LED 引脚 - 无上拉(输出模式不需要) */
    leds_gpio: leds-gpio {
        rockchip,pins =
            <4 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>,  /* work_led */
            <4 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;  /* hub_rst */
    };

    /* USB 电源 - 无上拉 */
    usb_pwr: usb-pwr {
        rockchip,pins =
            <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
    };

    /* 耳机检测 - 上拉(按键检测) */
    hp_det: hp-det {
        rockchip,pins = 
            <3 RK_PB0 RK_FUNC_GPIO &pcfg_pull_up>;
    };

    /* WiFi 唤醒 - 下拉 */
    wifi_host_wake_irq: wifi-host-wake-irq {
        rockchip,pins = 
            <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
    };

    /* 按键输入 - 上拉 */
    adc_keys_pins: adc-keys-pins {
        rockchip,pins =
            <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
    };

    /* I2C 引脚 - 上拉(I2C 标准需要) */
    i2c2m0_xfer: i2c2m0-xfer {
        rockchip,pins =
            <1 RK_PB3 9 &pcfg_pull_up>,  /* i2c2_sda_m0 */
            <1 RK_PB4 9 &pcfg_pull_up>;   /* i2c2_scl_m0 */
    };
};

上下拉选择原则

注意事项

1.输出模式 :通常使用&pcfg_pull_none,因为 GPIO 输出是推挽驱动

2.输入按键 :必须使用&pcfg_pull_up,确保按键未按下时读到高电平

3.I2C 总线 :必须使用&pcfg_pull_up,I2C 是开漏输出需要上拉电阻

4.中断引脚 :根据触发方式选择,上升沿触发用下拉,下降沿触发用上拉

今天就先写到这里 下期带来 驱动代码示例和调试方法 以及常见问题解决

相关推荐
A小调的码农2 小时前
给垃圾平板“一生E本” 装新系统—————Armbian 编译 KYX T7Y (RK3326) 踩坑全记录
linux·嵌入式硬件
执迷不悟8232 小时前
51单片机--通信/串口
单片机·嵌入式硬件·51单片机
捷瑞电子工坊2 小时前
电赛入门实战:基于MSPM0G3507(MOG3507)的GPIO点灯实验
单片机·嵌入式硬件·mspm0g3507·电赛入门
西城微科方案开发2 小时前
激光测距仪PCBA方案开发
单片机·嵌入式硬件
KaifuZeng3 小时前
通信与接口协议面试问题汇总一
单片机·嵌入式硬件·面试·通信与接口协议
科芯创展3 小时前
XZ75011S电源供电8.0-100V平均电流模式的LED驱动集成电路
单片机·嵌入式硬件
国科安芯13 小时前
航天电子模拟前端三大支柱:精密运放、高速运放与电压监控的协同设计方法——ASL8522S/ASL622S/ASL706S技术解析
前端·单片机·嵌入式硬件·fpga开发·架构·安全性测试
KaifuZeng16 小时前
模电面试问题汇总一
单片机·嵌入式硬件·面试·模电
2401_8541515517 小时前
STM32 看门狗:IWDG 和 WWDG 怎么用
stm32·单片机·嵌入式硬件