【我所認知的BIOS】—>Super IO

By LightSeed

2009-9-2

1、Superio概述

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

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

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

2、SuperIO的样子

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

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

图1 Winbond的83627HG在实际主板上的样子

图2 ITE的superio图片

3、83627传输IRQ的方式

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

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

4、Winbond 83627上的设备

4.1设备列表

让我们来罗列一下Winbond 83627上的设备,共13个设备,他们分别是:FDC(logical device 0), PRT(logical device 1),UART1 (logical device 2), UART2(logical device 3), KBC(logical device 5), CIR(ConsumerIR, logical device 6), GPIO1(logical device 7), GPIO2(logical device 8), GPIO3(logical device9), ACPI (logical device A), and hardware monitor (logical device B). 图3是他们的抽象示意图。

图3 逻辑设备示意图

4.2各个设备的寄存器

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

每一个逻辑设备它们都有自己的配置寄存器,不过要记住哦,这些寄存器都是offset在30h以上的哦。为什么呢?因为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里面读取寄存器的值出来,而且频率还挺高的。方法与写入的过程类似,我们BIOS在initial superior的过程中均是用的datasheet里提供的方法。(就是上面的方法)

7、结束

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

【我所認知的BIOS】—Super IO相关推荐

  1. 【我所認知的BIOS】—gt;ADU.exe

    [我所認知的BIOS]->ADU.exe By LightSeed 2009-5-12 1.概要 在學習的過程中,肯定會要用不少的工具,作為底層的engineer那麼用的工具大多是DOS下.在D ...

  2. 【我所認知的BIOS】—SMM (SYSTEM MANAGEMENT INTERRUPT )

    [我所認知的BIOS]->SMM (System management mode 学习笔记) By LightSeed 2009-9-11 1.System management mode综述 ...

  3. 【我所認知的BIOS】--第一条指令

    [我所認知的BIOS]-->第一条指令 By LightSeed 2009-10-26 其实早就想写这样一篇文章了,今天才着手写了下.说来也惭愧关于CPU的第一条指令的问题,在一开始study的 ...

  4. Linux 访问superio 寄存器,ITE Super IO 学习 - GPIO

    简述 Super IO中的GPIO逻辑设备功能还是挺丰富的,除了通用GPIO功能,还支持看门狗(Watch Dog Timer).SMI输出路由(SMI Ouput Routing).外部中断路由(E ...

  5. ITE Super IO入门篇

    接触BIOS以来算起来已经有四年了,想着将自己所学的知识记录起来,这样也方便他人学习.这是我的第一篇博客,从SIO开始吧! 简介 SIO应用在台式机比较多,主要用来做电源管理,如上电时序控制:外围接口 ...

  6. ITE Super IO - 串口

    简述 串口都算是一个比较古老的功能了,也就是比较成熟了.Super IO中的大部分是硬件已经做好的,BIOS这边只需做小小的改动甚至默认便可以工作了. 串口寄存器 串口有关的寄存器总的来说有4个,两个 ...

  7. ITE Super IO - Environment Controller

    简介 Environment Controller,即环境控制器,可以说是SIO中最复杂也是最重要的功能了,它主要包含了风扇控制.电压监测和温度监测三个模块,它们组合起来就可以实现智能风扇(Smart ...

  8. LPC(Low Pin Count) 与SIO(Super IO)

    记录bios学习的点点滴滴,虽然已经学了很长时间才发出来,但就当是温故而知新吧,由于水平有限,难免存在错误,望指正,同时感谢CSDN提供的平台. 1.LPC 定义:​ Intel所定义的PC接口,将以 ...

  9. signature=efaf25d07c6ea03d7552906c0caee5a8,幼児の認知発達における関係把握の問題

    抄録 A part of the systematically designed researches on the above-mentioned topic which the writer ha ...

最新文章

  1. Onekey Ghost找不到硬盘分区怎么办
  2. 2018 计蒜之道 初赛 第四场
  3. Mybatis使用generator自动生成映射配置文件信息
  4. python给视频加水印_视频水印_Python SDK_服务端SDK_视频点播 - 阿里云
  5. 微信小程序这么火,到底会对C#开发者带来怎样的改变
  6. 语句拼接_Linux 进阶语句
  7. [学习笔记]斯坦纳树
  8. ORACLE学习之绑定变量
  9. oracle disk missing,oracle asm disk被格式化为ntfs文件系统
  10. crc 校验错误_资深工程师:图说CRC原理应用及STM32硬件CRC外设
  11. java 过载_java – ExecutorService,避免任务队列过载的标准方式
  12. python更换tkinter图标样式
  13. synchronized 线程同步
  14. c语言报告 实验环境怎么写,C语言实验报告
  15. Python中常用英文单词大全
  16. UltraCompare for Mac(文件内容对比神器)v22
  17. 人件札记:团队的化学反应
  18. 一、学海无涯,再出发!【2020.02.14-25】
  19. python逢七拍手游戏_Python小游戏:乱点鸳鸯谱生成七言绝句
  20. android安装包解析错误

热门文章

  1. 安卓手机开机自启动Demo
  2. 2008-07-31 郁闷的旅行之二
  3. 哲理故事三百篇(三)
  4. ffmpeg 采集 yuyv422数据 转成 yuy420数据 并播放
  5. 大数据揭秘:个人信息泄露成为网络诈骗主因
  6. 使用p标签显示段落时保留换行
  7. MyHeritage - 免费族谱 推出中文版
  8. 前端三剑客:一文入门JavaScript
  9. 智能无线压力传感器、无线压力变送器应用范围及技术特点
  10. VMP学习笔记之Handle块优化与壳模板初始化(四)