【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%占空比的方波,效果还是不错的:
总结
以上就是本文所分享的全部内容,欢迎评论区交流指正。
