文章目錄
- 一、什么是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)。
然后就可以看到配置空間,具體對應信息可以參考硬件手冊。