博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SMBUS讀取數據的方法
阅读量:6674 次
发布时间:2019-06-25

本文共 1403 字,大约阅读时间需要 4 分钟。

第一步     将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\n",addr_s);   

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

    ch=ReadByte(addr_r);   

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

    getchar();   

}     

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

你可能感兴趣的文章
iOS网络编程之同步、异步、请求队列 2014-12-7
查看>>
链表的应用~~~~~~一元多项式的相加——原创
查看>>
阿花宝宝 Java基础笔记 之 多态
查看>>
HTML5学习之路——HTML 5 Web 存储
查看>>
enum和int、string的转换操作
查看>>
C# ACCESS数据库操作类
查看>>
详解vue通过NGINX部署在子目录或者二级目录实践
查看>>
括号匹配算法思想
查看>>
HDU 1043 Eight 【经典八数码输出路径/BFS/A*/康托展开】
查看>>
589. N叉树的前序遍历
查看>>
Java线程池使用和常用参数(待续)
查看>>
java 中 get post
查看>>
Hive学习之Locking
查看>>
关于Lucene全文检索相关技术
查看>>
简单理解冒泡排序
查看>>
halcon算子翻译——fuzzy_measure_pairing
查看>>
二项式展开
查看>>
推荐系统-03-简单基于用户的推荐
查看>>
Android scaleType属性与ImagView中图片的显示的关系
查看>>
十、cent OS开启APR模式报错:configure: error: Found APR 1.3.9. You need version 1.4.3 or newer installed...
查看>>