PWM
芯片支持列表
芯片名称 | 内核版本 |
---|---|
RK3036 | Linux kernel 4.4 及以上内核 |
RK312X/PX3SE | Linux kernel 4.4 及以上内核 |
RK3288 | Linux kernel 4.4 及以上内核 |
RK322X/RK312XH | Linux kernel 4.4 及以上内核 |
RK3308 | Linux kernel 4.4 及以上内核 |
RK322XH/RK332X | Linux kernel 4.4 及以上内核 |
RK3326/PX30 | Linux kernel 4.4 及以上内核 |
RK3368/PX5 | Linux kernel 4.4 及以上内核 |
RK3399 | Linux kernel 4.4 及以上内核 |
RK1808 | Linux kernel 4.4 及以上内核 |
RV1109/RV1126 | Linux kernel 4.19 及以上内核 |
RK356X | Linux kernel 4.19 及以上内核 |
RK3588 | Linux kernel 5.10 及以上内核 |
RV1103/RV1106 | Linux kernel 5.10 及以上内核 |
RK3528 | Linux kernel 4.19 及以上内核 |
RK3562 | Linux kernel 5.10 及以上内核 |
RK3576 | Linux kernel 6.1 及以上内核 |
RV1103B | Linux kernel 5.10 及以上内核 |
RK3506 | Linux kernel 6.1 及以上内核 |
前言
脉宽调制(PWM,Pulse Width Modulation)功能在嵌入式系统中是非常常见的,它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于从测量、通信到功率控制与变换的许多领域中。本文主要介绍 Rockchip 平台 PWM 的基本特性、使用方法和常见问题分析。
读者对象
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
- 硬件开发工程师
1. 软件驱动
1.1 Kernel 驱动
1.1.1 驱动目录
-
Linux-5.10 及以下版本:
drivers/pwm/pwm-rockchip.c
-
Linux-6.1 及以上版本:
drivers/pwm/pwm-rockchip.c
drivers/pwm/pwm-rockchip-test.c
-
Linux-6.1 开始支持了 PWM v4 驱动,Linux-5.10 及以下支持的 PWM v1-v3 共用 v1 的接口,下文中统称为 PWM v1。
-
Linux-6.1 新增了 test 驱动用于测试功能和定位问题,同时也作为 PWM 各功能的应用示例,需要打开
CONFIG_PWM_ROCKCHIP_TEST
以使用。
1.1.2 DTS 配置
在 DTS 中,PWM 节点通常被别的驱动所引用,在其中通过 PWM 框架提供的各接口来配置和使用 PWM,本节以常见的背光驱动为例。
- PWM v1:
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm5 0 25000 0>;
......
}; - PWM v4:
backlight: backlight {
compatible = "pwm-backlight";
pwms = <&pwm1_6ch_1 0 25000 0>;
......
};
PWM v1 和 PWM v4 节点的命名方式有所不同:
- PWM v1 为
pwmX
,实际对应的控制器 id 为X / 4
,通道 id 为X % 4
。 - PWM v4 为
pwmX_Ych_Z
,X
表示控制器 id ,Y
表示当前控制器支持的通道总数,Z
表示通道 id 。
Linux-4.4 及以上内核 PWM 节点支持的参数个数从 Linux-3.10 的 2 个提升到 3 个,具体个数与 PWM 节点的 #pwm-cells
属性相对应,参考文档 Documentation/devicetree/bindings/pwm/pwm.txt
中有详细的说明,此处仅对各参数作简要说明:
- 参数 1,表示 index (per-chip index of the PWM to request),值固定为 0。Rockchip 平台的每个 PWM channel 对应一个 PWM device,且每个 device 只有一个 chip。
- 参数 2,表示 PWM 输出波形的 period,单位为 ns。示例中的 25000 ns 换算为频率即为 40KHz。
- 参数 3,表示可选参数 polarity,默认为 0,若要翻转极性则配为
PWM_POLARITY_INVERTED
。
2. 功能支持
特性 | RK3036 | RK312X/PX3SE | RK3288 | RK322X/RK312XH | RK3308 | RK322XH/RK332X | RK3326/PX30 | RK3368/PX5 | RK3399 | RK1808 | RV1109/RV1126 | RK356X | RK3588 | RV1103/RV1106 | RK3528 | RK3562 | RK3576 | RV1103B | RK3506 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PWM version | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v2 | v3 | v3 | v3 | v4 | v4 | v4 |
channel number | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 4 | 2/6/8 | 4/4/4 | 4/8 |
continous | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
oneshot | √ |