SMBus ベース アドレス レジスタを取得し、SMBus 送信スレーブ アドレス レジスタを DIMM SMBus アドレス、SMBBASE 04h でプログラムします。
次に、読み取る DIMM の SPD データ オフセット、SMBBASE 03h を使用して SMBus ホスト コマンド レジスタをプログラムします。
ただし、ホスト コマンド レジスタ (HCMD) - オフセット 3h はサイズ: 8 ビット (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); を変更します。
に
outportw(SMBase_addr 0x03,i); ホスト ステータス レジスタは 0x44、デバイス エラー (DERR) を返します。