几年前,我使用 pigpio 库为 Raspberry Pi (RPi3) 编写了一个简短的 C 程序,将红外信号发送到加热系统。仍在使用。载波频率为 450 kHz,对于 RPi 来说相当快。因此,我使用硬件 PWM,只需要关闭和打开 PWM(即占空比分别为 0% 和 50%)。
自从最新的 RPiOS(“Raspbian”)更新后,此功能不再有效;可能是因为 Pigpio 库使用过时的 sysfs 接口。我可以在命令行上确认 sysfs 不再受支持(而相同的命令适用于另一个尚未升级的 RPi):
~# uname --kernel-name --kernel-release --kernel-version
Linux 6.6.31+rpt-rpi-v7 #1 SMP Raspbian 1:6.6.31-1+rpt1 (2024-05-29)
~# echo 23 > /sys/class/gpio/export
-bash: echo: write error: Invalid argument
我的问题:是否有一个库支持硬件PWM并使用字符设备接口? pigpio 和 RPi.GPIO(对于 Python)似乎使用 sysfs。 libgpiod和wiringPi使用字符设备接口,但我发现不支持硬件PWM。库bcm2835仅支持RPi1和RPi2。
简短回答 - 否。
GPIO 字符设备接口严格来说就是 - GPIO。 PWM 是一个不同的内核子系统,具有完全独立的接口。
虽然 GPIO sysfs 接口已被弃用,取而代之的是字符设备接口,但对于 PWM,您仍然使用 PWM sysfs 接口。
有关于添加 PWM 字符设备/ioctl 接口的 talk,但这甚至还没有进入主线内核(截至 Linux 6.10),更不用说 Raspberry Pi 分支了,所以你不会找到 PWM 字符设备/ioctl当前内核中的接口。