【RK3576】【Android14】GPIO管脚复用

发布于:2025-07-21 ⋅ 阅读:(17) ⋅ 点赞:(0)

获取更多相关的【RK3576】【Android14】驱动开发,可收藏系列博文,持续更新中:
【RK3576】Android 14 驱动开发实战指南


硬件接口

驱动开发

硬件管脚复用允许单个物理引脚承载多种功能(如 GPIO、I2C、UART、PWM 等),通过配置寄存器选择当前功能。在 Linux/Android 中,此配置通过 设备树(DTS) 和 pinctrl 子系统 实现。

DTS配置

找到项目dts文件“kernel/arch/arm64/boot/dts/rockchip/rk3576-evb1-v10.dts”,

dts配置管脚复用

在 DTS 中通过 pinctrl 节点定义功能组,例如配置 UART5 的 TX/RX 引脚:

&uart5 {
        pinctrl-names = "default";
        pinctrl-0 = <&uart2_xfer>;  //管脚复用,根据硬件原理图选择
        status = "okay";  //使能串口
};

// 在 pinctrl 节点中定义复用功能
pinctrl: pinctrl {
    uart5 {
        uart5m2_xfer: uart5m2-xfer {
            rockchip,pins = <1 RK_PA0 1 &pcfg_pull_up>,  // TX 引脚,上拉
                           <1 RK_PA1 1 &pcfg_pull_up>;  // RX 引脚,上拉
        };
    };
};

//rockchip,pins 格式:<Bank Pin# Function Flags>
//Function 值:查阅芯片手册(如 RK3576 TRM)确定复用编号(如 1 表示 UART 模式)

dts配置电气属性

在 pcfg_pull_up 中定义电气特性:

pcfg_pull_up: pcfg-pull-up {
    bias-pull-up;       // 上拉电阻
    drive-strength = <8>; // 驱动强度(单位 mA)
};

常用参数:
//bias-pull-up/down/none:上拉/下拉/浮空。
//drive-strength:驱动电流(4mA~12mA)。
//input-enable:配置为输入模式。

单独修改项目级 pinctrl

在 Android 14 开发中,通过合理的设备树(DTS)设计,可以避免同步修改 pinctrl 影响多个项目

在项目 DTS 中新增专属 pinctrl 组:

{
    // 覆盖基础配置中的 pinctrl 节点
    &pinctrl {
        // 新增项目A专属的 UART5 配置
        uart5 {
            uart5m2_xfer_projectA: uart5m2-xfer-projectA {
                rockchip,pins = <1 RK_PB0 1 &pcfg_pull_none>,  // 修改引脚
                               <1 RK_PB1 1 &pcfg_pull_none>;
            };
        };
    };

    // 关联到具体外设
    &uart5 {
        pinctrl-0 = <&uart5m2_xfer_projectA>;  // 使用项目A的配置
    };
};

在项目 DTS 中通过项目宏隔离:

#if defined(PROJECT_A)
    pinctrl-0 = <&uart5_projectA_config>;
#elif defined(PROJECT_B)
    pinctrl-0 = <&uart5_projectB_config>;
#endif

//编译时指定项目:
make DTS_FLAGS="-DPROJECT_A"  //只激活项目A的配置


网站公告

今日签到

点亮在社区的每一天
去签到