第十六篇 -- SuperIO学习
一、SuperIO
这次主要研究SuperIO读取以及控制风扇转速的问题。
参考文章:https://huchanghui123.github.io/Linux/Linux-Superio-CPU-FAN/
https://wenku.baidu.com/view/dae90497a26925c52dc5bf44.html
首先需要了解的一点是,CPU风扇属于环境控制器(EC)
内置在IT8786E-I中,包括五个电压输入,三个温度传感器输入,五个FAN转速计输入和五组先进的风扇控制器。 EC监控硬件环境,实现个人电脑的环境控制,我们需要找到IT8786E-I芯片的SPEC
流程如下:
1. 可以在Spec里面搜PnP Mode找到基地址,Address Port一般是2E,Data Port 一般是2F,如果有RW工具的话,可以进入IO Space,输入地址2E,然后在0x00位置依次输入(87h, 01h, 55h, 55h),进入MB PnP 模式。可能你发现你每输一个,它会自动变为0xff,不要以为没生效,其实它已经进入PnP Mode了。比如你输玩87h,确定后,马上变回00,不要慌,继续输入01h确定。
2. 使能 EC(LDN=04h, Index 30h=01)通过看SPEC,可以发现逻辑设备选择寄存器是07h,它的逻辑设备号是04h,这时候,进入IO Space,输入2E,在控制寄存器2E地址即0x00位置输入07h,然后在数据寄存器2F地址即0x01位置输入04h,在控制寄存器2E地址即0x00位置输入30h,在数据寄存器2F地址即0x01位置输入01h,使EC生效
另外,备注一下,IO Space这个里面是实际上操作的入口,里面可以设置,可以操作,不过会很快还原,所以只能在很短的时间内看到数据,那么就需要用到查看数据,RW还会有IO Index/Data,这个里面可以查看数据,比如你在Index Port输入2E,Data Port会自动变为2F,点击确定,可以查看里面的数据。而且可以进行操作,会比IO Space来得简单。比如之前在IO Space的操作是先在控制寄存器2E位置输入07h来选择逻辑设备号,之后在2F位置输入04h选择逻辑设备号04h。那么,现在在IO Index/Data里面的操作就是直接找到07h的位置,在里面输入04h就是了。至于怎么找位置,方法是:纵向是00h-F0h,横向是00h-0fh,如果你想找07h的位置就是纵向为00h,横向为07h,合起来就是07h。再举一个例子,如果你要找18h的位置,那么纵向就是10h,横向就是08h,合起来就是18h。还有一个更简便的查看数据的方法,就是进入Super IO,里面的逻辑设备号也不需要向之前的在)7h位置输入04h,可以直接选择Logical Device 04会来得更加直接。
综上所述,如果是为了写程序,那么操作步骤要按照IO Space来一步一步严格操作2E,2F端口,如果是为了手动查看修改数据,那么就用Super IO会比较方便直观一点。为了更易显示,下面就是用的Super IO使用。
3. 得到EC Base Address,可以从SPEC中看出,基地址是需要从60h,61h寄存器读出来的,60h是高八位,61h是低八位,合起来就是基地址base。然后我们的EC控制器的地址端口地址就是base+05h,数据端口就是base+06h。
基地址由逻辑设备寄存器确定(index=60h, 61h)
地址端口(Base+05h);数据端口(Base+06h)
4. 配置风扇转速寄存器(index=0Ch,default=00h)我们找到Fan PWM Control Register,找到控制风扇的寄存器地址,选择手动模式,即(Software Operation),然后根据SPEC,一般选择模式的地址部分会有控制风扇转速的地址说明,我们就可以设置00h-ffh控制风扇的转速。注意一点的是,00h不代表风扇停止,因为风扇会有一个最低转速,ffh是满转。
5. 计算出风扇转速(index=0Dh,18h)风扇转速会有一个公式,可以在SPEC里面直接搜RPM找到类似

