OK3506 6.1.99 Buildroot 以UART為例的設(shè)備樹(shù)引腳復(fù)用方法

原創(chuàng) 作者 Forlinx 2025-10-30 18:32:00 RK3506

1. 概述

本文檔聚焦飛凌嵌入式RK3506開(kāi)發(fā)板UART3UART5_M1引腳復(fù)用配置。由于系統(tǒng)已默認(rèn)集成UART驅(qū)動(dòng),因此僅需修改設(shè)備樹(shù)即可實(shí)現(xiàn)引腳功能切換,其他外設(shè)(如SPI、I2C)的復(fù)用邏輯可參考此流程。

硬件平臺(tái):OK3506-C開(kāi)發(fā)板 /OK3506-S開(kāi)發(fā)板

操作系統(tǒng):Linux6.1.99

2. 目標(biāo)

完成RK3506開(kāi)發(fā)板上以下UART接口的引腳復(fù)用配置,確保驅(qū)動(dòng)正常加載并生成對(duì)應(yīng)的設(shè)備節(jié)點(diǎn):

  • 將指定GPIO引腳復(fù)用為UART3的TX(發(fā)送)和RX(接收)引腳
  • 將指定GPIO引腳復(fù)用為UART5_M1(模式1)的TX和RX引腳
  • 驗(yàn)證UART驅(qū)動(dòng)注冊(cè)狀態(tài),確認(rèn)設(shè)備節(jié)點(diǎn)正常生成

3. 修改方法

UART引腳復(fù)用需遵循「引腳選擇→原生功能確認(rèn)→找到Pinctrl配置→修改設(shè)備樹(shù)」的流程,具體步驟如下:

3.1 UART引腳復(fù)用完整步驟

  1. 選擇引腳:根據(jù)《OK3506-C引腳復(fù)用對(duì)照表》,確認(rèn)目標(biāo)引腳是否支持UART功能復(fù)用。
  2. 確認(rèn)原生功能:記錄目標(biāo)引腳的默認(rèn)(原生)功能,避免復(fù)用沖突。
  3. 找到Pinctrl配置:在設(shè)備樹(shù)源碼中定位目標(biāo)引腳的Pinctrl(引腳控制)描述節(jié)點(diǎn)。
  4. 修改設(shè)備樹(shù):配置UART節(jié)點(diǎn)的Pinctrl引用,注釋/禁用引腳的原生功能,啟用UART功能。

3.1.1 引腳選擇(UART3 & UART5_M1)

通過(guò)《OK3506-C引腳復(fù)用對(duì)照表》篩選支持UART功能的引腳,需注意:部分引腳(Atl7列底色為藍(lán)色)支持98種功能切換,可通過(guò)下拉菜單選擇UART模式。

RK3506 UART3引腳復(fù)用對(duì)照表

圖1:UART3引腳選擇(連接器引腳91=GPIO0_C3,92=GPIO0_C4)

UART3選用以下引腳:

連接器引腳號(hào) GPIO編號(hào) 復(fù)用功能 備注
91 GPIO0_C3 UART3_TX 發(fā)送引腳
92 GPIO0_C4 UART3_RX 接收引腳
UART5與其他UART不同,支持兩種模式(M0/M1),對(duì)應(yīng)兩組不同引腳。本文選擇UART5_M1(模式1),需在設(shè)備樹(shù)中明確引用M1的Pinctrl節(jié)點(diǎn)。
OK3506 UART5_M1引腳復(fù)用對(duì)照表

圖2:UART5_M1引腳選擇(GPIO1_PD2=TX,GPIO1_PD3=RX)

UART5_M1選用以下引腳:

GPIO編號(hào) 復(fù)用功能 對(duì)應(yīng)Pinctrl節(jié)點(diǎn)
GPIO1_PD2 UART5_TX_M1 uart5m1_xfer_pins
GPIO1_PD3 UART5_RX_M1 uart5m1_xfer_pins

3.1.2 確認(rèn)引腳原生功能(避免沖突)

