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

159 lines
7.4 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 0``ectool pwmsetduty`
- **自动风扇控制**`ectool autofanctrl on/off`Windows 下需手动启用)
---
## 四、如何获取 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
```powershell
# 查询 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.ps1``ectool监控温度风扇.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监控温度风扇.ps1``MonitorThermalZones.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命令中文说明.txt``ectool在Windows下使用说明.txt`