如何在 255(FF) 字节后从 DIMM 读取串行存在检测 (SPD) 数据的一个字节?
How to read a byte of the Serial Presence Detect (SPD) data from the DIMM after 255(FF) bytes?
我有SMBus基地址寄存器,
并使用 DIMM SMBus 地址 SMBBASE 04h 对 SMBus 发送从属地址寄存器进行编程。
然后使用要读取的 DIMM 的 SPD 数据偏移量 SMBBASE 03h 对 SMBus 主机命令寄存器进行编程。
但主机命令寄存器 (HCMD)—偏移量 3h 的大小为:8 位 (255/FF),
那么如何读取 255 字节之后的内容?
例如:
DDR4 串行存在检测 (SPD) Table:
字节 320:模块制造商 ID 代码
我需要读取字节 320。
我的代码是这样的
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);
主机状态寄存器 return 0x44,设备错误 (DERR)。
正在尝试读取 DDR4 SPD?
它们有 2 页,每页 256 字节,您需要虚拟写入一个特殊的预定义地址 0x6E 以将所有 SPD 芯片切换到第 1 页(您的字节 320 所在的位置),然后写入 0x6C 将它们切换回第 0 页(以防止在下次引导期间出现 SPD 读取失败)。
阅读第 12 页的 this datasheet 了解更多信息。
至少在 Linux PC 中,
您需要先写入 SMBus 地址 0x37 才能到达第 1 页。(让 0 写入 SMbus 地址 32)
比您所有的 DDR4 RAM SPD 切换到第 1 页。
只需使用常规函数来写入和读取所需的地址。
之后通过写入 SMBus 地址 0x36 切换到第 0 页。
我有SMBus基地址寄存器, 并使用 DIMM SMBus 地址 SMBBASE 04h 对 SMBus 发送从属地址寄存器进行编程。
然后使用要读取的 DIMM 的 SPD 数据偏移量 SMBBASE 03h 对 SMBus 主机命令寄存器进行编程。
但主机命令寄存器 (HCMD)—偏移量 3h 的大小为:8 位 (255/FF),
那么如何读取 255 字节之后的内容?
例如: DDR4 串行存在检测 (SPD) Table:
字节 320:模块制造商 ID 代码
我需要读取字节 320。
我的代码是这样的
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); 主机状态寄存器 return 0x44,设备错误 (DERR)。
正在尝试读取 DDR4 SPD? 它们有 2 页,每页 256 字节,您需要虚拟写入一个特殊的预定义地址 0x6E 以将所有 SPD 芯片切换到第 1 页(您的字节 320 所在的位置),然后写入 0x6C 将它们切换回第 0 页(以防止在下次引导期间出现 SPD 读取失败)。 阅读第 12 页的 this datasheet 了解更多信息。
至少在 Linux PC 中, 您需要先写入 SMBus 地址 0x37 才能到达第 1 页。(让 0 写入 SMbus 地址 32) 比您所有的 DDR4 RAM SPD 切换到第 1 页。 只需使用常规函数来写入和读取所需的地址。 之后通过写入 SMBus 地址 0x36 切换到第 0 页。