IOMUX(引腳功能復用)是一項關鍵硬件設計技術,旨在幫助芯片廠商更高效地利用有限的引腳資源。它借助內部寄存器,允許開發者通過軟件將同一物理引腳靈活配置為多種不同功能,例如GPIO、UART或I2C等。由于此項配置的具體實現因SoC平臺而異,本文特以【RK3588】ELF 2開發板上的I2C6引腳為例,系統說明從硬件規格查詢到軟件驅動配置的完整步驟。
1.引腳確認
在開始配置之前,首先需要了解【RK3588】ELF 2開發板的接口布局特點。ELF 2開發板的40Pin 2.54mm連接器兼容樹莓派40Pin連接器,集成了I2C、SPI、UART等常用通信接口及多路GPIO;而20Pin 2.54mm連接器則額外引出40Pin連接器未涵蓋的接口或拓展接口,包括SARADC、PWM和GPIO等。
引腳選擇原則:進行引腳復用時,應優先選擇40Pin或20Pin連接器上的引腳,這類引腳位于開發板標準排針接口,無需額外焊接,接線更加便捷。
1.1查看引腳復用表
引腳復用表路徑:ELF 2開發板資料包\05-硬件資料\05-4 管腳分配表
打開引腳復用表后,可以看到Alt0~Alt9列是引腳的核心復用功能區,這10列分別代表該引腳可配置的10種備選功能(部分未啟用列可能為空)。在表格中搜索"I2C6",所有Alt列中包含"I2C6"的行都會被篩選出來。
雖然支持復用為I2C6功能的引腳很多,但結合"優先選擇40Pin或20Pin連接器引腳"的原則,最終選定P4_38和P4_40引腳:其中P4_38復用為I2C6_SCL_M4功能,P4_40復用為I2C6_SDA_M4功能。

1.2匹配開發板引腳
硬件原理圖路徑:ELF 2開發板資料包\05-硬件資料\05-0 PDF原理圖
從硬件原理圖可知,【RK3588】ELF 2開發板共使用4個連接器,其中"P4"代表第4號連接器。需要先定位到該連接器,再查找其38號和40號引腳。
P4_38引腳對應開發板功能:GPIO2_C4--GPIO3_A1(左側GPIO2_C4為3576開發板引腳功能,右側GPIO3_A1為3588芯片引腳功能)
P4_40引腳對應開發板功能:GPIO2_C3--GPIO3_A0(左側GPIO2_C3為3576開發板引腳功能,右側GPIO3_A0為3588芯片引腳功能)

1.3定位開發板物理位置
核心板的功能引腳通過連接器傳輸到底板,下面需要確認目標引腳在底板上的具體物理接口位置。
在原理圖中分別搜索GPIO2_C4--GPIO3_A1和GPIO2_C3--GPIO3_A0網絡標號:
GPIO2_C4--GPIO3_A1(P4_38引腳對應的網絡標號)對應開發板P26接口的32引腳。
GPIO2_C3--GPIO3_A0(P4_40引腳對應的網絡標號)對應開發板P26接口的35引腳。

2.源碼適配
在完成硬件引腳確認后,接下來需要進行軟件層面的配置工作,主要包括設備樹中的IOMUX配置和設備節點配置。
2.1IOMUX配置
確定引腳后,需要在設備樹中配置IOMUX參數以確保引腳正確工作在I2C6模式。打開以下文件:
kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi
找到UART3相關定義,其中uart3m1_xfer節點已明確配置GPIO3_A1(I2C6_SCL_M4)和GPIO3_A0(I2C6_SDA_M4)的復用參數,配置內容如下:

2.2設備節點配置
完成IOMUX配置后,需要在設備樹中啟用I2C6設備節點。打開以下文字文件 :
kernel/arch/arm64/boot/dts/rockchip/elf2-3588-common.dtsi
添加I2C6節點引用,指定引腳配置為i2c6m4_xfer,啟用節點功能,并在該節點下添加光線傳感器設備,配置如下:
&i2c6 { status = "okay"; pinctrl-0 = <&i2c6m4_xfer>; bh1750:bh1750@23 { compatible = "elfboard,bh1750"; reg = <0x23>; status = "okay"; }; };

