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

硬件原理圖路徑:ELF 2開發(fā)板資料包\05-硬件資料\05-0 PDF原理圖
?
從硬件原理圖可知,【RK3588】ELF 2開發(fā)板共使用4個連接器,其中"P2"代表第2號連接器。需要先定位到該連接器,再查找其31號引腳。
?
P2_31引腳對應開發(fā)板功能:I2C5--I2C7--SCL(左側(cè)I2C5為3576開發(fā)板引腳功能,右側(cè)I2C7為ELF2板卡引腳功能)。

核心板的功能引腳通過連接器傳輸?shù)降装?,下面需要確認目標引腳在底板上的具體物理接口位置。
?
在原理圖中分別搜索I2C5--I2C7--SCL網(wǎng)絡標號:
I2C5--I2C7--SCL(P2_31引腳對應的網(wǎng)絡標號)對應開發(fā)板P26接口的32引腳。

在完成硬件引腳確認后,接下來需要進行軟件層面的配置工作,主要包括設備樹中的IOMUX配置和設備節(jié)點配置。
?
如果引腳不進行其他功能的復用,引腳默認就是GPIO功能。
?
P2_31引腳開發(fā)板功能為I2C7,需要在設備樹中關閉i2c7節(jié)點,關閉I2C7功能之后默認就是GPIO功能。
?
打開以下文件 ,關閉i2c7節(jié)點引用。
(kernel/arch/arm64/boot/dts/rockchip/elf2-3588-common.dtsi)
&i2c7 {? ? ? ? status =?"disabled";};

配置完成后,需要重新編譯內(nèi)核以生成包含新配置的鏡像文件。
執(zhí)行編譯命令,生成內(nèi)核鏡像:
elf@ubuntu:~/work/ELF2-linux-source$?./build.sh kernel
?
編譯完成后,將在kernel目錄下生成boot.img內(nèi)核鏡像文件。
?
編譯生成新的內(nèi)核鏡像后,需將其燒錄到開發(fā)板并完成基礎驗證。首先將kernel目錄下生成的boot.img內(nèi)核鏡像文件燒錄到開發(fā)板。開發(fā)板啟動后,/dev目錄下I2C7對應的設備節(jié)點i2c-7已經(jīng)不存在。
?
注意:GPIO引腳的電平范圍為0~3.3V,嚴禁對此引腳接入超過3.3V的電壓。
?
GPIO的命名規(guī)則為GPIOn_xy其中x的表現(xiàn)形式有ABCD四種。在GPIO計算編號的過程中,A對應1,B對應2,C對應3,D對應4。
?
計算公式為:

?
以GPIO1_D0為例,計算其GPIO編號。
?
?GPIO1_D0=1×32+(4?1)×8+0=56
?
將GPIO引腳配置為輸出模式后,在完成相關設置操作后,可使用萬用表測量該引腳的電壓狀態(tài),以驗證GPIO輸出模式是否配置成功。
root-buildroot:~# echo?56?>?/sys/class/gpio/export ? ??//系統(tǒng)需要導出控制的GPIO引腳編號root-buildroot:~# echo out?>?/sys/class/gpio/gpio56/direction //設置為輸出root-buildroot:~# echo?1?>?/sys/class/gpio/gpio56/value //設置IO輸出高電平root-buildroot:~# echo?0?>?/sys/class/gpio/gpio56/value //設置IO輸出低電平root-buildroot:~# echo?56?>?/sys/class/gpio/unexport ? ?//系統(tǒng)取消導出
?
將GPIO引腳配置為輸入模式后,通過向該引腳施加高電平或低電平信號,隨后可以使用cat命令讀取并查看該引腳的當前電平狀態(tài)。
root-buildroot:~# echo?56?>?/sys/class/gpio/export ? ??//系統(tǒng)需要導出控制的GPIO引腳編號root-buildroot:~# echo?in?>?/sys/class/gpio/gpio56/direction //設置為輸出root-buildroot:~# cat?/sys/class/gpio/gpio56/value //查看引腳狀態(tài)root-buildroot:~# echo?56?>?/sys/class/gpio/unexport ? ?//系統(tǒng)取消導出
?
通過上述步驟操作,即可完成【RK3588】ELF 2開發(fā)板的GPIO功能復用配置。本文旨在為各位嵌入式開發(fā)愛好者提供切實可行的操作參考,若在實際調(diào)試過程中遇到任何問題,歡迎隨時交流探討。
