rk3568 适配温控风扇
温度控制风扇通常是由主板上的温度传感器监测 CPU 温度,并根据预设的温度阈值来控制风扇的转速。当 CPU 温度超过预设的阈值时,风扇会自动加速转动,以降低 CPU 温度。ARM主板没有 BIOS,但是内核中可以手动调整风扇转速和温度阈值,以满足用户的需求。建议用户定期清理 CPU 散热器和风扇,以保持良好的散热效果。
作者:炭烤毛蛋 ,点击博主了解更多。
提示:开发过程使用新增 xxx.dtsi,小差异修改迁移到 xxx.dts。不仅让设备树更简洁、清晰,也减少适配过程的重复工作量。 在SDK更新时会自动合入相关修改,减少代码合并的工作量,也避免遗漏SDK重要的更新。
1. 核查原理图,适配风扇
风扇采用频率为10kHz,正极性控制PWM的 PWM-9通道。
1.1 内核配置
CONFIG_SENSORS_PWM_FAN=y
1.2 内核设备树配置
/ {
pwm_fan: pwm-fan {
compatible = "pwm-fan";
#cooling-cells = <2>;
pwms = <&pwm9 0 100000 0>;
cooling-levels = <
0 25 50 75 100 125
150 175 200 225 255>;
rockchip,temp-trips = <
47500 1
50000 2
52500 3
55000 4
57500 5
60000 6
62500 7
65000 9
67500 9
70000 10
>;
};
};
&pwm9 {
pinctrl-0 = <&pwm9m0_pins>;
status = "okay";
};
pwms = <&pwm9 0 100000 0>;
是申请PWM申请句柄。
- pwms:PWM信号的配置,格式为
<channel>, <index>, <period>, <polarity>
。 - channel:PWM通道的句柄,即PWM控制器的编号,这里是<&pwm9>,表示使用PWM控制器9。
- index (per-chip index of the PWM to request): 表示pwm内部编号,一般是 0,因为Rockchip PWM 每个chip 只有一个。
- period:PWM信号的周期,单位为纳秒,这里是100000,表示周期为100微秒,频率为10KHz(1GHz / 100000)。
- polarity:PWM信号的极性,0表示低电平有效;1表示高电平有效,也就是常说的负极性。
cooling-levels = <0 25 50 75 100 125 150 175 200 225 255>;
- <0~255>:分配档位控制pwm取值占空比,10个档位,范围是0-255。
通过设定pwm的占空比进而调整转速的档位,档位数量和大小可以按需定义。
rockchip,temp-trips
是cpu温度触发风扇转速档位等级
- <47500 1> 是CPU温度触发风扇开启档位,47.5摄氏度时风力为1档。
散热效果需要按实际情况调整,如70度对应档位10。
1.3 内核加载、验证
内核驱动正常加载后,可以识别到相关驱动节点。
- 驱动完整的文件节点
cd /sys/class/thermal/cooling_device0
ls
cur_state max_state power subsystem type uevent
cat max_state
10
- 手动调整风扇等级
# 设定风扇档位为 9
echo 9 > cur_state
# 查看当前等级
cat cur_state
9
Tips
- pwm申请失败多半是被复用,可通过GPIO复用关系查到。
- 注册温控风扇驱动时,需要同时启用风扇控制pwm。
结语
不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。