IOMUX(引脚功能复用)是芯片厂商为高效利用有限硬件引脚资源而设计的关键技术,它允许单个物理引脚通过软件配置为多种不同的功能(如GPIO、UART、I2C等)。不同SoC芯片的配置方式各异,本文将以【RK3588】ELF 2开发板的复用PWM1为例,详细阐述从硬件查找到软件配置的完整流程。
在开始配置之前,首先需要了解【RK3588】ELF 2开发板的接口布局特点。开发板的40Pin 2.54mm连接器兼容树莓派40Pin连接器,集成了I2C、SPI、UART等常用通信接口及多路GPIO;而20Pin 2.54mm连接器则额外引出40Pin连接器未涵盖的接口或拓展接口,包括SARADC、PWM和GPIO等。
引脚选择原则:进行引脚复用时,应优先选择40Pin或20Pin连接器上的引脚,这类引脚位于开发板标准排针接口,无需额外焊接,接线更加便捷。
引脚复用表路径:ELF 2开发板资料包\05-硬件资料\05-4 管脚分配表
打开引脚复用表后,可以看到Alt0~Alt9列是引脚的核心复用功能区,这10列分别代表该引脚可配置的10种备选功能(部分未启用列可能为空)。在表格中搜索"PWM1",所有Alt列中包含"PWM1"的行都会被筛选出来。
虽然支持复用为PWM1功能的引脚很多,但结合"优先选择40Pin或20Pin连接器引脚"的原则,最终选定P2_79引脚:P2_79复用为PWM1_M2功能。
硬件原理图路径:ELF 2开发板资料包\05-硬件资料\05-0 PDF原理图
从硬件原理图可知,【RK3588】ELF 2开发板共使用4个连接器,其中"P2"代表第2号连接器。需要先定位到该连接器,再查找其79号引脚。
P2_79引脚对应开发板功能:SPI1--SPI4--CS(左侧SPI1-CS为3576开发板引脚功能,右侧SPI4-CS为358开发板引脚功能)

核心板的功能引脚通过连接器传输到底板,下面需要确认目标引脚在底板上的具体物理接口位置。
在原理图中搜索SPI1--SPI4--CS网络标号:
SPI1--SPI4--CS(P2_79引脚对应的网络标号)对应开发板P26接口的24引脚。

在完成硬件引脚确认后,接下来需要进行软件层面的配置工作,主要包括设备树中的IOMUX配置和设备节点配置。
确定引脚后,需要在设备树中配置IOMUX参数以确保引脚正确工作在PWM1模式。
打开以下文件,找到PWM1_M2相关定义,其中pwm1m2_pins节点已明确配置 GPIO1_A3(pwm1_m2)的复用,配置内容如下:
(kernel/arch/arm64/boot/dts/rockchip/rk3588s-pinctrl.dtsi)

完成IOMUX配置后,打开以下文件,在设备树中关闭原本的SPI功能,启用PWM1功能。
(kernel/arch/arm64/boot/dts/rockchip/elf2-3588-common.dtsi)

添加PWM1节点引用,指定引脚为pwm1m2_pins,启用节点功能。
配置完成后,需要重新编译内核以生成包含新配置的镜像文件。
执行编译命令,生成内核镜像:
elf@ubuntu:~/work/ELF2-linux-source$ ./build.sh kernel
编译完成后,将在kernel目录下生成boot.img内核镜像文件。
编译生成新的内核镜像后,下一步是将其烧录到开发板并进行验证。
将kernel目录下生成的boot.img内核镜像文件烧录到开发板。
开发板启动后,在 /dev 目录下会生成新的PWM节点,可通过以下命令验证:
root-buildroot:~# ls /sys/class/pwm/pwmchip0 pwmchip1 pwmchip2 pwmchip3
由于PWM驱动中生成的节点是依次向下枚举的,所以pwmchip0节点对应的是设备树中的PWM1,pwmchip1节点对应的是设备树中的PWM2,pwmchip2节点对应的是设备树中的PWM4,pwmchip3节点对应的是设备树中的PWM5。
确认设备节点生成后,需要进行完整的功能测试以确保PWM1正常工作。
将PWM接口的设备通过PWM引脚与板卡进行连接,上电之后PWM引脚状态为高电平。
设置PWM1为输出:
root-buildroot:~# echo 0 > /sys/class/pwm/pwmchip0/export
设置PWM周期,单位为ns。
root-buildroot:~# echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
设置极性。
root-buildroot:~# echo normal > /sys/class/pwm/pwmchip0/pwm0/polarity
设置PWM占空比为50%。
root-buildroot:~# echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
使能PWM功能。
root-buildroot:~# echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
失能PWM功能。
root-buildroot:~# echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
通过以上步骤,即可完成【RK3588】ELF 2开发板PWM1复用的配置与功能验证。
