IOMUX(引腳功能復(fù)用)是芯片廠商為高效利用有限硬件引腳資源而設(shè)計(jì)的關(guān)鍵技術(shù),它允許單個(gè)物理引腳通過軟件配置為多種不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方式各異,本文將以【RK3588】ELF 2開發(fā)板的UART3引腳為例,詳細(xì)闡述從硬件查找到軟件配置的完整流程。
?
一、引腳確認(rèn)
在開始配置之前,首先需要了解【RK3588】ELF 2開發(fā)板的接口布局特點(diǎn)。【RK3588】ELF 2開發(fā)板的40Pin 2.54mm連接器兼容樹莓派40Pin連接器,集成了I2C、SPI、UART等常用通信接口及多路GPIO;而20Pin 2.54mm連接器則額外引出40Pin連接器未涵蓋的接口或拓展接口,包括SARADC、PWM和GPIO等。
?
引腳選擇原則:進(jìn)行引腳復(fù)用時(shí),應(yīng)優(yōu)先選擇40Pin或20Pin連接器上的引腳,這類引腳位于開發(fā)板標(biāo)準(zhǔn)排針接口,無需額外焊接,接線更加便捷。
?
引腳復(fù)用表路徑:ELF 2開發(fā)板資料包\05-硬件資料\05-4 管腳分配表
?
打開引腳復(fù)用表后,可以看到Alt0~Alt9列是引腳的核心復(fù)用功能區(qū),這10列分別代表該引腳可配置的10種備選功能(部分未啟用列可能為空)。在表格中搜索"UART3",所有Alt列中包含"UART3"的行都會(huì)被篩選出來。
?
雖然支持復(fù)用為UART3功能的引腳很多,但結(jié)合"優(yōu)先選擇40Pin或20Pin連接器引腳"的原則,最終選定P4_46和P4_37引腳:其中P4_46復(fù)用為UART3_TX_M1功能,P4_37復(fù)用為UART3_RX_M1功能。

?
硬件原理圖路徑:ELF 2開發(fā)板資料包\05-硬件資料\05-0 PDF原理圖
?
從硬件原理圖可知,ELF 2開發(fā)板共使用4個(gè)連接器,其中"P4"代表第4號(hào)連接器。需要先定位到該連接器,再查找其46號(hào)和37號(hào)引腳。
?
P4_46引腳對(duì)應(yīng)開發(fā)板功能:GPIO2_D0--GPIO3_B5(左側(cè)GPIO2_D0為3576開發(fā)板引腳功能,右側(cè)GPIO3_B5為3588芯片引腳功能)。
?
P4_37引腳對(duì)應(yīng)開發(fā)板功能:GPIO2_D7--GPIO3_B6(左側(cè)GPIO2_D7為3576開發(fā)板引腳功能,右側(cè)GPIO3_B6為3588芯片引腳功能)。

?
核心板的功能引腳通過連接器傳輸?shù)降装?,下面需要確認(rèn)目標(biāo)引腳在底板上的具體物理接口位置。
?
在原理圖中分別搜索GPIO2_D0--GPIO3_B5和GPIO2_D7--GPIO3_B6網(wǎng)絡(luò)標(biāo)號(hào):
GPIO2_D0--GPIO3_B5(P4_46引腳對(duì)應(yīng)的網(wǎng)絡(luò)標(biāo)號(hào))對(duì)應(yīng)開發(fā)板P26接口的11引腳。
GPIO2_D7--GPIO3_B6(P4_37引腳對(duì)應(yīng)的網(wǎng)絡(luò)標(biāo)號(hào))對(duì)應(yīng)開發(fā)板P26接口的29引腳。

?
二、源碼適配
在完成硬件引腳確認(rèn)后,接下來需要進(jìn)行軟件層面的配置工作,主要包括設(shè)備樹中的IOMUX配置和設(shè)備節(jié)點(diǎn)配置。
?
確定引腳后,需要在設(shè)備樹中配置IOMUX參數(shù)以確保引腳正確工作在UART3模式。打開以下文件,找到UART3相關(guān)定義,其中uart3m1_xfer節(jié)點(diǎn)已明確配置GPIO3_B6(UART3_RX_M1)和GPIO3_B5(UART3_TX_M1)的復(fù)用參數(shù),配置內(nèi)容如下:
(kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi)

