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

  • 相关阅读:
    网络安全之数字签名
    python爬取并分析淘宝商品信息
    循环与分支——python
    线性相关与线性无关
    linux之文件传输协议(FTP)与本地用户测试
    递归下降语法分析
    MySQL:索引
    一个基础又很重要的知识点:JDBC原理(基本案例和面试知识点)
    Tomcat的部署、虚拟主机及优化
    二叉树深度
  • 原文地址:https://www.cnblogs.com/chengqi521/p/8027677.html
Copyright © 2011-2022 走看看