TSensor 使用指南
1. 模块介绍
1.1. 术语定义
术语 | 定义 | 注释说明 |
---|---|---|
ADC | Analog Digital Converter | 模拟数字转换器 |
ADCIM | ADC Interface Management | 模数转换管理模块 |
TSensor/TSen | Thermal Sensor | 温度传感器 |
小技巧
TSensor 模块在 硬件 Spec 文档中也简称为 THS。
1.2. 模块简介
TSensor 需要依赖ADCIM模块(统一管理硬件通路和处理信号校准等),其关系如图:
图 4.12 TSensor 相关模块的硬件框图
TSensor 模块支持的特性有:
- 最多支持两路温度传感器,分别位于芯片内部的CPU位置、ADC位置
- 支持周期采样(周期间隔用户可定制)和非周期采样两种模式
- 每次采样的样本数量(1~8)可配置,然后取算术平均
- 支持高电平、低电平报警设置
- 支持过温保护(发生过温时硬件会触发看门狗重启)
- ADC与温度传感器捕获时间可配置
2. 参数配置
2.1. 内核配置
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,按如下选择:
Linux
Device Drivers
[*] Thermal drivers
<*> Artinchip thermal driver
2.2. DTS 参数配置
2.2.1. TSensor 自定义参数
TSensor 驱动支持从DTS中配置的自定义参数,如下表:
参数名称 | 类型 | 取值范围 | 功能说明 |
---|---|---|---|
aic,sample-period | 正整数 | > 0, (0, 10] | 周期采样模式下的周期值,单位:s |
aic,high-temp-thd | 正整数 | > 0 | 高电平报警阈值 |
aic,low-temp-thd | 正整数 | > 0 | 低电平报警阈值 |
aic,htp-enable | boolean | 有 - 1,无 - 0 | 是否使能高温保护功能 |
注解
- 需在周期模式下,高/低电平报警以及高温保护功能才可使能有效
- 配置aic,htp-enable 时,需配置aic,high-temp-thd,否则高温保护使能无效
2.2.2. D211 配置
common/d211.dtsi中的参数配置:
tsen: tsen@19253000 {
compatible = "artinchip,aic-tsen-v1.0";
reg = <0x0 0x19253000 0x0 0x1000>;
interrupts-extended = <&plic0 94 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&cmu CLK_TSEN>, <&cmu CLK_APB1>;
clock-names = "tsen", "pclk";
resets = <&rst RESET_TSEN>;
};
2.2.3. Board 配置
xxx/board.dts中的参数配置:
&tsen {
status = "okay";
tsen0 {
status = "okay";
};
tsen1 {
status = "okay";
};
};
小技巧
- 上述配置采样的是非周期模式;
- 几个阈值都没有配置,意味着相关功能没有打开;详见 TSensor 自定义参数
- 几个阈值都需要实测后才知道配置什么样的参数合适。
3. 调试指南
3.1. 调试开关
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,可以打开 TSensor 模块的DEBUG选项:
Linux
Kernel hacking
Artinchip Debug
[*] Thermal Sensor driver debug
此DEBUG选项打开的影响:
- TSensor 驱动以-O0编译
- TSensor 的pr_dbg()和dev_dbg()调试信息会被编译
在系统运行时,如果要打印pr_dbg()和dev_dbg()信息,还需要调整loglevel为8,两个方法:
- 在board.dts中修改bootargs,增加“loglevel=8”
- 在板子启动到Linux shell后,执行命令:
echo 8 > /proc/sys/kernel/printk
3.2. Sysfs 节点
3.2.1. 状态信息
在 TSensor 驱动初始化成功后,会在Sysfs中注册生成一个 status
节点,其中打印了当前的 TSensor 配置及状态信息:
# cat /sys/devices/platform/soc/19253000.tsen/status
In Thermal Sensor V1.00:
ch0: aic-tsen-cpu, Enable: 1, Value: 0
ch1: aic-tsen-adc, Enable: 1,Value: 0
3.2.2. 读取温度
Linux Thermal 子系统提供一些 Sysfs 节点,可以用来获取温度值等操作。
# cd /sys/class/thermal/
[aic@thermal] # ls
thermal_zone0 thermal_zone1
[aic@thermal] # cd thermal_zone0/
[aic@thermal_zone0] # ls
available_policies k_po policy type
hwmon0 k_pu slope uevent
integral_cutoff mode subsystem
k_d offset sustainable_power
k_i passive temp
[aic@thermal_zone0] # cat temp
0
[aic@thermal_zone0] # cat type
aic-tsen-cpu