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