我有 SMBus 基地址寄存器,并使用 DIMM SMBus 地址 SMBBASE 04h 对 SMBus 发送从地址寄存器进行编程。
然后使用要读取的 DIMM 的 SPD 数据偏移量 SMBBASE 03h 对 SMBus 主机命令寄存器进行编程。
但是主机命令寄存器 (HCMD)—偏移量 3h 是 Size: 8 bits(255/FF),
那么如何读取 255 个字节之后的内容呢?
例如:DDR4 串行存在检测 (SPD) 表:
字节 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);
到
输出端口(SMBase_addr 0x03,i);主机状态寄存器返回 0x44,设备错误 (DERR)。