OK3506 6.1.99 Buildroot 以UART為例的設備樹引腳復用方法

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

1. 概述

本文檔聚焦飛凌嵌入式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配置文件

飛凌嵌入式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應用處理器,專為智能工業應用而設計。飛凌嵌入式基于RK3506J設計的核心板,價格僅88元,滿載功耗僅0.7W,是一款值得推薦使用的工業級國產核心板,滿足電力、交通、工控等行業對國產化的要求。同時進行了充分的可靠性測試,確保在工業環境的可靠運行。


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

    RK3506J核心板|采用可插拔式板對板連接設計,尺寸更小,既便于產品生產組裝,又方便后期維護升級。本核心板基于 Rockchip RK3506 處理器開發,通過飛凌嵌入式實驗室嚴苛的工業環境測試,確保品質穩定可靠,且提供 10~15 年生命周期支持,保障供應長期穩定。 了解詳情
    FET3506J-C核心板

推薦閱讀 換一批 換一批