RK3568 PWM驱动基础知识
文章目录
- RK3568 PWM 驱动基础知识
- 一、PWM 基础原理
- 二、RK3568 的 PWM 驱动支持
- 三、设备树节点讲解
- 四、PWM 的使用流程
- 五、总结
RK3568 PWM 驱动基础知识
在嵌入式系统中,PWM(Pulse Width Modulation,脉冲宽度调制)是一种常用的外设功能,广泛应用于 LED 调光、电机调速、蜂鸣器驱动、背光控制 等场景。对于 RK3568 这类 SoC,其内核驱动和设备树配置提供了灵活的 PWM 使用方式。本文将从 PWM 基础原理、RK3568 驱动支持以及设备树节点配置三方面进行讲解。
一、PWM 基础原理
PWM 的核心思想是通过 固定周期 的方波信号,在每个周期内调节高电平时间(占空比,Duty Cycle),以实现对平均电压或能量的控制。关键参数包括:
- 频率 (Frequency):每秒钟 PWM 波形重复的次数,通常决定了控制响应速度或音调。
- 占空比 (Duty Cycle):高电平持续时间占整个周期的比例,决定了功率输出。
- 相位 (Phase):不同通道的同步或偏移,通常在多路控制时使用。
二、RK3568 的 PWM 驱动支持
RK3568 SoC 内置多路 PWM 控制器,每一路都可以独立输出不同频率和占空比的 PWM 信号。Linux 内核为其提供了统一的 pwm-rockchip 驱动,结合设备树描述,实现了从内核到用户空间的灵活使用。
用户空间常见操作路径:
- 内核 PWM 子系统:通过
pwmchipX
暴露给 sysfs 或 pwm framework。 - 驱动绑定设备:背光、风扇、电机等外设驱动可以直接消费 PWM 信号。
三、设备树节点讲解
打开rk3568.dtsi文件:
以下为 RK3568 的 PWM15 节点示例:
pwm15: pwm@fe700030 {compatible = "rockchip,rk3568-pwm", "rockchip,rk3328-pwm";reg = <0x0 0xfe700030 0x0 0x10>;interrupts = <GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>,<GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;#pwm-cells = <3>;pinctrl-names = "active";pinctrl-0 = <&pwm15m0_pins>;clocks = <&cru CLK_PWM3>, <&cru PCLK_PWM3>;clock-names = "pwm", "pclk";status = "disabled";
};
逐项解析如下:
-
节点名与地址
pwm15: pwm@fe700030
表示这是 PWM 控制器 15,基地址为0xfe700030
,对应 RK3568 的寄存器映射。
-
compatible
"rockchip,rk3568-pwm", "rockchip,rk3328-pwm"
匹配的驱动类型,保证驱动程序可以支持多个 SoC 的 PWM 控制器。
-
reg
<0x0 0xfe700030 0x0 0x10>
描述 PWM15 寄存器的物理地址和长度(0x10 字节)。
-
interrupts
<GIC_SPI 85 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>
定义 PWM 中断号,用于事件处理(如溢出或计数完成)。
-
#pwm-cells = <3>
- 表示此 PWM 控制器的调用参数数量为 3,格式一般为:
<channel period_ns duty_ns>
,分别对应通道、周期和占空比。
- 表示此 PWM 控制器的调用参数数量为 3,格式一般为:
-
pinctrl-names / pinctrl-0
- 指定 PWM 输出所使用的管脚复用配置,
&pwm15m0_pins
在pinctrl
子系统中定义,决定信号输出的具体引脚。
- 指定 PWM 输出所使用的管脚复用配置,
-
clocks / clock-names
<&cru CLK_PWM3>, <&cru PCLK_PWM3>
定义此 PWM 的工作时钟和 APB 接口时钟来源,保证其正常运行。
-
status
"disabled"
表示默认关闭。若要启用,需要改为"okay"
。
四、PWM 的使用流程
- 设备树配置:启用对应 PWM 节点。
- 内核加载驱动:pwm-rockchip 驱动注册。
- 用户空间调用:通过 sysfs 或者消费者驱动(如背光驱动)使用。
例如在 sysfs 下,可能路径为:
/sys/class/pwm/pwmchipX
可通过 echo
写入方式配置周期和占空比,实现 LED 调光或电机控制。
五、总结
RK3568 提供了灵活的 PWM 外设资源,结合 Linux PWM 子系统,开发者可以快速实现对外设的精确控制。设备树中的 PWM 节点主要完成硬件资源描述,包括 寄存器地址、中断号、时钟、管脚复用 等信息。理解这些配置有助于开发者在调试和定制化开发时快速定位问题。