?
完成IOMUX配置后,需要在設(shè)備樹中啟用UART3設(shè)備節(jié)點(diǎn)。打開以下文件,添加UART3節(jié)點(diǎn)引用,指定引腳配置為uart3m1_xfer,啟用節(jié)點(diǎn)功能,配置如下:
(kernel/arch/arm64/boot/dts/rockchip/elf2-3588-common.dtsi)

?
配置完成后,需要重新編譯內(nèi)核以生成包含新配置的鏡像文件。執(zhí)行編譯命令,生成內(nèi)核鏡像:
elf@ubuntu:~/work/ELF2-linux-source$?./build.sh kernel
編譯完成后,將在kernel目錄下生成boot.img內(nèi)核鏡像文件。
?
編譯生成新的內(nèi)核鏡像后,下一步是將其燒錄到開發(fā)板并進(jìn)行驗(yàn)證。將kernel目錄下生成的boot.img內(nèi)核鏡像文件燒錄到開發(fā)板。
?
開發(fā)板啟動(dòng)后,在/dev目錄下會(huì)生成UART3對(duì)應(yīng)的設(shè)備節(jié)點(diǎn)ttyS3,可通過以下命令驗(yàn)證:
root@elf2-buildroot:~#?ls?/dev/ttyS3

確認(rèn)設(shè)備節(jié)點(diǎn)生成后,需要進(jìn)行完整的功能測(cè)試以確保UART3正常工作。
?
注意事項(xiàng):UART引腳電平范圍為0~3.3V,嚴(yán)禁接入超過3.3V的電壓,避免硬件損壞。
?
測(cè)試工具路徑:ELF 2開發(fā)板資料包\06-常用工具\(yùn)06-4 測(cè)試工具\(yùn)SerialTool1.4.0a_Win32_Setup.zip
?
硬件連接:通過TTL轉(zhuǎn)USB模塊連接開發(fā)板與電腦,按照模塊引腳定義對(duì)應(yīng)連接 UART3_TX、UART3_RX 、VCC以及GND。
?
TTL轉(zhuǎn)USB模塊與【RK3588】ELF 2開發(fā)板硬件連接如圖:

?
開發(fā)板上電后,在電腦設(shè)備管理器中查看TTL轉(zhuǎn)USB模塊識(shí)別的COM口(示例為 COM26,以實(shí)際識(shí)別準(zhǔn))。

打開電腦串口工具,選擇端口COM26、設(shè)置波特率115200,點(diǎn)擊藍(lán)色端口設(shè)置圖標(biāo)進(jìn)行設(shè)置,8位數(shù)據(jù)位、1位停止位、無校驗(yàn)、無流控制,點(diǎn)擊OK,點(diǎn)擊綠色圖標(biāo)打開串口。

?
在開發(fā)板終端執(zhí)行以下命令,自動(dòng)發(fā)送測(cè)試數(shù)據(jù) “aabbccddeeff”:
root@elf2-buildroot:~# cmddemo_serialport ttyS3 -o -b?115200?-t aabbccddeeff?1baudrate=115200,data_bit=8,stop_bit=1,check='O'set?done![nwrite=12] aabbccddeeff ? ? ? //發(fā)送的數(shù)據(jù)
命令執(zhí)行后,串口工具會(huì)持續(xù)接收該測(cè)試數(shù)據(jù),可在接收區(qū)查看結(jié)果。

?
在開發(fā)板終端執(zhí)行以下命令,啟動(dòng)接收模式:
root@elf2-buildroot:~# cmddemo_serialport ttyS3 -b 115200
在串口工具的發(fā)送區(qū)輸入測(cè)試數(shù)據(jù)(示例為 “abcdefg”),點(diǎn)擊發(fā)送:

?
開發(fā)板終端會(huì)顯示接收到的數(shù)據(jù):
root@elf2-buildroot:~baudrate=115200,data_bit=8,stop_bit=1,check='N'set?done![] abcdefg ? ? ? ??//接收到的數(shù)據(jù)
?
通過以上步驟,即可完成【RK3588】ELF 2開發(fā)板上UART3引腳復(fù)用的配置與功能驗(yàn)證。這一流程確保了硬件資源得到正確配置,軟件功能正常運(yùn)作,為后續(xù)的串口通信應(yīng)用奠定了堅(jiān)實(shí)基礎(chǔ)。
?
