2021年12月15日 星期三

[UEFI][APP] Read DDR5 SPD

最近有機會碰到使用 DDR5 記憶體的案子,因為是很新的技術,所以順便了解一下SPD讀取的方式,進一步了解才發現讀取的方式與以往DDR3,DDR4 有些差異。

先簡單列一下 DDR5 上的特點 :
1. 支援 SPD HUB , 以 Jedec 規範分為 SPD5118 與 SPD5108。
2. SPD5118 , 51 是指 SPD HUB 的 ID,18 是指有 Temp Sensor,08 是指沒有 Temp Sensor。
3. SPD HUB 內的 NVM 總容量為 1024 Byte。
4. SPD HUB 內的 NVM 分為 8 Pages,每個 Page 有 128 Byte。
5. 對應記憶體用的 SPD 會落在 NVM 區域內。 

讀取步驟 :
1. 使用 SMBUS Read Byte,讀取 Slave Addr (SA),偏移位置為 0x00 (MR0),確認讀取到的值是否為 0x51。
2. 確定有 SPD HUB 的存在後,開始進行 SPD 的讀取。
3. 先進行切換 Page 的動作,偏移位置為 0xB (MR11) 的 BIT [2:0],3b000 - 3b111。
4. 讀取 NVM 的動作,填上偏移位置,且須將偏移位置的 BIT7 設定為 1 ( MemReg [BIT7] ),切換為內部 NVM 區域。
5. 讀完 128 Byte 後,再切換Page,共八次。

 

 

 

 

 

 

 

 

 

  


 

執行檔案

Thanks

5 則留言:

  1. 大大您好,請問您知道該如何用 EFI_SMBUS_HC_PROTOCOL 來進行 switch page 的動做呢?
    我嘗試要進行 switch page 時會發生 EFI_DEVICE_ERROR 的狀況。
    寫法是:
    Status = SmbusHcProtocol->Execute (
    SmbusHcProtocol, // This
    SmbusAddress, // SlaveAddress (0x6C >> 1)
    Offset, // Command (0x48)
    EfiSmbusReadByte, // Operation
    FALSE, // PecCheck
    &SmbusLength, // Length
    &Value8 // Buffer
    );

    請問是我有哪邊寫錯了嗎?

    回覆刪除
    回覆
    1. 您好,我之前的做法都是直接存取 SMBUS,不是用 Protocol 來做,但我是用 write 的方式切 Page ~ 如果出現 device error 的話,要看一下你當前的階段 PEI or DXE 的 SMBUSHC Protocol 是否有被 Locate 。

      刪除
    2. 大大好... 不好意思問個蠢問題,那如何利用 SMBUS 來切 page?

      經過爬文是知道要用 write 的方式來切 page, 請問是
      smbase + 04h處填入 換 page 的位置嗎?
      這位置是直接填 0xB (MR11) 的 BIT [2:0],3b000 - 3b111。 的位置嗎? 比如說我想切換到 Page 1 (就是 0xBIT[2:0] 3b001 | )?

      smbase + 03h處填入 該 page 要讀的 offset 嗎?

      有看到您文章中的第三和四步,但仍不太明瞭該如何操作,可以請你再提供詳細的步驟嗎? 不好意思

      刪除
    3. 您好,我把主要程序貼給你參考,寫法都比較不嚴謹,但會有效果,可以參考看看 !!
      https://drive.google.com/file/d/199vo7GXyNWaqbk3RTEn2ziJgH8doMHHt/view?usp=sharing

      另外,由於在 DDR5 上切 Page 會需要下 SMBUS Write 命令,如果 chipset 會擋 0xA0 - 0xAE 的寫入動作,就會無法改 page 了,較近期的 Intel 平台都會有選項可以控制這行為,預設可能也是開的 !!

      刪除
    4. 感謝大大.... 我利用 SMBUS_HC_PROTOCOL 可以讀取了,看起來是因為大大您說的 SPD Write Disable 被舉起來沒辦法進行 switch page 的動作,真的很感謝您的解答!!!

      新年將至,拜個早年XD 願大大今年工作都順利

      刪除

[UEFI][APP] Utility to Send IPMI Command by KCS in UEFI Shell

 因為之前有在網路上看到有人寫了可以於 UEFI Shell 下發送命令的程式,因此自己也試試是否可以寫出類似功能的程式,如同 Linux 上的 ipmicmd 依樣,但主要可以在 UEFI Shell 下進行,可以方便開發人員快速的送出命令,便於測試。 功能 : 支援...