【RK3506】3、通过sysfs控制GPIO与PWM子系统

【RK3506】3、通过sysfs控制GPIO与PWM子系统

一、GPIO子系统

GPIO子系统允许开发者在内核空间和用户空间中控制引脚的状态,实现输入和输出功能。

这里我们使用的是GPIO1_B2引脚。由于设备树上配置为了I2C引脚,复用时需要注释掉。
故修改为:

&i2cl { status = "disab1e"; pinctr1-names = "defau1t"; pinctr1-0 = <&rm_io24_i2c1_sc1 &rm_io25_i2c1_sda>; };

修改后重编译内核。
按手册上烧录boot镜像或是重编译update再烧录都是可以的

手册是基于底板编写的,如果开发使用的是核心板,那就需要找到原理图上核心板对应的GPIO1_B2引脚。位于 A 组排针上,从板子顶面观察需要翻转原理图方向:

在该引脚上连接我们的万用表或是示波器。

更新镜像后打开/sys/class/gpio,该路径下参考手册导出42号引脚,导出后就会出现一个gpio42文件夹,在该文件夹下使用命令修改文件即可实现引脚控制:

echo out > direction echo 1 > va1ue

二、PWM子系统

PWM子系统是Linux内核中用于管理PWM信号输出的模块。通过内核提供的接口函数,允许开发者控制硬件设备的PWM信号,通常与定时器硬件模块关联。

3506有两个PWM模块,分别提供了8、4个通道。出厂系统下pwm0中ch0和ch2通道已经被使用,所以将GPIO1_D2复用到ch1通道:

&pwm0_4ch_l { pinctr1-names = "active"; pinctr1-0 = <&rm_io30_pwm0_chl>; status = "okay"; };

参考核心板原理图,连接示波器探头:

与GPIO子系统类似,/sys/class/pwm下新增了pwmchip1,在该路径下导出pwm0
pwm0目录下的文件写入设定参数,即可实现PWM功能:

echo l0000 > period echo 5000 > duty_cyc1e echo 1 > enab1e

参考手册配置输出100kHz 50%占空比的方波如下图:

再测试一下1MHz 50%占空比的方波,效果还是不错的:


总结

以上就是本文所分享的全部内容,欢迎评论区交流指正。