首页
社区
课程
招聘
请教如何用c/c++读出内存的spd信息
发表于: 2005-7-18 11:27 6956

请教如何用c/c++读出内存的spd信息

2005-7-18 11:27
6956
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
将cpuz.exe相关代码逆向一下,应能找到思路。;)
2005-7-18 12:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
思路有了就是不知道怎么实现,请大家帮忙,引用系统软件开发 System Programming中的文章:
怎样读写SMBus上的Device―以获取Intel平台上Memory的SPD信息为例

How to access devices on SMBus--- Take reading SPD information (Intel platform) as example

firing -2005/04/13

0. Essential skills before you start:

l         How to read/write PCI configuration space?

l         How to read/write I/O space under WindowsNT/2000… platform?

And an Intel south bridge datasheet as reference

1.  Basic steps

a.       Enable SMBus controller

b.       Get SMBus base address

c.       Read SPD information, according the device IDs

2.  Enable SMBus controller

LPC Interface Bridge Registers (D31:F0),  Offset: F2h (FUNC_DIS),Bit3 :

Software sets this bit to disable the SMBus Host controller function.

0 = SMBus controller is enabled

1 = SMBus controller is disabled

This bit is set to 1(SMBus controller is disabled) by default. So, just set this bit to 0.

(How to make sure you have enabled SMBus controller? Go to ‘Device Manager’ and refresh it, and then check ‘System Device’, where you should find a PCI device named “Intel® 82801DB SMBus Controller” like.)

3.  Get SMBus base address

SMBus Controller PCI Register (D31:F3), offset: 20~23H. That’s the SMBus base address. Just read this base address. Normally, the address could be 0x500 or 0x5000

4.  Read SPD information

The SMBus DeviceID of memory bank0 is a0, bank1= 0xa2, and bank2 =0xa4

a. start

b. wait smbus ready

c. output Base+04, (DeviceID+1)

d. out Base+03, offset

e. out Base+02, 48H

f. wait 200ms

g. wait smbus ready

h. input base+05

i. OK

Note:

How to wait SMBus ready? Input Base+0, bit0==0 indicates smbus is ready, otherwise(bit0==1), smbus is busy

2005年4月13日 15:38
2005-7-18 13:06
0
游客
登录 | 注册 方可回帖
返回
//