1.PCI 配置空间的访问?

PCIe的配置空间访问怎么访问呢?1.当然是0XCF8/0XCFC了,但是其只能访问配置空间的256byte,所以在pci express下还有memory-map方式访问。

-CF8/CFC:

mov dx,0CF8                   ;set dx = config address port address

mov eax,80040000         ;enable=1, bus 4, dev 0, Func 0, DW 0

out dx,eax                       ;set up address port

mov dx,0CFC                   ; set dx = config data port address

 in ax,dx                          ;2 byte read from config data port

-memory-map

mov ax,[50400000]           ;memory-mapped IO read

//这个地址算法:

PCI Express* Config space base address+Bus Number*100000h+Device Number*8000h+Function Number*1000h+Register offset.

*一个pci express的配置空间有FFFH=4Kbyte,所以 memory-mapped IO range需要256*32*8*4=256M大小的空间。

*PCI Express* Config space base address在哪里?HECBASE有定义它的值。这个register怎么去找?看MCH吧,它一样有两种方式去找的。

 

2..How to access memory SPD by Smbus?

SPD的信息很多很有用的,Smbus上挂的东西还挺多的:Smart batterythermal senser

首先得找到Smubus的controller,这就要知道这个controller也是个pci device,计算机架构都从PCI开始延伸展开的,以前是CPU为中心,现在呢?呵呵

1.当PCI scan的时候,怎么去知道这是一个什么device呢?呼呼,看看pci配置空间就知道有个class code的三bytes一项了,就是通过它去判断了: base Class 、sub-class、Programming Interface。每个byte值的具体含义这个你就要查了(http://www.pcidatabase.com/)。

2.看看Offset 20 - 23h它就是SMBUS Base Address Register,(有很多registers 256bytes根本放不了),找到它然后就是大家熟悉的什么base address+offset访问我们需要的东西了。

3.确保SMBus Host Enable bit是打开的,这个bit在Host Configuration Register里,大多数它是在offset 40H。

4.现在我开始关系SMBUS I/O Registers了:Status registerControl registerCommand(index) registerSlaver address registerData register。这些register干嘛的啊,具体看datasheet吧。

5.真多,以前没发现整理资料挺麻烦:

--1.因为SMbus上还有其他Device,所以先要选择对哪一个Device操作(slave address->Transmit Slave Address寄存器中);SPDslave address的高4位是固定的,是1010b,跟着的低3位由RAM所在Address决定,最低位用来决定读写,1为读,0为写。

--2.SPD中有256Byte的数据,需要读哪一个的值,就将这个值的offset送到commandindexregister中。

--3.control registerstart动作,同时也决定以byte读还是以word读。这一动作执行之后,SMBus会将指定的SPD中的值读到Data register中。

--4.根据status register中的值,判断上一步执行是否成功。

--5.从Data register中读值

3.SMBIOS的理解?

我觉得就是收集系统的各个方面的信息方便其他人获取。。。。。。

posted on 2011-07-21 19:20  sinbad_li  阅读(1190)  评论(0编辑  收藏  举报