Files
Power-off-analysis/EC与热区控制说明.md
2026-04-04 15:32:51 +08:00

7.4 KiB
Executable File
Raw Permalink Blame History

EC 与 ACPI 热区温度控制说明

一、架构概览

┌─────────────────────────────────────────────────────────────────┐
│  Windows / WMI                                                   │
│  MSAcpi_ThermalZoneTemperature (你的机器上 WMI 返回"不支持")      │
└────────────────────────────┬────────────────────────────────────┘
                             │ 调用 _TMP
┌────────────────────────────▼────────────────────────────────────┐
│  ACPI 表 (DSDT/SSDT) —— 由 Coreboot 固件生成                     │
│  定义 Thermal Zone、_TMP 方法、_CRT 临界值等                      │
└────────────────────────────┬────────────────────────────────────┘
                             │ EC Operation Region 读温度
┌────────────────────────────▼────────────────────────────────────┐
│  Chrome EC 固件 (Nuvoton NPCx)                                   │
│  读取热敏电阻/热二极管 → 返回温度                                 │
│  ectool temps 0 可读 "Core"(主板热敏电阻,非 CPU 包温)              │
└─────────────────────────────────────────────────────────────────┘

二、各组件职责

组件 职责 当前状态
Coreboot 生成 ACPI 表,定义热区及 _TMP Chromebook ACPI 可能未为 Windows 暴露完整 thermal zone
EC 固件 读传感器、控制风扇、响应主机查询 正常ectool 可读 Core 温度
Windows ACPI 驱动 执行 _TMP暴露 WMI WMI 热区查询失败("不支持"
Event 86 触发 ACPI 热区超过 _CRT → 关机 热区由 ACPI 定义,但读取路径可能不完整

三、EC 能做什么(当前)

  • 读温度ectool temps 0 → Core 传感器(主板热敏电阻,非 CPU 包温)
  • 读风扇转速ectool pwmgetfanrpm all
  • 读/设 PWM 占空比ectool pwmgetduty 0ectool pwmsetduty
  • 自动风扇控制ectool autofanctrl on/offWindows 下需手动启用)

四、如何获取 CPU 温度Chromebox / Windows

EC 的 Core 传感器是主板热敏电阻,非 CPU 包温。要在 Windows 下读取 CPU 温度,可用以下方式:

4.1 LibreHardwareMonitor推荐支持脚本

LibreHardwareMonitor 通过 MSR/驱动读取 Intel CPU 包温,运行后向 WMI 暴露 root\LibreHardwareMonitor

步骤:

  1. 下载:https://github.com/LibreHardwareMonitor/LibreHardwareMonitor/releases
    winget install LibreHardwareMonitor.LibreHardwareMonitor
  2. 管理员运行 LibreHardwareMonitor.exe部分传感器需管理员
  3. 保持程序运行(可最小化到托盘)
  4. 用 PowerShell 查询 CPU 温度Intel
# 查询 CPU 温度传感器(需 LibreHardwareMonitor 正在运行)
Get-CimInstance -Namespace "root\LibreHardwareMonitor" -ClassName Sensor | 
  Where-Object { $_.SensorType -eq 'Temperature' -and $_.Parent -like '/intelcpu/*' } | 
  Select-Object Name, Parent, Value
  • Intel CPU 的 Parent 一般为 /intelcpu/0
  • 若无数据,可先 Get-CimInstance -Namespace "root\LibreHardwareMonitor" -ClassName Sensor 查看所有传感器及 Parent再筛选

4.2 第三方工具(不用脚本)

工具 说明
Core Temp 轻量,显示 CPU 包温及各核温度
HWiNFO 全硬件监控,可导出 CSV
Open Hardware Monitor LibreHardwareMonitor 的前身,功能类似

4.3 EC 能否直接读 CPU 温度?

EC 只能读硬件已接好的传感器:热敏电阻、热二极管、或 PECI 等。
若主板未把 CPU 包温接到 ECEC 固件无法新增该能力;若有 PECI 等接口但未启用,需改 EC 固件。

Chromebox 的 EC 通常只负责主板热敏电阻(如 CoreCPU 包温一般由 CPU 内部寄存器MSR提供需 LibreHardwareMonitor、Core Temp 等工具通过驱动/MSR 读取。


五、未来如何用 EC 更好控制温度

5.1 固件层面(需改 Coreboot

要让 Windows WMI 能读到 ACPI 热区温度,需要在 Coreboot 中:

  1. 在 DSDT/SSDT 里定义 Thermal Zone
  2. 实现 _TMP 方法,通过 EC Operation Region 向 Chrome EC 读取温度
  3. 确保 ACPI 热区与 Windows WMI 兼容

这是较底层的改动,需重新编译、刷写 Coreboot风险较高。


5.2 用户态层面(不改固件)

在现有 EC 能力下,可以做:

手段 说明
定期 ectool 监控 MonitorThermalZones.ps1ectool监控温度风扇.ps1 持续观察 Core 温度
开启自动风扇 在 Windows 启动后执行 ectool autofanctrl on,让 EC 根据内置策略自动调速
手动 PWM 调扇 高负载时用 ectool pwmsetduty 0 <value> 提高转速065535 对应 0100%
任务计划自动化 创建计划任务,登录/开机后自动执行 autofanctrl on 和/或监控脚本

5.3 若可改 EC 固件(高级)

若有机会修改 Chrome EC 固件(如 MrChromebox 等方案支持部分机型):

  1. 调整温控策略:修改 fan_off / fan_max 对应温度阈值
  2. 增加传感器暴露:若有未用 ADC可接入更多热敏电阻并暴露给主机
  3. 更激进的转速曲线:提前提高转速,降低进入过热关机的概率

5.4 综合建议(不改固件)

  1. 开机后启用自动风扇

    • 手动:ectool autofanctrl on
    • 或写一个登录脚本 / 计划任务自动执行
  2. 高负载时监控温度

    • 运行 ectool监控温度风扇.ps1MonitorThermalZones.ps1
    • Core 超过 85°C 时考虑降负载或手动提高风扇
  3. 避免 Event 86 过热关机

    • ectool Core主板热敏电阻可作散热趋势参考
    • 建议用 LibreHardwareMonitor 等工具监控 CPU 包温,若经常 >90°C 需改善散热

六、相关脚本

脚本 用途
MonitorThermalZones.ps1 监控 ACPI 热区 + ectoolWMI 不可用时仍显示 EC Core 温度
ectool监控温度风扇.ps1 持续显示 ectool temps、风扇 RPM、PWM 占空比
查看系统温度.ps1 单次 WMI 热区温度快照
GetCpuTemp.ps1 通过 LibreHardwareMonitor WMI 读取 CPU 包温(需 LibreHardwareMonitor 运行中)
chromeos_collect_sensors.sh Chrome OS 下收集 EC/热区/hwmon/dmesg 传感器信息
linux_collect_sensors.sh Linux 下收集热区/hwmon/lm-sensors/ectool/dmesg 传感器信息

七、参考资料

  • ACPI Thermal Zone: ACPI Spec 11.3 Thermal Zones
  • Chrome EC: Chromium OS EC 文档
  • ectool: ectool命令中文说明.txtectool在Windows下使用说明.txt