本文档聚焦飞凌嵌入式RK3506开发板上UART3和UART5_M1的引脚复用配置。由于系统已默认集成UART驱动,因此仅需修改设备树即可实现引脚功能切换,其他外设(如SPI、I2C)的复用逻辑可参考此流程。

硬件平台:OK3506-C开发板 /OK3506-S开发板
操作系统:Linux6.1.99
完成RK3506开发板上以下UART接口的引脚复用配置,确保驱动正常加载并生成对应的设备节点:
UART引脚复用需遵循「引脚选择→原生功能确认→找到Pinctrl配置→修改设备树」的流程,具体步骤如下:
通过《OK3506-C引脚复用对照表》筛选支持UART功能的引脚,需注意:部分引脚(Atl7列底色为蓝色)支持98种功能切换,可通过下拉菜单选择UART模式。

图1:UART3引脚选择(连接器引脚91=GPIO0_C3,92=GPIO0_C4)
UART3选用以下引脚:
连接器引脚号 | GPIO编号 | 复用功能 | 备注 |
|---|---|---|---|
91 | GPIO0_C3 | UART3_TX | 发送引脚 |
92 | GPIO0_C4 | UART3_RX | 接收引脚 |
UART5与其他UART不同,支持两种模式(M0/M1),对应两组不同引脚。本文选择UART5_M1(模式1),需在设备树中明确引用M1的Pinctrl节点。

图2:UART5_M1引脚选择(GPIO1_PD2=TX,GPIO1_PD3=RX)
UART5_M1选用以下引脚:
GPIO编号 | 复用功能 | 对应Pinctrl节点 |
|---|---|---|
GPIO1_PD2 | UART5_TX_M1 | uart5m1_xfer_pins |
GPIO1_PD3 | UART5_RX_M1 | uart5m1_xfer_pins |
目标引脚的原生功能需在设备树中禁用,否则会导致功能冲突(如UART与CAN同时占用同一引脚)。
复用功能 | 引脚 | 原生功能 | 处理方式 |
|---|---|---|---|
UART3 | GPIO0_C3、GPIO0_C4 | CAN0(TX/RX) | 禁用CAN0节点(status="disabled") |
UART5_M1 | GPIO1_PD2、GPIO1_PD3 | LCDC(显示控制器) | 确保LCDC未占用该组引脚 |
飞凌嵌入式RK3506的Pinctrl配置分散在以下两个设备树文件中,需根据引脚类型选择对应文件:
# 1. 通用RMIO引脚配置(含UART3) kernel/arch/arm/boot/dts/rk3506-pinctrl-rmio.dtsi # 2. 核心Pinctrl配置(含UART5) kernel/arch/arm/boot/dts/rk3506-pinctrl.dtsi
在rk3506-pinctrl-rmio.dtsi中找到UART3的Pinctrl节点:
/* UART3 TX引脚配置:GPIO0_C3 */ rm_io19_uart3_tx: rm-io19-uart3-tx { rockchip,pins = <0 RK_PC3 20 &pcfg_pull_none>; }; /* UART3 RX引脚配置:GPIO0_C4 */ rm_io20_uart3_rx: rm-io20-uart3-rx { rockchip,pins = <0 RK_PC4 20 &pcfg_pull_none>; };
在rk3506-pinctrl.dtsi中找到UART5_M1的Pinctrl节点:
};

修改通用设备树文件OK3506-S-common.dtsi,主要涉及3处修改:
diff --git a/arch/arm/boot/dts/OK3506-S-common.dtsi b/arch/arm/boot/dts/OK3506-S-common.dtsi
index 4c6f947ee..644f986f2 100644
--- a/arch/arm/boot/dts/OK3506-S-common.dtsi
+++ b/arch/arm/boot/dts/OK3506-S-common.dtsi
@@ -341,11 +341,22 @@ &uart2 {
pinctrl-0 = <&rm_io0_uart2_rx &rm_io2_uart2_tx>;
status = "okay";
};
+
+/* 启用UART3:引用TX/RX的Pinctrl节点 */
+&uart3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rm_io20_uart3_rx &rm_io19_uart3_tx>;
+ status = "okay";
+};
+
+/* 启用UART5:引用UART5_M1的收发引脚组 */
+&uart5 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart5m1_xfer_pins>;
+ status = "okay";
+};
/* 禁用CAN0:避免与UART3引脚冲突 */
&can0 {
pinctrl-names = "default";
pinctrl-0 = <&rm_io19_can0_tx &rm_io20_can0_rx>;
- status = "okay";
+ status = "disabled";
};
&can1 {修改设备树后,需重新编译内核生成boot.img,或全编译生成update.img,并烧录到开发板中。
烧录新的镜像文件后,通过以下步骤验证UART复用是否成功:
成功复用后,ls /dev输出应包含以下节点:
root@ok3506-buildroot:/# ls /dev
...
ttyS2 # 原有UART2节点
ttyS3 # UART3对应的节点(新增)
ttyS5 # UART5对应的节点(新增)
...
root@ok3506-buildroot:/#UART设备节点命名规则:ttySx,其中x为UART编号(UART3→ttyS3,UART5→ttyS5)。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。