IOMUX引脚功能复用是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术它允许单个物理引脚通过软件配置为多种不同的功能如GPIO、UART、I2C等。不同SoC芯片的配置方式各异本文将以RK3506平台的复用I2C1为例详细阐述从硬件查找到软件配置的完整流程。1. 引脚确认在开始配置之前首先需要了解ELF-RK3506开发板的接口布局特点。ELF-RK3506开发板配备两组40Pin排针其中一组兼容树莓派40Pin接口集成了I2C、SPI、UART等常用通信接口及多路GPIO另一组则引出额外的IO排针可复用为LCD、DSMC等功能接口。引脚选择原则进行引脚复用时应优先选择40Pin排针上的引脚这类引脚位于开发板标准排针接口无需额外焊接接线更加便捷。1.1. 查看引脚复用表引脚复用表路径ELF-RK3506开发板资料包\04-硬件资料\1-ELF-RK3506 引脚复用对照表-20251121在引脚复用表中通过查看 Alt0~Alt8 列可了解各引脚的可选功能RK3506B 采用矩阵 IO 设计将98 个功能信号灵活映射至 32 个 RM_IO 引脚。针对 I2C1 功能从“RM_IO 功能”列表中找到 I2C1_SCL、I2C1_SDA 信号后在支持 RM_IO 的引脚中遵循“优先选用 40Pin 排针引脚”的布局原则最终选定将 I2C1_SCL、I2C1_SDA 映射至 RM_IO24、RM_IO25对应连接器引脚号 44、45。1.2. 匹配开发板引脚硬件原理图路径ELF-RK3506开发板资料包\04-硬件资料\00- PDF原理图从硬件原理图可知连接器44、45引脚号对应开发板功能GPIO1_B1、GPIO1_B2。1.3. 定位开发板物理位置核心板的功能引脚通过连接器传输到底板下面需要确认目标引脚在底板上的具体物理接口位置。在原理图中搜索GPIO1_B1、GPIO1_B2网络标号对应开发板P14排针的引脚25、22。2. 源码适配在完成硬件引脚确认后接下来需要进行软件层面的配置工作主要包括设备树中的IOMUX配置和设备节点配置。2.1. IOMUX配置确定引脚后需要在设备树中配置IOMUX参数以确保引脚正确工作在I2C1模式。打开文件 kernel/arch/arm/boot/dts/rk3506-pinctrl-rmio.dtsi找到I2C1相关定义可以看到rm_io24_i2c1_scl节点描述了 GPIO1_B1 复用成I2C1_SCL、rm_io25_i2c1_sda节点描述了 GPIO1_B2 复用成I2C1_SDA。2.2. 设备节点配置在设备树文件 kernel/arch/arm/boot/dts/rk3502.dtsi 中已经定义好 3 路 I2C 信号的相关节点和使用的引脚。打开 kernel/arch/arm/boot/dts/elf-3506-common.dtsi 添加相关节点引用rm_io24_i2c1_scl、rm_io25_i2c1_sda节点并将状态设为“okay”。i2c1 { clock-frequency 400000; pinctrl-names default; pinctrl-0 rm_io24_i2c1_scl rm_io25_i2c1_sda; status okay; };2.3. 编译配置完成后需要重新编译内核以生成包含新配置的镜像文件。执行编译命令生成内核镜像elfubuntu:~/work/ELF-RK3506-linux-source$ ./build.sh kernel编译完成后将在 kernel 目录下生成 boot.img 内核镜像文件。3. 烧录与验证编译生成新的内核镜像后下一步是将其烧录到开发板并进行验证。将 kernel 目录下生成的 boot.img 内核镜像文件烧录到开发板。开发板启动后/dev 目录会自动生成 I2C1 对应的设备节点 i2c-1通过以下命令验证节点是否存在rootelf3506-buildroot:~# ls /dev/i2c-*
飞凌精灵(ElfBoard)技术贴|如何在ELF-RK3506开发板实现I2C功能的复用
发布时间:2026/6/5 11:48:32
IOMUX引脚功能复用是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术它允许单个物理引脚通过软件配置为多种不同的功能如GPIO、UART、I2C等。不同SoC芯片的配置方式各异本文将以RK3506平台的复用I2C1为例详细阐述从硬件查找到软件配置的完整流程。1. 引脚确认在开始配置之前首先需要了解ELF-RK3506开发板的接口布局特点。ELF-RK3506开发板配备两组40Pin排针其中一组兼容树莓派40Pin接口集成了I2C、SPI、UART等常用通信接口及多路GPIO另一组则引出额外的IO排针可复用为LCD、DSMC等功能接口。引脚选择原则进行引脚复用时应优先选择40Pin排针上的引脚这类引脚位于开发板标准排针接口无需额外焊接接线更加便捷。1.1. 查看引脚复用表引脚复用表路径ELF-RK3506开发板资料包\04-硬件资料\1-ELF-RK3506 引脚复用对照表-20251121在引脚复用表中通过查看 Alt0~Alt8 列可了解各引脚的可选功能RK3506B 采用矩阵 IO 设计将98 个功能信号灵活映射至 32 个 RM_IO 引脚。针对 I2C1 功能从“RM_IO 功能”列表中找到 I2C1_SCL、I2C1_SDA 信号后在支持 RM_IO 的引脚中遵循“优先选用 40Pin 排针引脚”的布局原则最终选定将 I2C1_SCL、I2C1_SDA 映射至 RM_IO24、RM_IO25对应连接器引脚号 44、45。1.2. 匹配开发板引脚硬件原理图路径ELF-RK3506开发板资料包\04-硬件资料\00- PDF原理图从硬件原理图可知连接器44、45引脚号对应开发板功能GPIO1_B1、GPIO1_B2。1.3. 定位开发板物理位置核心板的功能引脚通过连接器传输到底板下面需要确认目标引脚在底板上的具体物理接口位置。在原理图中搜索GPIO1_B1、GPIO1_B2网络标号对应开发板P14排针的引脚25、22。2. 源码适配在完成硬件引脚确认后接下来需要进行软件层面的配置工作主要包括设备树中的IOMUX配置和设备节点配置。2.1. IOMUX配置确定引脚后需要在设备树中配置IOMUX参数以确保引脚正确工作在I2C1模式。打开文件 kernel/arch/arm/boot/dts/rk3506-pinctrl-rmio.dtsi找到I2C1相关定义可以看到rm_io24_i2c1_scl节点描述了 GPIO1_B1 复用成I2C1_SCL、rm_io25_i2c1_sda节点描述了 GPIO1_B2 复用成I2C1_SDA。2.2. 设备节点配置在设备树文件 kernel/arch/arm/boot/dts/rk3502.dtsi 中已经定义好 3 路 I2C 信号的相关节点和使用的引脚。打开 kernel/arch/arm/boot/dts/elf-3506-common.dtsi 添加相关节点引用rm_io24_i2c1_scl、rm_io25_i2c1_sda节点并将状态设为“okay”。i2c1 { clock-frequency 400000; pinctrl-names default; pinctrl-0 rm_io24_i2c1_scl rm_io25_i2c1_sda; status okay; };2.3. 编译配置完成后需要重新编译内核以生成包含新配置的镜像文件。执行编译命令生成内核镜像elfubuntu:~/work/ELF-RK3506-linux-source$ ./build.sh kernel编译完成后将在 kernel 目录下生成 boot.img 内核镜像文件。3. 烧录与验证编译生成新的内核镜像后下一步是将其烧录到开发板并进行验证。将 kernel 目录下生成的 boot.img 内核镜像文件烧录到开发板。开发板启动后/dev 目录会自动生成 I2C1 对应的设备节点 i2c-1通过以下命令验证节点是否存在rootelf3506-buildroot:~# ls /dev/i2c-*