【RK3576】【Android14】GPIO管脚复用

获取更多相关的【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的配置