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