持续创作,加速成长!这是我参与「掘金日新计划 · 6月更文挑战」的第30天,点击查看活动详情
简介
笔记本上的EC操控着电脑的开关机等等功能,引起异常关机有很多种原因,有一个很重要的原因就是温度引起的热关机,所以本文主要就是避免异常关机中的热关机的操作流程。
一、异常关机的典型原因
- 原因可由EC关机ID涵盖 EC是主机,根据从属设备的信息和FW设置来判断是否关闭系统
- 热关机
- 热传感器通信失败
- 该原因不能由EC关机ID涵盖。 EC是从属设备,收到了来自主机的关机CMD或事件。
- 通过检测Sleep_Sx信号
二、EC 热关机
当EC得到CPU/GPU温度超过SPEC时,它将直接关闭平台。
EC如何获得热值 - 通过热传感器。
- 处理器中的数字热传感器(DTS)是EC关闭的原因。
- ODM在PCB上设计传感器(热传感器)。
EC如何与传感器通信 ?
- BIOS通过读取CPU寄存器MSR检索DTS值>报告给EC
- EC直接从HW PECI引脚获得DTS值。
- EC直接从EC的SMBUS引脚获取数值(ODM设计的传感器)。
热传感器通信失败
- 系统可能有一个或多个热传感器通过SMBus接口连接到EC。如果SMBus失败,热传感器没有反应或其他原因,EC在规定的时间内与热传感器通信失败,它将记录ID,然后关机(是否关机可以可选)。
三、 示例
下面是相关温度监控的代码示例:
//----------------------------------------------------------------------------------------
// Function of Check CPU ProHot to protect CPU.
//----------------------------------------------------------------------------------------
static void CPU_ProHot_Check(void)
{
if(OEM_Temperature1 >= CPU_DTS_T_ON)
{
SET_MASK(CPU_ProHot_Status, CPU_ProHot_CPU_DTS_OTP);
}
else if(OEM_Temperature1 <= CPU_DTS_T_OFF)
{
CLEAR_MASK(CPU_ProHot_Status, CPU_ProHot_CPU_DTS_OTP);
}
}
//----------------------------------------------------------------------------------------
// This function is for trigger CPU Prohot to Trigger frequency reduction
// Base time is 50ms
//----------------------------------------------------------------------------------------
void CPU_ProHot_Control(void)
{
if(SystemIsS0)
{
// CPU_ProHot_Check();
if(ACDC_ProHot_Delay>0) // There are some event trigger CPU Prohot
{
ACDC_ProHot_Delay--;
PROCHOT_H();
}
else // NO event trigger CPU Prohot
{
PROCHOT_L();
}
}
else
{
ACDC_ProHot_Delay = 0;
PROCHOT_L();
CPU_ProHot_Status = 0;
}
}
四、完结
本章结束,撒花。