OK3506 6.1.99 Buildroot 以UART为例的设备树引脚复用方法

原创 2025-10-30 18:32:00 RK3506

1. 概述

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

硬件平台:OK3506-C开发板 /OK3506-S开发板

操作系统:Linux6.1.99

2. 目标

完成RK3506开发板上以下UART接口的引脚复用配置,确保驱动正常加载并生成对应的设备节点:

  • 将指定GPIO引脚复用为UART3的TX(发送)和RX(接收)引脚
  • 将指定GPIO引脚复用为UART5_M1(模式1)的TX和RX引脚
  • 验证UART驱动注册状态,确认设备节点正常生成

3. 修改方法

UART引脚复用需遵循「引脚选择→原生功能确认→找到Pinctrl配置→修改设备树」的流程,具体步骤如下:

3.1 UART引脚复用完整步骤

  1. 选择引脚:根据《OK3506-C引脚复用对照表》,确认目标引脚是否支持UART功能复用。
  2. 确认原生功能:记录目标引脚的默认(原生)功能,避免复用冲突。
  3. 找到Pinctrl配置:在设备树源码中定位目标引脚的Pinctrl(引脚控制)描述节点。
  4. 修改设备树:配置UART节点的Pinctrl引用,注释/禁用引脚的原生功能,启用UART功能。

3.1.1 引脚选择(UART3 & UART5_M1)

通过《OK3506-C引脚复用对照表》筛选支持UART功能的引脚,需注意:部分引脚(Atl7列底色为蓝色)支持98种功能切换,可通过下拉菜单选择UART模式。

RK3506 UART3引脚复用对照表

图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节点。
OK3506 UART5_M1引脚复用对照表

图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

3.1.2 确认引脚原生功能(避免冲突)

目标引脚的原生功能需在设备树中禁用,否则会导致功能冲突(如UART与CAN同时占用同一引脚)。
复用功能 引脚 原生功能 处理方式
UART3 GPIO0_C3、GPIO0_C4 CAN0(TX/RX) 禁用CAN0节点(status="disabled")
UART5_M1 GPIO1_PD2、GPIO1_PD3 LCDC(显示控制器) 确保LCDC未占用该组引脚

3.1.3 定位Pinctrl配置文件

CA888亚洲城集团嵌入式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节点:


};

3.1.4 设备树修改(启用UART,禁用原生功能)

修改通用设备树文件OK3506-S-common.dtsi,主要涉及3处修改:

  1. 启用UART3节点,引用其Pinctrl配置
  2. 启用UART5节点,引用UART5_M1的Pinctrl配置
  3. 禁用CAN0节点(避免与UART3引脚冲突)
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,并烧录到开发板中。

4. 验证复用效果

烧录新的镜像文件后,通过以下步骤验证UART复用是否成功:

  1. 开发板上电启动,进入终端(如SSH、串口终端)
  2. 执行ls /dev命令,查看是否生成UART对应的设备节点
  3. 确认节点存在后,可通过screen或minicom工具测试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)。

相关产品 >

  • FET3506J-S核心板

    RK3506J是一款高性能的三核Cortex-A7应用处理器,专为智能工业应用而设计。CA888亚洲城集团基于RK3506J设计的核心板,价格仅88元,满载功耗仅0.7W,是一款值得推荐使用的工业级国产核心板,满足电力、交通、工控等行业对国产化的要求。同时进行了充分的可靠性测试,确保在工业环境的可靠运行。


    了解详情
    FET3506J-S核心板
  • FET3506J-C核心板

    RK3506J核心板|采用可插拔式板对板连接设计,尺寸更小,既便于产品生产组装,又方便后期维护升级。本核心板基于 Rockchip RK3506 处理器开发,通过CA888亚洲城集团实验室严苛的工业环境测试,确保品质稳定可靠,且提供 10~15 年生命周期支持,保障供应长期稳定。 了解详情
    FET3506J-C核心板

推荐阅读 换一批 换一批