RK3588 SOC CPU 温度监控机制
1. 概述
RK3588 是瑞芯微推出的一款高性能 ARM SoC,集成了多个温度传感器用于监控芯片不同区域的温度。本文档介绍 RK3588 SOC 中 CPU 温度传感器的工作原理、内核驱动实现以及如何获取 CPU 温度数据。
2. 温度传感器类型与工作原理
2.1 TSADC 温度传感器
RK3588 使用 TSADC(Temperature Sensor ADC) 模块来实现温度监测。TSADC 是一个片上温度传感器,通过将温度转换为模拟电压信号,再经过 ADC(模数转换器)转换为数字值,最终通过查表或公式计算出实际温度。
2.2 传感器分布
RK3588 共有 7 个温度传感器通道,分布在芯片的不同区域:
| 通道 ID | 传感器名称 | 描述 |
|---|---|---|
| 0 | top | 整体芯片顶部温度 |
| 1 | big_core0 | 大核 CPU 0 温度 |
| 2 | big_core1 | 大核 CPU 1 温度 |
| 3 | little_core | 小核 CPU 温度 |
| 4 | center | 中心区域温度 |
| 5 | gpu | GPU 温度 |
| 6 | npu | NPU 温度 |
2.3 工作原理
TSADC 的工作流程如下:
2.3.1 硬件结构
TSADC 模块的主要组成部分:
- 温度传感器:将温度转换为电压信号
- ADC 转换器:将模拟电压转换为数字值
- 控制寄存器:配置采样周期、中断、阈值等
- 数据寄存器:存储转换后的温度码值
2.3.2 寄存器定义
关键寄存器(基于驱动代码):
| 寄存器偏移 | 名称 | 功能 |
|---|---|---|
| 0x00 | TSADCV2_USER_CON | 用户控制寄存器 |
| 0x04 | TSADCV2_AUTO_CON | 自动控制寄存器 |
| 0x08 | TSADCV2_INT_EN | 中断使能寄存器 |
| 0x0c | TSADCV2_INT_PD | 中断pending寄存器 |
| 0x2c + chn*4 | TSADCV3_DATA(chn) | 通道数据寄存器 |
| 0x6c + chn*4 | TSADCV3_COMP_INT(chn) | 中断比较寄存器 |
| 0x10c + chn*4 | TSADCV3_COMP_SHUT(chn) | 关断比较寄存器 |
2.3.3 温度转换表
RK3588 使用查表法将 ADC 码值转换为温度。代码中定义的转换表如下:
// 文件: kernel/drivers/thermal/rockchip_thermal.c:769
static const struct tsadc_table rk3588_code_table[] = {
{
0, -60000}, // 码值0对应-60°C
{
194, -60000}, // 码值194对应-60°C
{
215, -40000}, // 码值215对应-40°C
{
285, 25000}, // 码值285对应25°C
{
350, 85000}, // 码值350对应85°C
{
395, 125000}, // 码值395对应125°C
{
455, 180000}, // 码值455对应180°C
{
TSADCV4_DATA_MASK, 180000}, // 最大码值对应180°C
};
说明:
- 温度单位为毫摄氏度(millidegrees Celsius)
TSADCV4_DATA_MASK为 0x1ff(9位ADC)- 对于两个码值之间的温度,使用线性插值计算
3. 内核驱动实现
3.1 驱动框架
RK3588 温度监控驱动基于 Linux Thermal 框架实现,主要包含以下几个部分:


3246

被折叠的 条评论
为什么被折叠?



