首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在255(FF)字节后从DIMM读取串行存在检测(SPD)数据的字节?

如何在255(FF)字节后从DIMM读取串行存在检测(SPD)数据的字节?
EN

Stack Overflow用户
提问于 2016-02-29 07:38:53
回答 2查看 4K关注 0票数 3

我得到了SMBus基本地址寄存器,并用DIMM SMBus地址SMBBASE 04h编写了SMBus传输从地址寄存器。

然后编程SMBus主机命令寄存器与DIMM的SPD数据偏移被读取,SMBBASE 03h。

但是主机命令寄存器(-Offset) 3h的大小是:8位(255/FF),

那么我如何读取后255个字节呢?

例如: DDR4串行存在检测表:

字节320 :模块制造商ID代码

我要读拜德320。

我的代码像这样

代码语言:javascript
复制
unsigned ReadByte(unsigned SMBase_addr,unsigned i)   
{
    unsigned val;   

    outportb(SMBase_addr,0x1e);   

    outportb(SMBase_addr 0x04,0xa7);   

    outportb(SMBase_addr 0x03,i);   

    outportb(SMBase_addr 0x02,0x48);   

    while((inportb(SMBase_addr))&0x01){   
        delay(10);   
    }   

    val=inportb(SMBase_addr 0x05);   

    return val;   
} 
for(i=0;i<383;i )
{
   data=ReadByte(SMBase_addr,i);
   printf("%4x",data);   
}  

我改变了outportb(SMBase_addr 0x03,i);

outportw(SMBase_addr 0x03,i);主机状态寄存器返回0x44,设备错误(DERR)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 18:45:01

试着读DDR4 SPD?它们每个有2页256字节,您需要对一个特殊的预定义地址0x6E进行虚拟写入,以便将所有SPD芯片切换到第1页(您的字节320所在的位置),而不是将其写入0x6C,将它们切换回页0(以防止下一次引导期间SPD读取失败)。有关更多信息,请阅读这个数据表第12页。

票数 0
EN

Stack Overflow用户

发布于 2017-11-22 01:26:33

至少在Linux中,您需要首先编写SMBus地址0x37才能到达第1页。(允许将0写入SMbus addr 32),而不是所有DDR4 RAM SPD切换到第1页。只需使用常规函数编写和读取所需地址。之后通过写入SMBus地址0x36切换到页0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35694195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档