主板 · 传感器

主板传感器芯片 通道对照

主板温度、电压、风扇转速不来自任何驱动,而来自 CPU 之外的一颗 Super I/O。这篇文章给出它怎么被认出来、三条运行期通路,以及四族芯片的寄存器表与换算口径。

更新于 2026-11-02 · Windows 10 / 11 · NCT679x / NCT610x / NCT668x / IT87xx

一句话结论:主板的电压、温度、风扇转速由一颗独立于 CPU 的 Super I/O 芯片采集,它在 LPC 总线上、用自己的 ADC。Windows 没有读取它的标准接口,每个监测软件都要自己去敲它的配置口和运行期寄存器——型号认错、通道表拿错,界面上的数字就会错得很“合理”。

一、为什么同一个温度,三个软件三个名字

这颗芯片并不知道自己引脚上接的是什么。它只提供编号:温度通道 T1 到 T7、电压通道 VIN0 到 VIN14、风扇通道 FAN1 到 FAN6,每个编号对应一组固定的寄存器。

接什么,是主板布线决定的。同一颗 NCT6798D,在一张主板上 T1 可以接 CPU 附近的测温点,在另一张板上可以接供电区;同一路 VIN4,在这张板是 +12V,在另一张板是内存供电。所以“T1 是什么”这个问题,单看芯片型号回答不了,必须连同主板型号一起查。

这也解释了界面上一类名字的由来:当软件认出了芯片、但不知道板型时,只能退回芯片的默认通道名——SYSTIN、AUXTIN、System 2。看到这类名字,说明软件在这一步没有板型数据,不代表它读错了值。

二、芯片是怎么被找到的(为什么有的软件认不出来)

Super I/O 挂在主板的低针脚数总线(LPC)上,没有设备名,也不出现在设备管理器里。想认出它,程序只能去敲几个固定的 I/O 口,问“这里有没有芯片、是哪一颗”。

问题在于怎么开口问,各家厂商的规矩不一样。同样的两个 I/O 口,Nuvoton 用一套字节序列进入“配置模式”,ITE 用另一套,SMSC 又是另一套。序列用错时,口上读回来的值是 0xFF——而 0xFF 恰好也是“这个口上什么都没有”的表现。

于是出现一类很难查的假象:机器上明明有芯片,软件却报“未检测到主板传感器”。它不是把型号认错了,而是根本没进到能问型号的状态,结果和有芯片、没芯片长得一模一样。这类软件通常只认自己那一套序列所属的厂商,换个牌子就读不到。

型号很多,但按“通道表是不是同一套”来分,只有四五个家族值得记住:

家族常见型号出现在哪
NCT679x 系NCT6779D / 6791D / 6792D / 6793D / 6795D / 6796D / 6798D / 6797D / 6799D近十年的 Intel / AMD 消费级主板,最常见
NCT610x 系NCT6102D / 6104D / 6106D入门主板、部分一体机
NCT668x 系NCT6683D / 6686D / 6687D不少品牌整机主板
IT87xx 系IT8613E / IT8620E / IT8688E / IT8792E 等技嘉、华硕等品牌主板
其他Winbond W83627、Fintek F718xx、NCT6771F 等老主板,多只认到型号
这几族里有两组特别容易混:NCT6686D 与 NCT6798D 在识别阶段几乎分不开,走的路却完全不同(一个在 EC 空间、一个在 banked 空间);NCT610x 与 NCT679x 访问方式一模一样,但地址表和换算口径是两套。只按“看起来像”的型号套一份通道表,程序不会报错,只会给出一串很像真的错数字。

认出型号之后,还要拿到它的运行期窗口——一组能读温度、电压、风扇的地址。窗口的起点由芯片自己报告,不同主板上可以不一样。这个窗口是有边界的:程序只能在这个范围内取数,越过边界就会读回 0。这也是为什么某些工具在个别主板上会整组读数全空。

认出型号之后,还要找到它的运行期窗口在哪。同一颗芯片在不同主板上,这个窗口的位置可以不同;程序只能通过芯片自己报告的信息去定位它,不能写死。

三、三套通路,长得像但不一样

