EC异常关机-热关机

224 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6月更文挑战」的第30天,点击查看活动详情

简介

笔记本上的EC操控着电脑的开关机等等功能,引起异常关机有很多种原因,有一个很重要的原因就是温度引起的热关机,所以本文主要就是避免异常关机中的热关机的操作流程。

一、异常关机的典型原因

  1. 原因可由EC关机ID涵盖 EC是主机,根据从属设备的信息和FW设置来判断是否关闭系统
  • 热关机
  • 热传感器通信失败
  1. 该原因不能由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;
    }
}

四、完结

本章结束,撒花。