ITE SuperIO 入门

最近在研究ITE的superio。不同型号之间操作方法基本大同小异。

参考文档:
IT8786E-I_B_V0.2.pdf

IO端口

地址 2eh 数据 2fh

编辑模式(MB PnP)

操作寄存器需要先进入该模式。
进入:可以向2eh依次发送 87h, 01h, 55h, 55h;

1
2
3
4
5
mov dx,2eh
out dx,87h
out dx,01h
out dx,55h
out dx,55h

退出:在进入后可以向全局寄存器2h写入2(0b10)即可退出。

1
2
out 2eh,2h
out 2fh,2h

内部寄存器

每个寄存器占1字节。每个寄存器都有自己的序号,需要使用序号访问寄存器。

寄存器的种类

内部有两种寄存器,一种是全局的,一种是和逻辑设备相关的。后者在不同的逻辑设备下,同一个寄存器的意义并不一致,随着设备的切换读出来的值也不尽相同。可以参考手册。前者在所有的逻辑设备中的意义都相同,比如芯片id(20h和21h)

寄存器的读写

在编辑模式下,先向地址端口2eh写入欲操作寄存器的序号。比如要操作序号为07h的寄存器:

1
out 2eh,07h

这时可以对数据端口2fh使用out写入或in读出:

1
2
in al,2fh    ; 读出07h寄存器的值到al
out 2fh,al ; 将al写入07h

逻辑设备操作

每个逻辑设备都有自己的逻辑设备号,这个也是大同小异。操作某逻辑设备(写入其内部寄存器)需要先指定逻辑设备号(LDN)。

向全局寄存器07h写入逻辑设备号(LDN)即可选定欲操作的逻辑设备。

比如GPIO的LDN是07h

1
2
out 2eh,07h ; 准备操作07h寄存器
out 2fh,07h ; 向07h寄存器写入07h(LDN)

这样就可以操作GPIO设备的内部寄存器了。

例子:设置第8组GPIO的模式为输出,并输出全1

8组有8条gpio接口(80-87)。根据手册,cfh寄存器控制GPIO8组的模式,一个bit控制一条GPIO,为0输入,为1输出。

操作gpio端口需要从62h和63h取一条双字节的基址,通过这个基址端口操作端口电平。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
; 进入编辑模式
mov dx,2eh
out dx,87h
out dx,01h
out dx,55h
out dx,55h

out 2eh,07h
out 2fh,07h ; 选定逻辑设备GPIO

out 2eh,cfh ; 操作cfh寄存器。
out 2fh,ffh ; 将cfh写入全1,即8条全为输出。

; 取8组基地址到ax。
out 2eh,62h
in ah,2fh ; 从62h取得地址高字节
out 2eh,63h
in al,2fh ; 从63h取得地址低字节
add ax,7 ; 偏移7得到第八组对应的地址。

mov dx,ax ; io地址使用dx
out dx,ffh ; 8组输出全1

out 2eh,2h
out 2fh,2h ;退出编辑模式。

ITE SuperIO 入门
https://www.hakurei.org.cn/2024/10/27/ite-superio-basic-useage/
作者
zjkimin
发布于
2024年10月27日
更新于
2024年10月27日
许可协议