x86平台接口知识

临时记录,待整理。

一、串口了解

参考 F81865 芯片手册 2010年,v0.28p。该芯片功能较多,如 GPIO、WDT、FAN、UART,等等。

P69 介绍寄存器及访问方式。
索引端口为 0x4e,数据端口为 0x4f。也可改为 0x2e/0x2f(把SOUT1引脚拉低)。
使能配置,需要向 0x4e 写 0x87(2次),禁止则写 0xaa。
2个端口地址配合使用。如获取某个寄存器(索引),先向0x4e写索引值,再读0x4f。

P73~P75 介绍串口寄存器。其中,UART1 的 0x60/0x61寄存器分别为高低地址,其默认值分别为0x03、0xf8。合起来为 0x3f8,这个值在 pc 上其实可以查询到。(注:笔者查阅过几个不同的类似芯片,其 UART1 的地址均为0x3f8)
类似,UART2:0x2f8,UART3:0x3e8,UART4:0x2e8。(注:UART5、UART6默认值为0,不知何故)

P34 开始介绍具体串口寄存器。以 UART1 为例,偏移量为 0 为读写寄存器(存疑:或是读写端口?)。一般说 0x3f8,就是 UART1 的数据端口。默认情况,UART1 端口地址范围为 0x3f8~0x3ff。

这种通过某寄存器获取基地址,再通过基地址+偏移量的访问方式,在 PCIE 设备中比较常见。

F81866手册理解

P116介绍寄存器及访问方式。
基地址 base 为0x4e或0x2e。
进入配置模式(或使能):

1
2
outb(0x87, base);
outb(0x87, base);

获取0x23/0x24,得到厂商ID(即fintek,依次为0x1934),0x20/0x21,得到芯片型号ID(依次为0x1010)。

二、SMBus