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

RK3576开发板GPIO驱动入门教程,基于触觉智能开发板教学-上
触觉智能Purple Pi OH2开发板板载双20Pin的GPIO排针(兼容树莓派)提供了丰富的拓展空间。本文基于Purple Pi OH2为大家讲解GPIO概念、原理、代码示例、调试方法灯。一、GPIO基本概念1.1什么是GPIOGPIOGeneral Purpose Input/Output通用输入输出是嵌入式系统中最基础的外设接口。每个GPIO引脚可以被配置为•输入模式读取外部信号如按键、传感器•输出模式控制外部设备如LED、继电器•中断模式检测边沿变化触发中断1.2 RK3576 GPIO资源RK3576芯片共有5组GPIOGPIO0~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-stateon; }; }; // 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_upI2C是开漏输出需要上拉电阻4.中断引脚根据触发方式选择上升沿触发用下拉下降沿触发用上拉今天就先写到这里 下期带来驱动代码示例和调试方法 以及常见问题解决