NXP S32V234 Memory stress test Hands On
1. S32V234 記憶體壓力測試介紹
- 軟件工具介绍
此 DDR stress tool 是一個 S32V234 專門針對記憶體顆粒 LPDDR2/DDR3/DDR3L 進行驗證與測試的工具,並且不需要完整
的 BSP 與 Linux 的環境下測試,有兩種方式可以進行測試,一種是透過 JTAG 上傳 test binary (.elf) 給 S32V234 ,或是在
Windows 上執行 GUI.exe 透過 JTAG 與 UART進行 。 兩個 binary 都能在板上支持 DQS 讀/寫延遲的校正 , 壓力測試則
可以跨平台針對 S32VXXX 系列裸機測試
P.S 由於 JTAG 工具相對較少,金額較高,故本測試均以UART 當作主要溝通 介面來進行測試
- 軟體工具來源
- 可透過世平業務窗口或是硬件工程師索取!!!
- 測試目的
- 本軟體可以實現校正 DRAM 配合 MMDC PHY 的延遲設定,並且在 PCB 板上達到優化的功效,過程全都自動化,
讓使用者在 DRAM 的調適上面縮短時間 - 本軟體也可在可靠度層面實行壓力測試來驗證 DRAM 的功能,壓力測試可以驗證硬體連結到 MMDC registers 的參數
以及 DRAM registers 的參數設定,簡單來說最重要的目的就是驗證使用者在 PCB 板上運行的穩定性
2. 測試工具 GUI 介面介紹
- Load Image :上傳 .bin ,根據 DDR stress tool 放置的目錄選取,圖片為另放位置 (目錄位置不得有中文字,否則沒辦法進行測試)
- Load Init Script :上傳腳本檔案 .inc ,同樣也是根據放置的目錄選取 (目錄位置不得有中文字,否則沒辦法進行測試)
- COM port : 選取 PC 上可溝通的 COM port
- S32VXXXX information
- TARGET : 為本機平台的 SOC 晶片名稱
- DDR dentisy : 選取所測試的記憶體容量 , 這裡允許你可以選取你所要測試的最低容 量 , 你可以從 32MB - 4GB 去選擇,以
S32V234 為例子,S32V234 每一個 MMDC( Multi Mode DDR Controller ) 硬件設置最大容量為 1024 MB ,故 DDR channel 0
或者是 DDR channel 1 可以測試的 DDR Density 最大為 1024MB,假設 DDR Density 選擇 32MB去測試,
則測試行為則是以 DDR Density 1024MB 前面的 32MB 去跑,若選擇 128MB 以上則以此類推
- ARM Speed : 主核心 ( CPU ) 的處理速度
- DDR channel : MMDC ( Multi Mode DDR Controller ) 實際所控制 DDR 顆粒的編號
- DDR CS : MMDC( Multi Mode DDR Controller ) 所控制 DRAM 的 chip select 數量
Note : DDR CS 為設計者設計 MMDC 中 Chip Select 控制 DRAM 的編號, 每一個 MMDC 擁有2 個 Chip Select ( CS0 與 CS1 ),
例如: MMDC 0 控制一顆帶有 2 條 CS0 與 CS1的 256 MB ( 2 Die ) 的 DRAM,DDR CS 則可以選 ALL,則表示可以測試這
顆 256MB 帶有兩顆 Die 的 DRAM,請依硬件實際設計的狀況去選擇 DDR CS,否則會出現錯誤
- DDR Calibration
- MR1 Value (HEX) : 16進制的 Mode Register 1 (MR1),初始值為 0000 , 只需填入4 位數的 16 進制的數值,而不用填入 0x04003000 (請參考附錄1)
- DDR Freq( MHZ ) : 設置跑 DRAM 顆粒的頻率,此參數可選擇範圍則 333MHZ ~ 533MHZ
- DDR Stress Test
- Overnight Test : 打勾後即可一直 loop 測試,整個測試跑完後再重新測試
- Star Freq ( MHZ )- End Freq ( MHZ ) : 開始測試的頻率到可測試完的頻率,目前範圍只能333 MHZ~533MHZ ( 範圍越大測試越久 )
- 32bit Memory Read/Write (此功能不會驗證你輸入到記憶體的 Mapping , 只能讀取/寫入從 S32V234 datasheet 中對應的記憶體位置)
- ADDR(HEX) : 也是 16進制的 Memory address ,例如可填入值為 80000000 ,不需要加 0x 80000000
- Size (Read) : DRAM 的 IO 存取為 32 bit ,1 word 為 4 bytes , 所以可以 Read 1 word 在同一時間,可選擇以下的數值都可以用來 read :
- 1 Word
- 4 Word
- 8 Word
- 16 Word
- 32 Word
- Data (HEX)/ Write : 將資料寫入指定的記憶體位置 , 同樣 1 word 代表 4 byte ,可以於一個時間內寫入一個 Word
3. S32V234 測試驗證步驟
- 先調整為 Boot mode 設定
00 :Flexcan download
01 :Serial download ( Uart )
10 :Boot from RCON
11 :Reserved
- UART 0 is default serial port , COM port rate is 115200 bps
- 選取你所要 Load Image的 ( .bin ) 檔 , 根據你所放置的目錄
- 選取你所要測試的腳本 ( .inc ) 檔, 根據你所放置的目錄
- 選取你所要通訊的 COM port , 本測試為 COM3
- 設定你所要測試的所需的最低區塊容量 (32MB) , 核心速度 , 哪一顆 DDR CS (Chip Select ) , 以及你所要測試的通道 DDR channel l , 以上都需先選取好 , 這邊預設 CS 為 0 , DDR channel 也為 0
- 設置完成可按 Download 鈕 , 畫面會顯示正在 Loading image
- 當 Loading Image 完成後會顯示你所設定要測試的參數
- 紅色圈起表示 , 當前板子設計所用到的 MMDC 編號為何 ? 綠色圈起處 , 為當前板子MMDC 所用到的 Chip select , 一般來說
DDR channel 0 為 MMDC0 , 而 DDR channel 1 為 MMDC1 , 若原理圖沒設計使用到 MMDC1 , 就不要選擇 1 , 否則 calibration 會失敗
- 填入 MR1 Value ( Hex ) & DDR frequency ( Mhz ) , 這邊 MR1 以 0006或是0004 DDR frequency暫定以 400mhz 去測試 , 過了數分鐘後 , 會產生測試結果 , 如下圖
- 儲存 log 檔
- 對照 log 檔案來修改 Script ( .inc ) 檔 , 以達到優化的目的 (請參考附錄2)
- 另存腳本檔 ( .inc ) , 再 load 新的腳本檔 ,並把你要測試的資訊設置好,再按下 download
- DDR 測試的起始頻率可以從 333 ~ 533 MHZ , 本測試從 400MHZ 開始測試到 533MHZ ,設置完成即可按下 Stress Test
- 若顯示欄上顯示 Test complete ,表示這個優化過後的腳本可以通過壓力測試 ,本項 Stress test 即到此結束
- 若顯示 the script is not suitable , 則可能腳本不適當 ,或是參數不對 , 導致應該應換個腳本或更換參數
4. 附錄1
- MR1 Value 選擇 , 請先參考設計時 DRAM 的 datasheet , 本範例以美光 MT41K256M16
的 Datasheet 做說明
- 軟體工具建議的測試值有 0006 與 0004 對照下面 spec Mode Register 1 ( A18~A0)
即為 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 , 前面0 0 1 可以忽略 , 本軟件
已經寫入 , 後面 4 碼 0 1 0 0 代表 A3 ~ A0 , 若要詳細知道下圖 Register 的功
能 , 請詢問 DRAM 供應商或是 FAE
- 假設分別做完 MMDC0 與 MMDC1 calibration 後,各得到一份 calibration 的值如下:
MMDC0 (Ch0) |
MMDC1 (Ch1) |
MMDC MPWRDLCTL = 0x44444442 MMDC registers updated from calibration Write leveling calibration MMDC_MPWLDECTRL0 ch0 (0x1F001F) = 0x001F001F MMDC_MPWLDECTRL1 ch0 (0x1F001F) = 0x001F001F Read DQS Gating calibration MPDGCTRL0 PHY0 (0x4A0044) = MPDGCTRL1 PHY0 (0x340038) = Read calibration MPRDDLCTL PHY0 (0x3A404240) = Write calibration MPWRDLCTL PHY0 (0x44444442) = |
MMDC MPWRDLCTL = 0x3E3E403E MMDC registers updated from calibration Write leveling calibration MMDC_MPWLDECTRL0 ch0 (0x1F001F) = 0x001F001F MMDC_MPWLDECTRL1 ch0 (0x1F001F) = 0x001F001F Read DQS Gating calibration MPDGCTRL0 PHY0 (0x46003F) = MPDGCTRL1 PHY0 (0x370039) = Read calibration MPRDDLCTL PHY0 (0x161E241E) = Write calibration MPWRDLCTL PHY0 (0x3E3E403E) = |
5. 附錄2
- 一般 calibration 完後 , 會得到 六 組需要修改的參數 ,其中兩組參數 ( MMDC_MPWLDECTRL0 ch0 & MMDC_MPWLDECTRL1 ch0 ) 在修改檔裡面是找不到的 ,
故此我們暫時忽略 , 而剩下的四組參數以下項參數為例 : ( Note 1)
MPRDDLCTL PHY0 (0x3A404240) = 0x3A404240 ß 需要修改的值
查詢 Reference Manual 34.12 章節得知848為 Address Offset 的值
再查詢 Reference Manual 的 Table 30-29 查詢 MMDC0 與 MMDC1 的記憶體範圍
MPRDDLCTL PHY0 為 MMDC0 再加上 offset 的值即為 MPRDDLCTL PHY0 的暫存器位置
0x40036000 + 848 = 0x40036848 的位址即為該參數
把0x3A404240取代 0x3C424442值儲存即完成 , 接著依序把剩下三組的值修改
Note1 : 無論是選擇 MMDC0 或者是 MMDC1 去做 Calibration 測試時 , 都會得到 六 組參數 , 以上面的數值為例,選擇 MMDC 0 所得到的值如下:
Write leveling calibration
MMDC_MPWLDECTRL0 ch0 (0x1F001F) = 0x001F001F
MMDC_MPWLDECTRL1 ch0 (0x1F001F) = 0x001F001F
紅色字樣的值在原廠提供的 .inc 檔找不到,這邊暫時忽略
Read DQS Gating calibration
MPDGCTRL0 PHY0 (0x4A0044) = 0x004A0044
MPDGCTRL1 PHY0 (0x340038) = 0x00340038
Read calibration
MPRDDLCTL PHY0 (0x3A404240) = 0x3A404240
Write calibration
MPWRDLCTL PHY0 (0x44444442) = 0x44444442
由於當初設定是由校正為 MMDC0 , 故以下 四 組參數位置範圍都是 0x40036000 開始
MPDGCTRL0 PHY0 --> 0x4003683C
MPDGCTRL1 PHY0 -->0x40036840
MPRDDLCTL PHY0 -->0x40036848
MPWRDLCTL PHY0 -->0x40036850
若設定是由校正為 MMDC1 , 故以下 四 組參數位置範圍都是 0x400A2000 開始
MPDGCTRL0 PHY0 -->0x400A283C
MPDGCTRL1 PHY0 -->0x400A2840
MPRDDLCTL PHY0 -->0x400A2848
MPWRDLCTL PHY0 -->0x400A2850
Note2 . 如測試失敗,需要把板重上电,需要重新加載脚本,才能再進行測試
Note3 . 此測試為 CPU 沒有 loading 下的狀況測試,沒有經過系統平衡的狀況下得到的結果,建議測試過再跑一下系統下的mem test 等程式
評論
Aken
2020年3月12日