芯片认出来只是第一步。真正读值要在“运行期窗口”里做,而这个窗口的协议分三套,长得像但不一样:

通路特点典型芯片
banked(分页)寄存器编号被分成若干“页”,读之前要先切页,同一个编号在不同页下含义不同NCT677x / NCT679x / NCT610x
EC 空间多一级“页选择”,且窗口有归属权,同一时刻只能有一个使用者NCT6683D / 6686D / 6687D
平坦没有分页,编号直接对应地址,最直白的一种ITE IT87xx 全系

banked 与 EC 空间在外形上只差一个页寄存器,但两者内部对“哪个位置是温度、哪个是电压”的划分完全不同。拿一套表去读另一条通路,每个字节都来自一个真实存在的寄存器,只是含义全错——这正是“数字看着正常、其实不对”最典型的来源。

EC 空间这条还有一个容易漏的点:这个窗口有归属权,同一时刻只能有一个使用者。如果厂商自己的服务正占着,程序要等、并在超时后夺回,用完再交还。没做这一步的工具,偶尔会读到别人读了一半的数据——表现出来就是“刷新一下数值就变了”。

四、NCT679x 系:温度、电压、风扇各有什么坑

这一族(NCT6779D 到 NCT6799D)共用同一套布局,是最常见的一族,也是很多资料里“主板监控”的默认印象。它的三个量各有一个容易被忽略的换算环节。

温度:精度是半度,但要先对齐再拼小数

这一族的温度不是简单把一个字节当成度数。主寄存器只给出整数部分,而且需要先左移一位对齐;小数那半度藏在相邻另一个寄存器的一位里,要拼进来。少做这一步,结果就是两倍——40 度显示成 80 度。

这类错误特别难发现,因为 40 度和 80 度都在“合理范围”内。看到主板温度高得离谱又非常稳定,先怀疑换算口径,不要先怀疑主板。

电压:读到的只是“引脚电压”

这一族有 15 路电压采样,每一路读到的是一个很小的原始值,乘一个固定系数才得到引脚电压。关键在于:引脚上的 12V 轨实际只有 1V 左右,要靠主板上的分压电阻还原,而分压比例由主板设计决定,芯片手册里没有。所以同一颗芯片在不同板子上,同一路的换算系数可以是 ×2、×5、×12。

这就是“同一款软件在两台机器上显示 12.1V 和 9.9V”的真正原因:不是软件坏了,是它套了另一张板子的分压表。拿不到板型数据时,老实显示引脚电压并标注出来,比编一个“看着像 12V”的数字更负责。

电池电压那一路还有个使能开关:监测被关掉、或者机器上根本没装电池时,读到的就是 0。跳过这一步,界面会多出一行“0 V”的假数据。

风扇:芯片给的是计数,不是转速

风扇通道读到的是一个计数值,不是多少转。换算关系是转速 = 1 350 000 ÷ 计数——计数越小转得越快,所以它和温度、电压的方向是反的。

两个边界必须认:计数取到满量程表示这一路没有信号(风扇没插、或该通道未使能),不是“转速极低”;计数小到一定程度,算出来的转速已经超出可测范围,应当按无效处理。把这两个边界搞反,就会出现“风扇明明在转却显示 0”或者“显示几万转”。

五、NCT610x:访问方式一样,表却完全不同

NCT6102D / 6104D / 6106D 走的是同一条分页通路,读法上与上一族没有区别。正因为读法一样,这里最容易出事:顺手把上一节的表套过来,程序不会报错,只会给出错值。

项目NCT679xNCT610x
电压路数15 路9 路
温度对齐主值要左移一位再拼半度位主值不左移,另加半度位
风扇计数,要除以 1 350 000数值直接就是转速
电池电压使能有独立一位有,但在另一处

两处最容易踩的:

  • 温度要不要左移。同一颗芯片的两个家族,一个左移一个不左移。左移一次是两倍,读 45 度会变成 90 度——那些“主板温度高得不正常”的抱怨,有一部分就出在这类口径上。
  • 风扇给的是计数还是转速。NCT610x 的数值直接就是转速,不需要再除 1 350 000;套用上一族的公式,会把 1200 转算成 1125 转左右——差得不多,所以更难发现。

