一、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 的,这次就是对于其中的一种进行学习。

CPU风扇调速原理

4pin风扇PWM

PWM如何控制三极管的通断

三极管工作原理

4pin风扇控速原理

第十六篇 -- SuperIO学习的更多相关文章

  1. 第二十六篇 jQuery 学习8 遍历-父亲兄弟子孙元素

    jQuery 学习8 遍历-父亲兄弟子孙元素   jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素.   什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师 ...

  2. 第二十六篇 -- wifi学习

    参考网址:https://blog.csdn.net/zwl1584671413/article/details/77936950 https://blog.csdn.net/Righthek/art ...

  3. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...

  4. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

  5. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  6. 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint

    目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...

  7. Vue学习之路第十六篇:车型列表的添加、删除与检索项目

    又到了大家最喜欢的项目练习阶段,学以致用,今天我们要用前几篇的学习内容实现列表的添加与删除. 学前准备: ①:JavaScript中的splice(index,i)方法:从已知数组的index下标开始 ...

  8. 马凯军201771010116《面向对象与程序设计Java》第十六周知识学习总结

    一:理论知识部分 1.线程的概念: 程序是一段静态的代码,它是应用程序执行的蓝 本. ‐进程是程序的一次动态执行,它对应了从代码加 载.执行至执行完毕的一个完整过程. 多线程是进程执行过程中产生的多条 ...

  9. Python自动化 【第十六篇】:JavaScript作用域和Dom收尾

    本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...

随机推荐

  1. WizTree——一个扫描快似Everything的硬盘空间分析工具

    虽然我平时用的主要是Linux,但是由于实际环境是win10,对于磁盘资源的控制,我主要是通过Windows自带的文件资源管理器来查看的,但是显然这个工具不够直观.于是,我也被安利过SpaceSnif ...

  2. Centos7 安装 Cacti 1.2

    1. 安装web server(略) 注意系统时间/时区 ntp server是否定时同步 2. 安装 mysql 5.7 (略) 安装成功后 2.1 编辑 my.ini 文件在 [mysqld] 下 ...

  3. csps前小结

    冒着题没改完颓废被发现的风险来写博客 好像离csps只剩两天了,然而没啥感觉 最近考试有时考得还算可以,有时也会很炸 今天考试事实上心态啥崩,因为T1结论题一直没思路,想了一个小时连暴力都没打 过了一 ...

  4. ES2015+ 常用新特性一口气看个够

    ES2015 也叫 ES6,区别只是一个是以发布的年份来命名,一个是以版本号来命名 从那以后组织每年都会发布一个新版本,根据这个规则,ES2016 === ES7... ES2020 === ES11 ...

  5. Qt实现基于多线程的文件传输(服务端,客户端)

    1. 效果 先看看效果图 这是传输文件完成的界面 客户端 服务端 2. 知识准备 其实文件传输和聊天室十分相似,只不过一个传输的是文字,一个传输的是文件,而这方面的知识,我已经在前面的博客写过了,不了 ...

  6. 实现SLIC算法生成像素画

    前言 像素风最早出现在8bit的电子游戏中,受制于电脑内存大小以及显示色彩单一, 只能使用少量像素来呈现内容,却成就了不少经典的像素游戏.随着内存容量与屏幕分辨率的提升,内存与显示媒介的限制不再是问题 ...

  7. Django-Auth模块之auth_user表

    一.Auth模块之auth_user表 在创建Django项目之后直接执行数据迁移命令会自动生成许多表. Django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是aut ...

  8. [.NET Core知识点回顾]-自动内存管理

    自动内存管理是公共语言运行时在托管执行过程中提供的服务之一.公共语言运行时的垃圾回收器为应用程序管理内存 的分配和释放.对开发人员而言,在开发托管应用程序时不必编写执行内存管理任务代码. 分配内存 初 ...

  9. SpringCloud-OAuth2(四):改造篇

    本片主要讲SpringCloud Oauth2篇的实战改造,如动态权限.集成JWT.更改默认url.数据库加载client信息等改造. 同时,这应该也是我这系列博客的完结篇. 关于Oauth2,我也想 ...

  10. Linux中useradd的用法

    语法:useradd [选项] 用户名 选项: -d<登陆目录> 指定新用户登陆的起始目录,默认为/home -e<有效期限> 指定用户的有效期限,格式为 YYYY-MM-DD ...