zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Java 中Timer和TimerTask 定时器和定时任务使用的例子
    PowerDesigner逆向工程导入MYSQL数据库总结
    Powerdesigner 连接mysql 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配 SQLSTATE = IM014
    关于web.xml中的<welcome-file-list>
    SQL查询四舍五入 解决方法
    HTML页面跳转的5种方法
    easyUI datagrid 列宽自适应(简单 图解)(转)
    navicat for mysql只导出数据表结构(转)
    每一位想有所成就的程序员都必须知道的15件事(走不一样的路,要去做,实践实践再实践,推销自己,关注市场)good
    2017除夕夜的感悟:学习工作不分家,工作生活不分家,读书用兵不分家
  • 原文地址:https://www.cnblogs.com/chengqi521/p/8027677.html
Copyright © 2011-2022 走看看