电压这边还有一个分压的陷阱。NCT610x 的 9 路里,有一半是片内分压——芯片内部已经做了二分压,读数要乘 2 才能还原真实电压;另一半是外部引脚,分压电阻在板上、手册不定义,只能按板型查,查不到就老实显示引脚电压并标注出来。拿别的板型的分压表硬套,会得出 9.9V 的 +12V——数字本身“像”,但已经不在 ATX 规格的 ±5% 之内,看到这种值先怀疑系数,不要先怀疑电源。

六、NCT668x:不先“开机”就整片读 0

NCT6683D / 6686D / 6687D 在不少品牌整机主板上出现。它走 EC 空间通路,特点是有个使能前提:硬件监控本身、以及每一路电压通道,都得先被打开,否则读回来的温度与电压基本是一片 0。

这也解释了同一颗芯片为什么在不同软件上表现不同:有的工具把“先使能”当成初始化的一部分,一次做完;有的直接读,拿回来一片 0 就当成“该通道无数据”。HwDetect 的传感器页把这类前提放在接管芯片之前做完,任何一步不成就整组留空,而不是把 0 当成读到的温度摆出来。

不做这一步不是“读数偏低”,而是一片 0。而 0 恰好是“看起来正常”的值:风扇 0 转、电压 0 V、温度 0 度,很多界面会直接把它们隐藏掉,于是用户看到的是“这个软件不支持我的主板”——实际上芯片好好的,只是没人叫醒它。

它内部的分段方式也和其他族不同:温度、电压、风扇各占一大段,温度每两路之间还夹着一个存半度位的字节。同一套编号在这种布局下换个位置就是另一个量,套错表的结果依旧是“数字都挺合理”。

七、IT87xx:进配置的序列都不一样

ITE 的芯片在消费级主板上很常见,但它和 Nuvoton 不是一套规矩。最典型的一条:进入配置模式的序列不同——Nuvoton 是两个字节,ITE 要多几步,换个 I/O 口进时收尾字节还得跟着换。用错口或用错序列都不会报错,只会读到 0xFF。

这个差异会造成一个很难查的假象:一台机器上明明有 ITE 的 Super I/O(别的工具能报出型号),但用 Nuvoton 的序列去问,两个配置口读回来的都是 0xFF——而 0xFF 正是“这个口上没有芯片”的表现。于是“有芯片但没认出来”和“压根没有芯片”在结果上完全一样,看上去就像这台机器没有 Super I/O。

顺带说明为什么这里的 0xFF 值得信:权限不足时驱动返回的是 0,不是 0xFF。读到 0xFF 说明端口确实被访问到了,只是没进配置模式,读的是总线空闲时的状态。

认出之后还要把芯片“激活”,否则读到的基本都是 0。另一条容易忽略的限制是窗口边界:驱动一般只放行芯片申报的那段地址,程序如果把偏移直接加在端口号上越出边界,读回的同样是 0——看起来像“这条通道没接传感器”,其实是自己的地址算错了。

还有一类芯片要特别小心:IT8792E / IT8795E / IT87952E / IT8790E 这几颗,Linux 内核驱动明确标注“不要进出配置模式”——这么做可能导致 LPC 访问出错,严重时死机。给这些型号做监测,宁可什么都不读,也不要冒险去敲门。

至于“IT8613E 到底有几路风扇”,不能只看芯片型号:风扇通道是否存在,取决于那几根引脚有没有被主板拿去当通用 IO 用。某几路测速引脚被复用成别的功能后,对应的风扇通道就不存在了。所以同一个型号在不同主板上,风扇通道数可以不同。

八、有数字,不代表读对了

把上面几节合起来看,能读出错值的地方至少有四处:型号认错、通路选错、通道表拿错、分压系数拿错。它们的共同点是结果都很像真的——温度 60 度、电压 12.1V、风扇 1200 转,全都在合理范围内。

