You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UEFI驱动开发:如何通过代码获取CPU VCore及最大工作电压?

UEFI下读取CPU核心电压及最大工作电压的实现方案

一、获取CPU最大工作电压

直接通过CPU内置指令读取规格参数,无需依赖外部硬件:

  • 执行CPUID Leaf 0x16指令:传入EAX=0x16后,ECX寄存器返回的值即为CPU支持的最大工作电压,单位为毫伏。例如你提到的1.72V,对应ECX返回1720。
    示例代码(UEFI C环境):
    UINT32 MaxVoltageMv;
    AsmCpuid(0x16, NULL, NULL, &MaxVoltageMv, NULL);
    // MaxVoltageMv 即为最大工作电压(毫伏)
    

二、获取实时CPU核心电压(VCore)

利用CPU的MSR寄存器读取当前VID并计算电压,这是最可靠的方式:

  • 读取MSR IA32_PERF_STATUS(0x198):寄存器低16位(bits 0-15)为当前VID值,通过标准公式计算实时VCore:
    Vcore = 1.55V - (VID值 × 0.00625V)
    示例代码:
    UINT64 PerfStatus;
    AsmReadMsr(0x198, &PerfStatus);
    UINT16 CurrentVID = (UINT16)(PerfStatus & 0xFFFF);
    double Vcore = 1.55 - (CurrentVID * 0.00625);
    
    注意:部分新世代CPU的VID计算公式可能微调,需参考对应CPU的英特尔官方规格手册。

三、关于Super I/O(IT8613E)的补充说明

IT8613E的电压监测功能主要针对系统输入类电压(如VIN),能否读取VCore完全依赖主板设计——只有当主板将VRM输出的VCore连接到Super I/O的ADC输入通道时,才有可能读取。若没有硬件连接,该路径不可行。

如果尝试验证:

  • 先通过Super I/O的配置端口(通常是0x2E/0x2F或0x4E/0x4F)进入配置模式,切换到硬件监测(HWM)逻辑设备
  • 查找ADC通道对应的寄存器,读取原始值后根据 datasheet 中的分压比计算实际电压
  • 此方法兼容性极差,不同主板设计差异极大,远不如CPU内置的MSR/CPUID方式可靠。

内容的提问来源于stack exchange,提问作者Sergei Bykovskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:08:26