使用LS1012A 核心板,运行Ubuntu 18.04 操作系统,在做高温55℃和70℃试验时一直无法通过,CPU挂掉。
由于结构限制,前期并未增加散热片等散热措施。
系统运行时,通过
cat /sys/class/thermal/thermal_zone0/temp
命令读取内部温度传感器温度,发现高温55℃环境下CPU温度一直维持在98~103℃之间,温度较高。
只能考虑通过降功耗和增加散热装置两种方法降温。
首先降功耗:
eMMC降功耗
测试电路板上CPU和eMMC温度较高,并且eMMC芯片表面温度比CPU表面温度还要高10℃。
查找eMMC芯片手册
DDR接口比HS200功耗要低一点,原厂的接口使用的是HS200,可以通过修改设备树实现
修改 /home/forlinx/work/OK10xx-linux-fs/flexbuild/packages/linux/linux/arch/arm64/boot/dts/freescale/fsl-ls1012a-rdb.dts 文件
修改如下内容,改为DDR接口
&esdhc1 {
mmc-ddr-1_8v; /*mmc-hs200-1_8v*/
status = "okay";
};
修改温度限值
修改 /home/forlinx/work/OK10xx-linux-fs/flexbuild/packages/linux/linux/arch/arm64/boot/dts/freescale/fsl-ls1012a.dtsi 文件 中如下内容:
cpu_alert: cpu-alert {
temperature = <65000>;
hysteresis = <5000>;
type = "passive";
};cpu_crit: cpu-crit {
temperature = <110000>; /*95000*/
hysteresis = <3000>;
type = "critical";
此部分是CPU温度限制,65000表示65℃时触发cpu_alert警告,
110000 表示检测到温度传感器110℃时触发 cpu-crit 功能,经过试验,触发 cpu-crit 时,会强制CPU停机,但并不能断电降温,表现就是死机。
继续看下面
cooling-maps {
map0 {
trip = <&cpu_alert>;
cooling-device =
<&cpu0 THERMAL_NO_LIMIT
THERMAL_NO_LIMIT>;
};
表示的是 cpu_alert 时触发散热功能,可以用于启动主动散热措施,由于本机并未提供主动散热功能接口,所以此处写的是THERMAL_NO_LIMIT
此功能无用,仅能用来监测温度。
为了保证功能正常,将CPU停机温度从95℃改为了110℃。
CPU降频
系统中已经提供了降频接口,分别是功耗控制策略和主频控制,通过内置的 cpufreq 软件实现;
功耗控制策略有5种,默认使用的是 ondemand ,在此不再详细描述。
主频可选的只有两种 1G和500M,查询数据手册中的clock部分发现,硬件确实只支持两种频率:
只能将CPU频率限制到最低的500M,使用的方法是在启动脚本中加入调频命令:
cpufreq-set -u 500000
将CPU最高频率限制在500M,不管使用哪种调频策略,最高都只能是500M。 cpufreq-set 的用法不在此讲述。
测试
经过以上三处改动后测试,功耗只是降低了0.1W左右,CPU温度仅仅降低2~5℃,效果并不明显。仍然不能满足要求。
散热措施
飞凌核心板设计时并未考虑散热,给后期增加散热片造成了很多麻烦。
以下都是在室温20℃,自然散热条件下测试
9.5*25*4mm铝散热片
CPU满载运行时温度可以降低4℃,空载运行时温度无太大变化。
9.5*9.5*1mm厚铜片
CPU满载运行时温度可以降低1℃,空载运行时温度无太大变化。
42*42mm,17um石墨烯薄片覆盖
CPU满载运行时温度可以降低4℃,空载运行时温度可降低4℃。
20*20mm 17um 石墨烯片
CPU满载运行时温度可以降低2℃,空载运行时温度可降低2℃。
待继续测试