/ ai资讯

ElfBoard技术贴|如何在【RK3588】ELF 2开发板实现I2C功能复用

发布时间:2025-12-05 02:46:01

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功能复用配置。本文旨在为各位嵌入式开发爱好者提供切实可行的操作参考,若在实际调试过程中遇到任何问题,欢迎随时交流探讨。

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com