SMBUS讀取數據的方法

第一步     将HST_D0寄存器清零   

第二部     确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写1清零)   

第三步     往XMIT_SLVA(SMB_BASE 04h)寄存器写入SPD的slave address A0,同时将bit0置1   

              (假设当前内存条插在DIMMA1槽上,此时XMIT_SLVA的bit0 若置1,表示read;若置0,表示write)   

第四步     往SPD的HST_CMD(SMB_BASE 03h)寄存器写入SPD的Index。当写0x00时,表示要读取SPD的00h处的数据。   

第六步     往SPD的HST_CNT(SMB_BASE 02h)寄存器写入48h,表示以byte的方式读取数据,并Start( bit6置1)   

              其中    bit 6:     START     即,开始执行指令   

                     Bit 4-2 :  SMB_CMD   010   Byte Data   

                                          011   Word Data   

                                          101   Block   

                                          111   Block Process   

第七步     侦测状态位,判断HST_STS的bit0是否为0,如为1,则表示忙,继续等待。   

第八步     从SPD的HST_D0(SMB_BASE 05h)寄存器读取数据  

eg:訪問spd(WIN-TC编译通过)

#include   

#include   

  

unsigned SearchBAR(unsigned long int address_s)   

{     

    unsigned long int val;   

    asm mov dx,0xcf8   

    asm db 0x66   

    asm mov ax,word ptr address_s   

    asm db 0x66   

    asm out dx,ax   

    asm mov dx,0xcfc   

    asm db 0x66   

    asm in ax,dx   

    asm db 0x66   

    asm mov val,ax   

    return val;   

}   

  

unsigned char ReadByte(unsigned long int address_r)   

{   

    unsigned char val;   

    outportb(addr_r,0x1e);   

    outportb((addr_r 4),0xa7);   

    outportb((addr_r 3),0x00);   

    outportb((addr_r 2),0x48);   

    return val;   

}   

     

     

void main()     

{     

    unsigned long int addr_s,addr_r,i,bus,dev,func,offset;   

    unsigned char ch;   

    bus=0x00;   

    dev=0x1f;   

    func=0x03;   

    offset=0x20;   

    addr_s=(0x80000000 (bus<<16) (dev<<11) (func<<8) offset);   

    addr_r=SearchBAR(addr_s)&0xffe0;   

    printf("%x",addr_s>>16);   

    printf("%x ",addr_s);   

    printf("use IO :%x ",addr_r);   

    ch=ReadByte(addr_r);   

    printf("Read Byte :%x ",ch);   

    getchar();   

}     

转载:http://blog.sina.com.cn/s/blog_870045320102v60t.html

原文地址:https://www.cnblogs.com/chengqi521/p/8027677.html