【UEFI系列】Super IO
文章目录
- 一、什么是Super IO
- 二、Super IO的作用
- 常见厂商
- 三、逻辑设备控制
- 如何访问SIO逻辑设备的配置寄存器
- 具体配置数值
- 四、硬件监控(hardware monitor)
一、什么是Super IO
Super Input/Output超级输入输出控制器。
通过LPC(low pin count)总线与南桥进行通信。
LPC:基于intel标准的33MHz 4bit并行总线协议,代替以前的ISA总线协议。用于串口、并口、键盘/鼠标、软盘驱动器等低速设备的连接。
本身是个单片机,可以独立控制输入输出设备。
二、Super IO的作用
负责提供串行、并行、软盘驱动器和键盘鼠标(不是USB型)等的控制接口。
因为南桥这样的较高速设备和串行、并行接口以及键盘鼠标等大量低速设备之间必定存在资源的不匹配,而需要经过转换和管理,而SIO则完成了这个功能。
SIO芯片在板子上比较偏的位置,毕竟高速的基本都挨CHIP芯片组比较近。
(在intel平台上,LPC总线有一个PCI地址,BUS0,Device:31,Function:0。)
SIO牵出来很多logical device逻辑设备,例如(不是每个SIO都有这些):
FDC软盘控制器,UART串口,鼠标/键盘,GPIO,HWM硬件监控,CIR红外接口,ACPI电源管理。
常见厂商
Fintek精拓
ITE联阳
Winbond华邦
Nuvoton新唐
SMSC史恩希
三、逻辑设备控制
Logical Device:逻辑设备,SIO内部的非真实存在的设备。
Global control register(offset 0h~2Fh):逻辑设备的全局控制寄存器,在SIO内部,可以通过某种方式访问到这个寄存器。这是通用的。
Every logical device config register:每个逻辑设备的寄存器。
logical device number:每个逻辑设备的编号。
LDN select register(0x07):选择寄存器,比如在0x07这里写1,every logical device config register就会是1号的设备配置寄存器。
如下图:
(0x07这里是这一字节写逻辑设备编号,填上之后,就会选中到对应的配置空间)
0x30-0x3F是逻辑设备的控制,主要是控制开关。
0x40-0xFE是逻辑设备的配置,分配资源和进行管理。
如何访问SIO逻辑设备的配置寄存器
1.进入配置模式;
2.选中逻辑设备;
3.激活;
4.配置逻辑设备的控制寄存器和配置寄存器;
5.退出配置模式。
不同平台设计不一样,要看SIO芯片规范。
拿比较常见的一种举例(index:2E,data:2F):
怎么进入extended function mode:成功写两次0x87到2E IO porting口。
怎么退出extended function mode:成功写一次0xAA到2E IO porting口。
选中逻辑设备:写0x07到2E IO porting口(指向逻辑设备的number寄存器),再把设备号写到2F(下图选的是1号设备)。
配置:写要配置的寄存器到2E(下图是写F0),再把数据写到2F(下图是写3C)。
退出:写0x2E到AA IO porting口。
完成了写1号设备的F0寄存器为2F。
汇编代码(用C语言效率更改,厂商都会提供封装好的函数供使用,直接用对应函数填内容就行):
具体配置数值
0x30: bit0置为1,即为激活设备,设成0即为不工作。
0x60-63:IO base address。(比如0x60到0x63为:00 60 00 64代表这个设备使用的io资源是0x060和0x064)
0x70:bit0-3 IRQ,代表使用的中断。
F0:clock频率,port92,gate A20,功能的一些开关和配置,详情见规范。
四、硬件监控(hardware monitor)
温度、风扇转速/风扇控制、电压。
如果温度超过多少、电压超过多少,会采取措施,具体请参考SIO的规范手册,在page几、多少位都会有详细说明。
比如新唐某SIO的硬件monitor:01 page的index 40H,它的bit7代表开关。
风扇配置:01 page的C0-C7H。
风扇转速:01 page的C8-CFH。
再说SIO的硬件monitor的base address,page是根据不同的硬件手册规定的,新唐某SIO的就是0B,而offset(CR)偏移地址是之前我们提到的具体配置数值的0x60 0x61那里,范围在100-FF8H且没有被使用过,都可以填写。
比如显示0X60和0X61显示:0A00,那么这就是硬件monitor的base address。
用RU工具输入访问命令:
往0A00写FF,往0A00写01。
(o a00 ff
o a00 01)
就会port口变成A01,A02(之前是4E,4F)。
然后就可以看到配置空间,具体对应信息可以参考硬件手册。