ITE Super IO 学习 – 入门篇
接触BIOS以来算起来已经有四年了,想着将自己所学的知识记录起来,这样也方便他人学习,这是Super IO篇。
简介
SIO应用在台式机比较多,主要用来做电源管理,如上电时序控制;外围接口扩充,如串口、并口;还有温度、电压监控、智能风扇等。
SIO是一个半可定制化的芯片,怎么说是半可定制化呢?比如上电时序,这一部分就是固化好的,而可定制化部分则是逻辑设备(Logic Device)部分。接入电源后SIO便根据固化的程序开始运作,等待power button触发。按下power button后SIO开始跑上电时序,CPU Reset后BIOS才开始跑,此时BIOS给SIO配置的Logic Device也才生效。
访问SIO
可以通过 index/data 的IO的方式访问SIO,端口分别是0x2E/0x2F。访问前需要先进入PnP mode,之后便可以通过往0x07这里写入逻辑设备号切换到相应的逻辑设备。怎么进入PnP mode呢?SPEC上有说明。
即只需在0x2E/0x4E这个端口分别写入0x87,0x01,0x55,0x55 就可以了,进入PNP mode后我们便可以读出逻辑设备中的256个寄存器值,读完后需要退出PnP mode。我们可以在带SIO的机器上在shell做下实验,如下图:
首先不进入pnp mode,直接读取0x20处的值是0xFF,即读不到。然后通过往0x2E分别写入0x87, 0x01, 0x55, 0x55后再读0x20就可以读到了。
SIO中的逻辑设备
本文及以后的文章将会以IT8625这款型号进行讲解,其它型号也是大同小异的。
IT8625这款Super IO 共有8个逻辑设备可用,分别如下:
LDN 1 为串口1
LDN 2 为串口2
LDN 3 为并口
LDN 4 为环境控制器,比如温度,电压监控,风扇控制等
LDN 5 为PS/2键盘
LDN 6 为PS/2鼠标
LDN 7 为GPIO,如Power LED呼吸灯的控制
LDN A 红外
每个逻辑设备都有对应的256个寄存器可配置,值得注意的是,256个寄存器中,有部分属于通用的全局寄存器,即每个逻辑设备这部分的寄存器都是共享的,如下表。
如0x20,0x21这两个寄存器,你在LDN1读出来的跟LDN2或LDN3等任何逻辑设备中读出来的都是一样的值,它都是属于Chip ID,此类寄存器称为Global Configuration Register。
每个逻辑设备中的寄存器除了全局部分,也有部分是有相同含义的,如0x30这个位置,大多数属于Activate功能,用来设置该设备是否启用,其它的具体可参照SPEC 8.2章节。
SIO中的IO Space
逻辑设备中的256个byte寄存器对于配置一些比较复杂的功能(如Smart Fan)远远是不够的,所以SIO还给我们提供了额外的寄存器去实现更加复杂的功能,那便是IO Space。要访问这个Space,就得知道它的Base Address,那在哪里呢?
IO Base Address一般是每个逻辑设备0x60,0x61,0x62,0x63这几个位置的值,当然,这段空间首先得经过南桥decode才可以,decode的这个问题我们暂且忽略。为了方便理解,我们举个例子。
就拿LDN 4 EC这个设备来说,我们要访问他的IO Space,首先得知道它的地址是多少,从IT8625的SPEC可以知道,地址就是0x60,0x61中的值。
这里的两个值是不能直接用的,按照说明,需要分别给他们加上05h和06h,再用index/data的IO方式访问就可以了。假如0x60的值是02h,0x61的值是90h(这两个值可以用RW看到),则:
index port address = 290h + 05h = 295h
data port address = 290h + 06h = 296h
用RW访问这个IO地址便可以看到结果了。
入门篇到这里就结束了,总体认识了一下SIO,后面的文章将逐一讲解每个逻辑设备的使用。
版权声明:
作者:bin
链接:https://ay123.net/mystudy/673/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论