rk3588 pwm-fan风扇调试

rk3588 pwm-fan风扇调试:

参考文档:
http://www.taodudu.cc/news/show-2282037.html?action=onClick Rockchip平台cpu散热风扇随温度自动调速的配置方法
http://www.coloradmin.cn/o/576106.html?action=onClick rk3568适配温控风扇

https://www.kernel.org/doc/html/latest/driver-api/pwm.html

https://zhuanlan.zhihu.com/p/651211513 【linux kernel】一文总结linux内核通知链

rockchip 在drivers/hwmon/pwm-fan.c驱动中添加了rockchip,temp-trips设备树属性,用于支持根据cpu温度调节风扇风速。
方法是:delayed_work每200毫秒调用thermal_zone_get_temp获取温度,通知notifier通知链上的观察者。
pwm-fan.c中注册成为nofitier通知链上的观察者。

根据设备原理图配置设备树。

/ {
	pwm_fan: pwm-fan {
		compatible = "pwm-fan";
		#cooling-cells = <2>;
		pwms = <&pwm10 0 50000 0>;
		cooling-levels = <0 50 100 150 200 255>;
		
		// 注意:如下cooling-levels配置会导致风扇一会儿开启,一会儿关闭
		// 原因是:风扇调节过于猛烈,需要根据整机情况进行调优
		//cooling-levels = <0 150 200 225 240 255>;

		rockchip,temp-trips = <
			50000   1
			55000   2
			60000   3
			65000   4
			70000   5
		>;
	};
};

&pwm10 {
        pinctrl-0 = <&pwm10m0_pins>;
        status = "okay";
};

调试方法:
1,每隔几秒打印cpu温度
while true; do adb shell “cat /sys/class/thermal/thermal_zone*/temp” | tee -a pwm_fan.txt;echo “######$(date)######” | tee -a pwm_fan.txt;sleep 5; done

2,运行耗时的视频App

3,当cpu温度升高时,观察到风扇启动了,并随cpu温度的升高,风扇的风速也越快了。

kernel层调试pwm:
cat /sys/kernel/debug/pwm

cat /sys/kernel/debug/pwm
对应的代码 /drivers/pwm/core.c

platform/febe0020.pwm, 1 PWM device
 pwm-0    (pwm-fan              ): requested period: 50000 ns duty: 0ns polaity: normal
 
 当cpu温度升高,fan工作时:
 pwm-0    (pwm-fan              ): requested enabled period: 50000 ns duty: 9804ns polaity: normal

在这里插入图片描述

在这里插入图片描述
sysfs调试pwm:
遇到的问题:
echo 0 > /sys/class/pwm/pwmchip0/export 失效,没有导出来。

sysfs调试pwm:
echo 0 > /sys/class/pwm/pwmchip0/export
**遇到的问题:**
cd  /sys/class/pwm/pwmchip0/
echo 0 >export   执行该操作后,pwm0没有导出来。
原因是:
cat /sys/kernel/debug/pwm  显示的是 requested,会并返回-EBUSY,所以导不出来,是正常现象。
当不是requested时会,正常导出来。
 pwm-0    (pwm-fan              ): requested period: 50000 ns duty: 0ns polaity: normal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

sysfs手动调节pwm

如下内容参考文档:https://blog.csdn.net/weixin_44244400/article/details/131558493 RK3588 PWM调试记录—linux pwm子系统驱动框架
如上分析,如果想通过sysfs手动调节pwm的话,需要把设备树pwm_fan节点注释掉,
同时把pwm10的状态由disabled改为okay。

/ {
// 注释掉pwm-fan设备树节点,通过sysfs手动调节pwm
//	pwm_fan: pwm-fan {
//		compatible = "pwm-fan";
//		#cooling-cells = <2>;
//		pwms = <&pwm10 0 50000 0>;
//		cooling-levels = <0 50 100 150 200 255>;
//		
//
//		rockchip,temp-trips = <
//			50000   1
//			55000   2
//			60000   3
//			65000   4
//			70000   5
//		>;
//	};
};

&pwm10 {
        pinctrl-0 = <&pwm10m0_pins>;
        status = "okay";
};
设备树中的pwm10的状态由disabled改为okay,
那么我们可以在/sys/class/pwm/pwmchi0目录将pwm0导出。
polarity可以赋值为: normal 或 inversed
例子1:
# cat /d/pwm
# cd /sys/class/pwm/pwmchi0
# echo 0 > export
# cd pwm0/
# echo normal > polarity
# echo 10000 > period
# echo 5000 > duty_cycle
# echo 1 > enable
# ls
capture  duty_cycle  enable  output_type  period  polarity  power  uevent

上面的指令设置了周期10000,占空比50%,极性为normal的pwm输出。

例子2:
# echo normal > polarity
# echo 50000 > period
# echo 0 > duty_cycle       // 占空比为0%    // 风扇停止运行
# echo 50000 > duty_cycle   // 占空比为100%  // 风扇最高转速运行    

例子3:
# echo inversed > polarity
# echo 50000 > period
# echo 0 > duty_cycle       // 占空比为100%    // 风扇最高转速运行
# echo 50000 > duty_cycle   // 占空比为0%      // 风扇停止运行
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值