这种就是风扇转速的计算公式,其中Count是你通过18h,0Dh读取出来的值换算成十进制的值,比如说18h读的是02h,0Dh读的是90h,那么合起来就是0290h,十进制为656,带入公式即可。
6. 退出MB PnP 模式(index=02h,default=02h)这个也可以在SPEC里面看到,这个退出PnP Mode在2E/2F端口里面的02h部分设置为01h。
至此,风扇控制就完毕了。
以前的机器大部分的流程就是这样就可以完成了。但是新机器经过实验控制不了,可能需要BIOS那边提供相应的寄存器来修改值进入手动模式才可以。还有这种讲的是ITE芯片的,如果不是用ITE芯片控制的话,流程可能就不是这样的了。有的风扇控制是不需要进入PnP Mode 的,这次就是对于其中的一种进行学习。
第十六篇 -- SuperIO学习的更多相关文章
- 第二十六篇 jQuery 学习8 遍历-父亲兄弟子孙元素
jQuery 学习8 遍历-父亲兄弟子孙元素 jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素. 什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师 ...
- 第二十六篇 -- wifi学习
参考网址:https://blog.csdn.net/zwl1584671413/article/details/77936950 https://blog.csdn.net/Righthek/art ...
- Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)
第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint
目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...
- Vue学习之路第十六篇:车型列表的添加、删除与检索项目
又到了大家最喜欢的项目练习阶段,学以致用,今天我们要用前几篇的学习内容实现列表的添加与删除. 学前准备: ①:JavaScript中的splice(index,i)方法:从已知数组的index下标开始 ...
- 马凯军201771010116《面向对象与程序设计Java》第十六周知识学习总结
一:理论知识部分 1.线程的概念: 程序是一段静态的代码,它是应用程序执行的蓝 本. ‐进程是程序的一次动态执行,它对应了从代码加 载.执行至执行完毕的一个完整过程. 多线程是进程执行过程中产生的多条 ...
- Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...
随机推荐
- 【NX二次开发】Block UI 树列表
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- Java代码优化:使用构造函数和使用一个个setter的效率差别
在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的.下面有这么几个方向. 1. 能使用构造函数一步到位的 ...
- 【模拟8.11】将军令(贪心&&树形DP)
只看45分的话,是树形DP....(当然也有能拿到70分+的大佬) 40分: 只考虑k==1的情况,树形DP 所以每个节点可能被父亲,自己,儿子控制 设f[MAXN][3],0表示儿子,1表示自己,2 ...
- 【模板】Linux下输出文件的对比
命令格式: diff+[参数]+[文件1或目录1]+[文件2或目录2] 命令参数: 指定要显示多少行的文本.此参数必须与-c或-u参数一并使用. -a或--text diff预设只会逐行比较文本文件. ...
- Linux分区,格式化概念理解
一.分区概念: 逻辑上分成不同的存储空间. 分区类型: 主分区:最多只能有4个 扩展分区:最多只能有1个. 主分区加扩展分区最多有4个. 布恩那个写入数据,只能包含逻辑分区 逻辑分区: 主分区为什么只 ...
- dos脚本语法学习
一个dos批处理脚本,通过关键字搜索注册表并删除,坑很多,语法也很怪异,详情看注释 @echo off ::声明采用UTF-8编码,避免中文乱码问题,>NUL可以吞掉chcp输出的内容 chcp ...
- 基于ABP落地领域驱动设计-03.仓储和规约最佳实践和原则
目录 系列文章 仓储 仓储的通用原则 仓储中不包含领域逻辑 规约 在实体中使用规约 在仓储中使用规约 组合规约 学习帮助 围绕DDD和ABP Framework两个核心技术,后面还会陆续发布核心构件实 ...
- 仅使用JsonUtility和File类实现Json数据读写
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using S ...
- centos8添加中文语言包
centos8添加中文语言包 系统:centos8 查看: [root@centos8]# locale -a 不支持中文包,按照centos7的方式安装:yum install kde-l10n-C ...
- POJ 2947 2947 Widget Factory 高斯消元
给出组件的数量n,给出记录的数量m(n就是变元数量,m是方程数量).每一个记录代表一个方程,求每个组件的生产天数. 高斯消元即可 #include <cstdio> #include &l ...