热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【我所認知的BIOS】—>SuperIO

【我所認知的BIOS】—>SuperIOByLightSeed2009-9-21、Superio概述SuperIO芯片也叫IO芯片。在486以上档次的主板上都有IO

【我所認知的BIOS—>Super IO

By LightSeed

2009-9-2  

1Superio概述

Super I/O芯片也叫I/O芯片。在486以上档次的主板上都有I/O控制电路。因为在南桥这样的高速设备和串行、并行接口、软盘驱动器及键盘鼠标等大量低速设备之间必定存在资源的不匹配,而需要经过转换和管理。而Super I/O芯片则完成了该功能。

通常在硬件监控芯片硬件监控芯片中会整合超级I/O功能,可用于监控受监控对象的电压、温度、转速等。主板在附件中会提供某种软件,它和主板上的硬件配合使用就能实现对电压、温度、风扇转速等的监控,一旦检测到这些参数超出设定的指标时,它会自动作出调整,以保护元件的安全。常见的温度控制芯片有ADT7463等等;通用的通用硬件监控芯片有WinbondW83697HFW83627HFSMSCLPC47M172ITEIT8705FIT8703FASUSAS99172F等等,这些芯片通常还整合了对于温度的监控需与温度传感元件配合;对风扇电机转速的监控,则需与CPU的散热风扇配合使用。

(以上是从互联网上copy的,^^,我太懒了呵呵,本可以翻译一下datasheet里的文字的。不过上面的文字到是把大概的东西都说到了。)

2SuperIO的样子

文字说了那么多,感到晦涩又不爽。还是先一睹他们的风采哈,(笔者:这篇文章主要还是介绍Winbond83627HG这块芯片,(笔者:这里有下载芯片的datasheet 网址:

http://pdf1.alldatasheet.com/datasheet-pdf/view/203869/WINBOND/W83627HG-AW.html)其他芯片其实也是触类旁通了。)图1Winbond83627HG在实际主板上的样子。图2ITEsuperio在主板上的图片。

 

1 Winbond83627HG在实际主板上的样子

 

2 ITEsuperio图片

383627传输IRQ的方式

83627HG是采用SERIAL IRQ的方式来传输IRQ,至于SERIAL IRQ的介绍在之前的文章中我有详细的探讨,如果您对这个有兴趣再返回去看看。连接是这个。

http://blog.csdn.net/lightseed/archive/2009/06/16/4274206.aspx

4Winbond 83627上的设备

4.1设备列表

让我们来罗列一下Winbond 83627上的设备,共13个设备,他们分别是:FDClogical device 0, PRTlogical device 1,UART1 logical device 2, UART2logical device 3, KBClogical device 5, CIRConsumerIR, logical device 6, GPIO1logical device 7, GPIO2logical device 8, GPIO3logical device9, ACPI logical device A, and hardware monitor logical device B. 3是他们的抽象示意图。

 

3 逻辑设备示意图

4.2各个设备的寄存器

如果您以前没有玩过X86的东东可能有点一下子反应不过来我后面要说的。(因为以前一开始我学习的时候就是死活转不过脑筋来。不过再回头看两次就应该OK了。)

每一个逻辑设备它们都有自己的配置寄存器,不过要记住哦,这些寄存器都是offset30h以上的哦。为什么呢?因为offset 0h~30h都是叫做global的寄存器。从C语言的风格上讲就叫做全局变量,而30h以后的寄存器则是局部变量。

那么您第一个会问,这么多个设备在同一个芯片中,我在配置的时候怎么才能选中它们呢?(当时看datasheet我是迷惑了半天),原来在datasheet第九章第一段的最后一句有详细的说明:

logical device number into logical device select register at CR7.真想大白于天下,那么我们去操作offset 7h这个寄存器就可以直接选中我们需要配置的寄存器了。

5、配置空间

配置空间在Winbond 83627里,大致被分成了两类。一类是global的,一类是属于各个设备的。对于每个设备而言,当我们访问到的0~255个寄存器中,0~30h都是属于global的。图4是它们的示意图

 

4配置空间的架构示意图

6、配置实例

介绍了function,背景这么多,其实我最关心的还是怎么去配置各个设备。Winbond 83627要配置它的话比较特殊,必须要先输入entry key。大致分为三个步骤:

1 Enter the extended function mode

2 Configure the configuration registers

3 Exit the extended function mode

外孙打灯笼,我们来看看详细的配置代码吧,加上详细的注释。

;----------------------------------------------------------------------

; Enter the extended function mode ,interruptible double-write |

;----------------------------------------------------------------------

MOV DX,2EH     ;选择index端口,这个2E也是有原因的,详细看看datasheet page78

MOV AL,87H      ;entry key

OUT DX,AL

OUT DX,AL        ;连续两次输出到index端口,这个是芯片的规定

;----------------------------------------------------------------------

; Configurate logical device 1, configuration register CRF0 |

;----------------------------------------------------------------------

MOV DX,2EH

MOV AL,07H      ;选择global寄存器中的offset 07h,准备选择device

OUT DX,AL       ; point to Logical Device Number Reg.

MOV DX,2FH      ;选择data端口

MOV AL,01H      ;准备选择01h设备

OUT DX,AL       ; select logical device 1,到这里已经选中了device 1

;

MOV DX,2EH

MOV AL,F0H      ;准备修改寄存器F0H

OUT DX,AL       ; select CRF0

MOV DX,2FH

MOV AL,3CH      ;准备把control register F0H的值改为3CH

OUT DX,AL       ; update CRF0 with value 3CH

;------------------------------------------

; Exit extended function mode |

;------------------------------------------

MOV DX,2EH

MOV AL,AAH      ;退出配置模式的key

OUT DX,AL        ;退出

当然有些device是需要从superio里面读取寄存器的值出来,而且频率还挺高的。方法与写入的过程类似,我们BIOSinitial superior的过程中均是用的datasheet里提供的方法。(就是上面的方法)

7、结束

Superio这部分的东西其实还是比较简单的,但是。。。但是。。。很多时候出问题就在superio上面,比如说串口呀,KBCkeyboard controller)呀什么的,经常会有这样那样的bug。所以也要引起足够的重视呢。至于找bug的技巧嘛,呵呵。。。我也还在学习中。希望大家相互探讨哦,实践方面晚辈掌握的实在是太少了。


推荐阅读
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
author-avatar
mobiledu2502856013
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有