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文章
45333浏览量
663277 -
嵌入式
+关注
关注
5186文章
20140浏览量
328629 -
开发板
+关注
关注
25文章
6116浏览量
113121
发布评论请先 登录
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功能复用
评论