ITE Super IO 学习 - 入门篇

bin 3月前 308

接触BIOS以来算起来已经有四年了,想着将自己所学的知识记录起来,这样也方便他人学习,这是Super IO篇。

简介

《ITE 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上有说明。

《ITE Super IO 学习 - 入门篇》

即只需在0x2E/0x4E这个端口分别写入0x87,0x01,0x55,0x55 就可以了,进入PNP mode后我们便可以读出逻辑设备中的256个寄存器值,读完后需要退出PnP mode。我们可以在带SIO的机器上在shell做下实验,如下图:

《ITE Super IO 学习 - 入门篇》

首先不进入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 红外

《ITE Super IO 学习 - 入门篇》

每个逻辑设备都有对应的256个寄存器可配置,值得注意的是,256个寄存器中,有部分属于通用的全局寄存器,即每个逻辑设备这部分的寄存器都是共享的,如下表。

《ITE Super IO 学习 - 入门篇》

如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中的值。

《ITE Super IO 学习 - 入门篇》

这里的两个值是不能直接用的,按照说明,需要分别给他们加上05h和06h,再用index/data的IO方式访问就可以了。假如0x60的值是02h,0x61的值是90h(这两个值可以用RW看到),则:

index port address = 290h + 05h = 295h

data port address = 290h + 06h = 296h

用RW访问这个IO地址便可以看到结果了。

《ITE Super IO 学习 - 入门篇》

入门篇到这里就结束了,总体认识了一下SIO,后面的文章将逐一讲解每个逻辑设备的使用。


最新回复 (0)
返回