2016-02-29 13 views
3

У меня есть SMBus Base Address Register, и запрограммируйте регистр адресов подчиненного подчиненного SMBus с адресом SMBus DIMM, SMBBASE 04h.Как читать байт данных обнаружения последовательного присутствия (SPD) из модуля DIMM после байтов 255 (FF)?

Затем запрограммируйте регистр команд хоста SMBus с помощью смещения данных SPD DIMM для чтения, SMBBASE 03h.

Но Хост регистр команд (HCMD) -Offset 3h является Размер: 8 бит (255/FF),

Итак, как я могу читать после 255 байт?

Например: DDR4 Serial Presence Detect (SPD) Таблица:

Byte 320: Модуль Производитель Идентификационный код

мне нужно прочитать Байт 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, я); Состояние регистра хоста 0x44, ошибка устройства (DERR).

ответ

0

Пытается прочитать DDR4 SPD? У них есть 2 страницы по 256 байтов каждый, и вам нужно написать фиктивную запись на специальный предопределенный адрес 0x6E, чтобы переключить все чипы SPD на страницу 1 (где находится ваш байт 320), а затем записать в 0x6C, перевести их обратно на страницу 0 (чтобы предотвратить сбой чтения SPD во время следующей загрузки). Прочтите this datasheet на стр. 12 для получения дополнительной информации.

0

По крайней мере, в Linux PC, Вам нужно написать SMBus адрес 0x37 первым добраться до страницы 1. (выпишет от 0 до Smbus адра 32) чем все ваших DDR4 RAM SPD коммутаторов Page 1 Просто используйте регулярные функции для записи & чтение необходимых адресов. Чем переключиться на страницу 0, написав адрес SMBus 0x36 после.

 Смежные вопросы

  • Нет связанных вопросов^_^