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

  • 相关阅读:
    JS创建对象的四种简单方式 (工厂模式和自定义构造函数创建对象的区别)
    对js原型对象、实例化对象及prototype属性的一些见解
    Javascript中的undefined、null、""、0值和false的区别总结
    new Function()语法
    声明函数的方法 之 语句定义法(函数声明法)和表达式定义法(函数表达式)
    匿名函数function前面的! ~等符号作用小解
    proxyTable设置代理解决跨域问题
    vue之递归组件实现树形目录
    关于页面出现弹窗时,页面还可以滚动问题
    倒计时功能
  • 原文地址:https://www.cnblogs.com/chengqi521/p/8027677.html
Copyright © 2011-2022 走看看