所以判断一个监测工具靠不靠谱,可以看它怎么处理“不确定”:

  • 悬空通道怎么显示。没接传感器的通道,读数常常是 0 或 127。把 0 当成 0 度显示出来,界面就会多出一行“0°C”的假数据;正确做法是判定为无信号,连那一行都不出现。
  • 认不出型号时怎么办。写一个“看起来像”的型号名,比不写更糟。较稳妥的做法是:型号能认出来就报型号,但只有通道表经过核对的家族才真的建出电压、温度、风扇通道,其余型号只显示型号名、一个数字都不显示。HwDetect 的传感器页按这个原则处理——认得出就写芯片型号,核不准就只写型号,不拿推测值填空。
  • 通道自检有没有做。口径没核对过就上线,风险在于错值和真值一样“合理”。稳妥做法是接管前先验证一遍:若读回的整组通道都落在不可能区间,说明这套表对不上这颗芯片,此时退回“只认型号”比给出一串漂亮数字安全得多。宁可缺项,也不显示看起来合理的假数字。
本文的型号族划分与换算口径,依据是各芯片数据手册、Linux 内核的 hwmon 驱动,以及 LibreHardwareMonitor(MPL-2.0)的公开实现;文中只写口径与判据,不复制任何代码。至于主板型号到通道含义的映射,不在这里——这也是为什么同一颗芯片的 T1 在不同主板上含义不同。

九、常见问题

主板温度和 CPU 温度为什么不一样?
两者来源不同。CPU 温度来自处理器内部的数字温度传感器,通过 MSR 或厂商接口读取;主板温度来自板上那颗 Super I/O 的 ADC,测的是芯片引脚附近的空气或板面温度。差十度以上是常态,不是谁不准。
同一个 NCT6798D,为什么别人机器上 T1 是 CPU 温度,我的是主板温度?
因为芯片只给出通道号,接什么由主板布线决定。同一个 T1 引脚在不同主板上可以接 CPU 附近的测温点,也可以接板面或供电区。名字必须按主板型号查,软件不知道板型时只能退回 AUXTIN 这类默认名。
风扇转速显示 0 或者几万转,是怎么回事?
两种都是换算口径问题。NCT679x 系给的是计数,要用 1 350 000 除以它才是转速,计数取到满量程表示这一路没有信号;而 NCT610x 与 NCT668x 给的就是转速,不用做除法。把两族的口径套反,就会出现 0 或者异常大的数字。
为什么有的软件根本不显示主板传感器这一组?
多半是没认出芯片,或者认出了但通道口径没核对过。识别要求正确进入 Super I/O 的配置模式,而 ITE 与 Nuvoton 的进入序列不同;序列用错时读回的 ID 是 0xFF,于是有芯片和没芯片看起来完全一样。
笔记本为什么读不到主板温度和风扇转速?
笔记本的温度与风扇通常由嵌入式控制器(EC)统一管理,不走独立的 Super I/O,或者该芯片的 HWM 逻辑设备没有使能。能否读到取决于机型与厂商固件,通用工具多数拿不到,这类数据一般只在厂商自己的工具里出现。
用同一个软件,为什么我和他看到的电压不一样?
因为电压要乘板载分压系数。芯片读到的只是引脚电压,实际 12V 轨在引脚上只有 1V 左右,要靠板上电阻比还原。这个比例由主板设计决定,芯片数据手册不定义,所以只能按板型查表,查不到就只能显示引脚电压。
HwDetect 支持哪些传感器芯片?
覆盖 Winbond W83627 系列、Fintek F718xx、Nuvoton NCT677x / NCT679x / NCT610x / NCT668x,以及 ITE IT87xx 家族。其中 NCT679x、NCT610x、NCT668x 与通道表核对过的 ITE 型号会显示电压、温度、风扇读数;其余型号只显示芯片型号名,不显示数字。

相关阅读:CPU 温度是怎么读出来的:DTS 偏移与 TjMax · 怎么看内存 SPD、时序和 XMP · 硬盘健康度怎么看:SMART 字段含义

HwDetect 传感器页
  • NCT679x / NCT610x / NCT668x / IT87xx 分族按各自的表解析,不跨族套用
  • 认出型号但口径没核对过的芯片,只显示型号,不显示数字
  • 悬空通道判定为无信号,不渲染成 0 度、0 V、0 转

温度、电压、风扇均为本地读取,需要管理员权限访问 I/O 端口。笔记本由 EC 接管的机型,能否读到取决于该机型的固件。