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

2021年12月9日 星期四

[UEFI] Minimal size of WinDDK and EWDK

WinDDK v7600.16385.1 與 EWDK v1834 是目前編譯 UEFI Image 最常使用到的兩款由微軟提供的開發工具,基本上直接到微軟的官方網站下載,並直接安裝就可以直接使用了,環境變數會在安裝過程中建立好,頂多需要再 IDE 內指定一下路徑即可 !! 

但這兩個開發工具,如果全部安裝的話,可能會需要佔掉硬碟約莫 8 GB 左右的容量,當然,如果沒有空間上的顧忌,其實直接安裝是最保險且簡單的 ~

因為個人比較喜歡簡易地設定,加上希望編譯環境能夠單純化,所以嘗試將兩套開發工具的內容簡化,過濾出編譯必要的檔案就好,讓空間需求降低。

而簡化後的 WDK 與 EWDK 所占用的空間,初估約莫 1.3 GB 左右,或許能有效的放出更多的調度空間。

使用附件的 WDK 與 EWDK,可搭配下面環境變數設定 :

由於個人較常使用命令列編譯 (Command Line Compile ),所以環境變數都是透過個別的 batch 檔案宣告,編譯環境會比較單純。

EWDK 與 WDK 為微軟版權所有 !!
Offical WDK Link v7600.16385.1
Offical EWDK (ver 1834) (Build 1703) Link

這邊提供 EWDK 的檔案過濾說明,WDK的部分礙於授權,有機會再提供。

EWDK 精簡範例說明

參考看看 !

 

 

 

[ARDUINO] Read Serial Port 80 Data to 7 Seg. by Arduino UNO

最近晶片組開始陸陸續續的切到 eSPI上,以往透過 LPC 取 Port 80 的方式也開始改由 eSPI 來做,而之前一直想嘗試將 Port 80 的資料從 EC 解出來,甚至是透過 Serial Port 丟出,前陣子終於搞出來了,但由於仍需要透過終端機去解析 Port 80,仍然有不便的地方,所以嘗試用土炮的方式,透過 Arduino 去接收 UART 的資料,並轉為七段顯示器丟出,或許能更方便一點。

準備 :

1. Arduino UNO or NANO (範例使用的是 NANO)
2. 一個雙位數七段顯示器 (範例使用的是 共陰)
3. Arduino IDE 使用的是 1.0.3 版 (非常舊 .... 新的應該也是可以,但新版產出的 HEX 檔好像會比較大,有空間考量的人可以評估一下)

線路 :

Arduino   2 Dig. 7 Led
D2            A
D3            B
D4            C
D5            D
D6            E
D7            F
D8            G
D9            Dig 1 (LO)
D10          Dig 2 (Hi)
RX           for Receive Serial (TTL)
if use RS232 , need level shift !


 
程式碼注意事項 :
 
1. 由於是雙位數七段,A-G 訊號是共用的,必須透過 Dig 1 & 2 切換,因此如果切換時間太慢
或沒有切換,會出現只有一個 LED 亮的情況,因此程式內在顯示的程序,會透過迴圈的方式重複切換 Dig 1 & 2 數次,確保人眼可以看到完整燈號,也盡量避免閃爍。

2. 因為 Arduino UNO 預設的 Serial Buffer 為 64 Bytes,如果一次接收的資料量很多,可能會出現漏資料的狀況 ...。

3. 接收的串列資料格式為 16 進制 (Hex)。
 
4. 目前預設使用的 Baud Rate 是 115200
 
如果打算直接寫入 HEX 檔案的話,可使用下面命令,進行寫入 :
avrdude -Cavrdude.conf -v -patmega328p -carduino -PCOM11 -b115200 -D -Uflash:w:SevenPort80.cpp.hex:i

 P.S: -P 參數後的 COM Port是當前 Arduino 所使用的。

效果圖 :



 

 

 

 

 


原始檔案 :

Src File
Hex File 

參考看看。

2021年12月6日 星期一