目標(biāo)引腳的原生功能需在設(shè)備樹(shù)中禁用,否則會(huì)導(dǎo)致功能沖突(如UART與CAN同時(shí)占用同一引腳)。
復(fù)用功能 引腳 原生功能 處理方式
UART3 GPIO0_C3、GPIO0_C4 CAN0(TX/RX) 禁用CAN0節(jié)點(diǎn)(status="disabled")
UART5_M1 GPIO1_PD2、GPIO1_PD3 LCDC(顯示控制器) 確保LCDC未占用該組引腳

3.1.3 定位Pinctrl配置文件

飛凌嵌入式RK3506的Pinctrl配置分散在以下兩個(gè)設(shè)備樹(shù)文件中,需根據(jù)引腳類型選擇對(duì)應(yīng)文件:

# 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節(jié)點(diǎn):

/* 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節(jié)點(diǎn):


};

3.1.4 設(shè)備樹(shù)修改(啟用UART,禁用原生功能)

修改通用設(shè)備樹(shù)文件OK3506-S-common.dtsi,主要涉及3處修改:

  1. 啟用UART3節(jié)點(diǎn),引用其Pinctrl配置
  2. 啟用UART5節(jié)點(diǎn),引用UART5_M1的Pinctrl配置
  3. 禁用CAN0節(jié)點(diǎn)(避免與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節(jié)點(diǎn) */
+&uart3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rm_io20_uart3_rx &rm_io19_uart3_tx>;
+ status = "okay";
+};
+
+/* 啟用UART5:引用UART5_M1的收發(fā)引腳組 */
+&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 {
修改設(shè)備樹(shù)后,需重新編譯內(nèi)核生成boot.img,或全編譯生成update.img,并燒錄到開(kāi)發(fā)板中。

4. 驗(yàn)證復(fù)用效果

燒錄新的鏡像文件后,通過(guò)以下步驟驗(yàn)證UART復(fù)用是否成功:

  1. 開(kāi)發(fā)板上電啟動(dòng),進(jìn)入終端(如SSH、串口終端)
  2. 執(zhí)行l(wèi)s /dev命令,查看是否生成UART對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)
  3. 確認(rèn)節(jié)點(diǎn)存在后,可通過(guò)screen或minicom工具測(cè)試UART通信

成功復(fù)用后,ls /dev輸出應(yīng)包含以下節(jié)點(diǎn):

root@ok3506-buildroot:/# ls /dev
...
ttyS2 # 原有UART2節(jié)點(diǎn)
ttyS3 # UART3對(duì)應(yīng)的節(jié)點(diǎn)(新增)
ttyS5 # UART5對(duì)應(yīng)的節(jié)點(diǎn)(新增)
...
root@ok3506-buildroot:/#
UART設(shè)備節(jié)點(diǎn)命名規(guī)則:ttySx,其中x為UART編號(hào)(UART3→ttyS3,UART5→ttyS5)。

相關(guān)產(chǎn)品 >

  • FET3506J-S核心板

    RK3506J是一款高性能的三核Cortex-A7應(yīng)用處理器,專為智能工業(yè)應(yīng)用而設(shè)計(jì)。飛凌嵌入式基于RK3506J設(shè)計(jì)的核心板,價(jià)格僅88元,滿載功耗僅0.7W,是一款值得推薦使用的工業(yè)級(jí)國(guó)產(chǎn)核心板,滿足電力、交通、工控等行業(yè)對(duì)國(guó)產(chǎn)化的要求。同時(shí)進(jìn)行了充分的可靠性測(cè)試,確保在工業(yè)環(huán)境的可靠運(yùn)行。


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

    RK3506J核心板|采用可插拔式板對(duì)板連接設(shè)計(jì),尺寸更小,既便于產(chǎn)品生產(chǎn)組裝,又方便后期維護(hù)升級(jí)。本核心板基于 Rockchip RK3506 處理器開(kāi)發(fā),通過(guò)飛凌嵌入式實(shí)驗(yàn)室嚴(yán)苛的工業(yè)環(huán)境測(cè)試,確保品質(zhì)穩(wěn)定可靠,且提供 10~15 年生命周期支持,保障供應(yīng)長(zhǎng)期穩(wěn)定。 了解詳情
    FET3506J-C核心板

推薦閱讀 換一批 換一批