2.3編譯
配置完成后,需要重新編譯內核以生成包含新配置的鏡像文件。
執行編譯命令,生成內核鏡像:
elf@ubuntu:~/work/ELF2-linux-source$./build.sh kernel
編譯完成后,將在 kernel 目錄下生成 boot.img 內核鏡像文件。
3.燒錄與驗證
編譯生成新的內核鏡像后,需將其燒錄到開發板并完成基礎驗證。
1.將kernel目錄下生成的boot.img內核鏡像文件燒錄到開發板。
2.開發板啟動后,/dev目錄會自動生成I2C6對應的設備節點i2c-6,通過以下命令驗證節點是否存在:
root@elf2-buildroot:~#ls/dev/i2c-*

4.功能測試
4.1測試準備
1.測試驅動、測試應用下載
https://forlinx-book.yuque.com/umxagc/vzgvcx/xoclfmmeispbak3h
2.硬件引腳連接(左邊為光線傳感器引腳,右邊為【RK3588】ELF 2開發板引腳):
SDA-------I2C6--SDA(P26的35引腳)
SCL--------I2C6--SCL(P26的32引腳)
VCC-------3.3V(P26的1引腳)
GND-------GND(P26的6引腳)
光線傳感器與【RK3588】ELF 2開發板連接如圖:

4.2編譯驅動模塊
將驅動文件(bh1750.c、Makefile)、應用文件(bh1750app.c)復制到開發環境的/home/elf/work路徑下。
4.2.1修改Makefile
配置環境變量,在終端執行以下命令,添加交叉編譯工具鏈路徑:
elf@ubuntu:~/work$exportPATH=$PATH:/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/usr/bin
打開Makefile文件進行如下修改:

將1處替換為Linux kernel所在路徑。
將2、3處替換為交叉編譯工具前綴/home/elf/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/aarch64-linux-。
4.2.2編譯驅動
在/home/elf/work目錄下執行make命令,生成bh1750.ko驅動模塊:
elf@ubuntu:~/work$make

4.3編譯測試APP
執行交叉編譯命令,生成可執行文件:
elf@ubuntu:~/work$ aarch64-linux-gcc bh1750app.c -o bh1750app elf@ubuntu:~/work$ file bh1750app

通過file命令確認應用為ARM架構(支持開發板運行)。
4.4開發板測試
將bh1750.ko驅動模塊和bh1750app應用通過U盤拷貝至開發板/root目錄。
執行以下命令加載驅動,生成設備節點/dev/bh1750:
root@elf2-buildroot:~# insmod bh1750.ko [ 231.934533] bh1750: loading out-of-tree module taints kernel. [ 232.139143] rk3x-i2c fec80000.i2c: timeout, ipd: 0x90, state: 3 root@elf2-buildroot:~# [ 232.139288] rk3x-i2c fec80000.i2c: SCL hold by slave, check your device. root@elf2-buildroot:~# ls /dev/bh1750 /dev/bh1750
運行測試應用,執行應用程序讀取光線傳感器數值:
root@elf2-buildroot:~# ./bh1750app /dev/bh1750

通過上述步驟操作,即可完成【RK3588】ELF 2開發板的I2C功能復用配置。本文旨在為各位嵌入式開發愛好者提供切實可行的操作參考,若在實際調試過程中遇到任何問題,歡迎隨時交流探討。
-
單片機
+關注
關注
6074文章
45368瀏覽量
664674 -
嵌入式
+關注
關注
5189文章
20192瀏覽量
329565 -
開發板
+關注
關注
26文章
6161瀏覽量
114184
發布評論請先 登錄
ElfBoard技術貼|如何在【RK3588】ELF 2開發板上進行根系統的定制
技術貼|【RK3588】ELF 2開發板如何添加exFAT和NTFS文件系統格式
ElfBoard技術貼|如何在【RK3588】ELF 2開發板上進行UART引腳復用配置
RK3588 EVB開發板原理圖講解【八】 RK3588 power Tree
RK3588 EVB 開發板介紹
rk3588有哪些開發板?
ElfBoard技術貼|【RK3588】ELF 2開發板開機自啟動詳解
ElfBoard技術貼|如何在【RK3588】ELF 2開發板用戶空間更換開機Logo

ElfBoard技術貼|如何在【RK3588】ELF 2開發板實現I2C功能復用
評論