[UEFI][APP] HOEC , Read / Write EC RAM in UEFI Shell

幾年前剛接觸 EC 的時候,需要頻繁的去看 62/66 的資料,都在使用 RU 去對 62/66 下命令,但有時候資料量大,確實挺不方便的,後還自己寫了一個簡易的檢視工具,再加上讀寫功能,就變成一個堪用的小工具了 ~ 

其實距離上一版更新已經快兩三年了,因為最近遇到一些問題,又把這工具拿出來用 (主要是 RU 提供的 EC RAM 讀取怪怪的 ...),但也發現前一版居然讀不出 EC RAM 的資料,經查證後發現,是使用的 PciBridge Protocol 會無法讀寫 I/O Port ... 後來更改為 CPU IO Protocol 的方式才正常 ..
看起來,真的要老實一點,要把編譯環境升級到 EDK II 了 Orz

Download v1.11

P.S 附圖內的資料是自定義的資料 ... 非正式資訊。

 

2021年10月17日 星期日

[TOOL] Wake On Lan by Magic Packet

記得幾年前在測試網路喚醒的時候,用自己的筆電在做測試,試了好一陣子發現都無法將被測端喚醒,後來才發現發送網路封包的網路介面,是由筆電的Wifi 丟出,而不是有線網路...導致搞了烏龍,也浪費許多時間編譯許多版 BIOS ....

因此也嘗試看看是否有辦法透過 C# 來寫一個簡易的 WOL 工具,而主要的差別,是可以選擇要使用哪個網路裝置來丟封包,這在多網路設備的筆電上,應該會比較方便些 ~ 

其實後來也用 Arduino 寫過一個簡易版 WOL 工具 ~ 老實說也挺方便的 !! 

P.S. 需安裝 .Net 2.0 ....Orz


20230920 - 更新 

版本是 v2023.02.28.00

1. 新增 OUI (Organizationally Unique Identifier) 廠商辨識碼顯示。
2. 新增歷史紀錄。
3. 新增顏色區隔有線網路與無線網路。
4. 修正當網路裝置不只一個 IP 時,會造成執行錯誤。

 下載位置 :

BIN : v2023.02.28.00
BIN : v2021.10.17.00






2021年9月7日 星期二

UEFI App - Show DMI Type 41 Info

由於軟體部門會需要透過 DMI Type 41 的資訊,來定義網路接口的順序,所以 BIOS 這邊需建置好 DMI Type 41 的資訊,但實際硬體接口與軟體端看得順序並沒有依照順序排,所以 BIOS 端也會需要調整一下,因此寫了個小程式來進行判斷,就不用進入作業系統內查看,可以省下一些時間。

下載位置 :

v1.0.1


2021年3月12日 星期五

C# App - Receive Port 80 from F8528x Kit

 

 

將收到的 Serial Message 改呈現為較人能讀的方式,方便工程人員進行紀錄。

(尚未提供存 Log 功能 ... 儘快補上)

 

解壓縮密碼 : 1234

點我下載
 






2021年2月2日 星期二

UEFI App - Dis/Connect Terminal Service

 

當開啟 Console Redirection 後,本地端的畫面呈現會與Console 功能同步,所以畫面的更新與顯示會變較緩慢,尤其當使用了頻繁更新畫面的工具後會更明顯,如 RU …

但如果可以根據狀況,來及時開關此功能的話,就偵錯功能會很方便 ,不需要再透過 BIOS 進行開關。

  解壓縮密碼 : 1234

點我下載


C# App - BIOS RD Calculator

提供使用者將數值解析與彙整的工具,主要針對對象是 BIOS RD 或相關程式開發人員。


v1.6
1. 新增 Pop-up Info 來顯示換算資訊。

v1.8
1. 調整字形,修正在非亞洲語系的作業系統下排版會錯誤的問題。
2. 新增多項小工具,提供更便利的功能。
 

解壓縮密碼 : 1234

點我下載 v1.6
點我下載 v1.8



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

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