NXP(I.MX6uLL)DDR3实验——DDR3初始化、校准、超频测试
DDR3L 初始化與測試
- ddr_stress_tester簡介(DDR壓力測試工具)
- DDR3L驅動配置
- DDR3L校準
- DDR3L超頻測試
- DDR3L驅動總結
ddr_stress_tester簡介(DDR壓力測試工具)
NXP 提供了一個非常好用的DDR 初始化工具,叫做ddr_stress_tester。此工具已經放到了開發板光盤中,路徑為:5 、開發工具->5 、NXP 官方DDR 初始化與測試工具->ddr_stress_tester_v2.90_setup.exe.zip,我們簡單介紹一下ddr_stress_tester 工具,此工具特點如下:
- ①、此工具通過USB OTG 接口與開發板相連接,也就是通過USB OTG 口進行DDR 的初始化與測試。
- ②、此工具有一個默認的配置文件,為excel 表,通過此表可以設置板子的DDR 信息,最后生成一個.inc 結尾的DDR 初始化腳本文件。這個.inc 文件就包含了DDR 的初始化信息,一般都是寄存器地址和對應的寄存器值。
- ③、此工具會加載.inc 表里面的DDR 初始化信息,然后通過USB OTG 接口向板子下載DDR 相關的測試代碼,包括初始化代碼。
- ④、對此工具進行簡單的設置,即可開始DDR 測試,一般要先做校準,因為不同的PCB其結構肯定不同,必須要做一次校準,校準完成以后會得到兩個寄存器對應的校準值,我們需要用這個新的校準值來重新初始化DDR。
- ⑤、此工具可以測試板子的DDR 超頻性能,一般認為DDR 能夠以超過標準工作頻率10%~20%穩定工作的話就認定此硬件DDR 走線正常。
- ⑥、此工具也可以對DDR 進行12 小時的壓力測試。
我們來看一下正點原子開發板光盤里面5、開發工具->6、NXP 官方DDR 初始化與測試工具目錄下的文件,如圖23.5.1.1 所示:
我們依次來看一下圖23.5.1.1 中的這些文件的作用:
- ①、ALIENTEK_256MB.inc 和ALIENTEK_512MB.inc,這兩個就是通過excel 表配置生成的,針對正點原子開發板的DDR 配置腳本文件。
- ②、ddr_stress_tester_v2.90_setup.exe.zip 就是我們要用的ddr_stress_tester 軟件,大家自行安裝即可,一定要記得安裝路徑。
- ③、I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 就是NXP 編寫的針對I.MX6UL 的DDR 初始化execl 文件,可以在此文件里面填寫DDR 的相關參數,然后就會生成對應的.inc 初始化腳本。
- ④、最后兩個PDF 文檔就是關于I.MX6 系列的DDR 調試文檔,這兩個是NXP 編寫的。
DDR3L驅動配置
1、安裝ddr_stress_tester
首先要安裝ddr_stress_testr 軟件,安裝方法很簡單,這里就不做詳細的講解了。但是一定要記得安裝路徑!因為我們要到安裝路徑里面找到測試軟件。比如我安裝到了D:\Program Files (x86)里面,安裝完成以后就會在此目錄下生成一個名為ddr_stress_tester_v2.90 的文件夾,此文件夾就是DDR 測試軟件,進入到此文件夾中,里面的文件如圖23.5.2.1 所示:
圖23.5.2.1 中的DDR_Tester.exe 就是我們稍后要使用的DDR 測試軟件。
2、配置DDR3L,生成初始化腳本
將開發板光盤中的:5 、開發工具->5 、NXP 官方DDR 初始化與測試工具
->I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件拷貝到ddr_stress_testr 軟件安裝目錄中,完成以后如圖23.5.2.2 所示:
I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 就是NXP 為I.MX6UL 編寫的DDR3 配置excel 表,雖然看名字是為I.MX6UL 編寫的,但是I.MX6ULL 也是可以使用的。
打開I.MX6UL_DDR3_Script_Aid_V0.02.xlsx,打開以后如圖23.5.2.3 所示:
圖23.5.2.3 中最下方有三個選項卡,這三個選項卡的功能如下:
- ①、Readme 選項卡,此選項卡是幫助信息,告訴用戶此文件如何使用。
- ②、Register Configuration 選項卡,顧名思義,此選項卡用于完成寄存器配置,也就是配置DDR3,此選項卡是我們重點要講解的。
- ③、RealView.inc 選項卡,當我們配置好Register Configuration 選項卡以后,RealView.inc選項卡里面就保存著寄存器地址和對應的寄存器值。我們需要另外新建一個后綴為.inc 的文件來保存RealView.inc 中的初始化腳本內容,ddr_stress_testr 軟件就是要使用此.inc 結尾的初始化腳本文件來初始化DDR3。
選中“Register Configuration”選項卡,如圖23.5.2.4 所示:
圖23.5.2.4 就是具體的配置界面,主要分為三部分:
①、Device Information
DDR3 芯片設備信息設置,此部分需要根據所使用的DDR3 芯片來設置,具體的設置項如下:
-
Manufacturer:DDR3 芯片廠商,默認為鎂光(Micron),這個沒有意義,比如我們用的nanya的DDR3,但是此配置文件也是可以使用的。
-
Memory part number:DDR3 芯片型號,可以不用設置,沒有實際意義。
-
Memory type:DDR3 類型,有DDR3-800、DDR3-1066、DDR3-1333 和DDR3-1600,在此選項右側有個下拉箭頭,點擊下拉箭頭即可查看所有的可選選項,如圖23.5.2.5 所示:
從圖23.5.2.5 可以看出,最大只能選擇DDR3-1600,沒有DDR3-1866 選項,因此我們就只能選擇DDR3-1600。 -
DRAM density(Gb):DDR3 容量,根據實際情況選擇,同樣右邊有個下拉箭頭,打開下拉箭頭即可看到所有可選的容量,如圖23.5.2.6 所示:
從圖23.5.2.6 可以看出,可選的容量為1、2、4 和8Gb,如果使用的512MB 的DDR3 就應該選擇4,如果使用的256MB 的DDR3 就應該選擇2。 -
DRAM Bus width:DDR3 位寬,可選的選項如圖23.5.2.7 所示:
正點原子ALPHA 開發板所有的DDR3 都是16 位寬,因此選擇16。 -
Number of Banks:DDR3 內部BANK 數量,對于DDR3 來說內部都是8 個BANK,因此固定為8。
-
Number of ROW Addresses:行地址寬度,可選11~16 位,這個要具體所使用的DDR3 芯片來定,如果是EMMC 核心板(DDR3 型號為NT5CC256M16EP-EK),那么行地址為15 位。如果是NAND 核心板(DDR3 型號為NT5CC128M16JR-EK),行地址就為14 位。
-
Number COLUMN Addresses:列地址寬度,可選9~12 位,EMMC 核心板和NAND 核心板的DDR3 列地址都為10 位。
-
Page Size(K):DDR3 頁大小,可選1 和2,NT5CC256M16EP-EK 和NT5CC128M16JR-EK的頁大小都為2KB,因此選擇2。
-
Self-Refresh Temperature(SRT):固定為Extended,不需要修改。
-
tRCD=tRP=CL(ns):DDR3 的tRCD-tRP-CL 時間參數,要查閱所使用的DDR3 芯片手冊,NT5CC256M16EP-EK 和NT5CC128M16JR-EK 都為13.91ns,因此在后面填寫13.91。
-
tRC Min(ns):DDR3 的tRC 時間參數,NT5CC256M16EP-EK 和NT5CC128M16JR-EK 都為47.91ns,因此在后面填寫47.91。
-
tRAS Min(ns):DDR3 的tRAS 時間參數,NT5CC256M16EP-EK 和NT5CC128M16JR-EK都為34ns,因此在后面填寫34。
②、System Information
此部分設置I.MX6UL/6ULL 相關屬性,具體的設置項如下:
-
i.Mx Part:固定為i.MX6UL。
-
Bus Width:總線寬度,16 位寬。
-
Density per Chip select(Gb):每個片選對應的DDR3 容量,可選1~16,根據實際所使用的DDR3 芯片來填寫,512MB 的話就選擇4,256MB 的話就選擇2。
-
Number of Chip Select used:使用幾個片選信號?可選擇1 或2,正點原子所有的核心板都只使用了一個片選信號,因此選擇1。
-
Total DRAM Density(Gb):整個DDR3 的容量,單位為Gb,如果是512MB 的話就是4,如果是256MB 的話就是2。
-
DRAM Clock Freq(MHz):DDR3 工作頻率,設置為400MHz。
-
DRAM Clock Cycle Time(ns):DDR3 工作頻率對應的周期,單位為ns,如果工作在400MHz,那么周期就是2.5ns。
-
Address Mirror(for CS1):地址鏡像,僅CS1 有效,此處選擇關閉,也就是“Disable”,此選項我們不需要修改。
③、SI Configuratin
此部分是信號完整性方面的配置,主要是一些信號線的阻抗設置,這個要咨詢硬件工程師,這里我們直接使用NXP 的默認設置即可。
關于DDR3 的配置我們就講解到這里,如果是EMMC 核心板(DDR3 型號為
NT5CC256M16EP-EK),那么配置如圖23.5.2.8 所示:
NAND 核心板配置(DDR3 型號為NT5CC128M16JR-EK)配置如圖23.5.2.9 所示:
后面我就以EMMC 核心板為例講解了,配置完成以后點擊RealView.inc 選項卡,如圖23.5.2.10 所示:
圖23.5.2.10 中的RealView.inc 就是生成的配置腳本,全部是“寄存器地址=寄存器值”這種形式。RealView.inc 不能直接用,我們需要新建一個以.inc 結尾的文件,名字自定義,比如我名為“ALIENTEK_512MB”的.inc 文件,如圖23.5.2.11 所示:
用notepad++打開ALIENTEK_512MB.inc 文件,然后將圖23.5.2.10 中RealView.inc 里面的所有內容全部拷貝到ALIENTEK_512MB.inc 文件中,完成以后如圖23.5.2.12 所示:
至此,DDR3 配置就全部完成,DDR3 的配置文件ALIENTEK_512MB.inc 已經得到了,接下來就是使用此配置文件對正點原子ALPHA 開發板的DDR3 進行校準并進行超頻測試。
DDR3L校準
首先要用DDR_Tester.exe 軟件對正點原子ALPAH 開發板的DDR3L 進行校準,因為不同的PCB 其走線不同,必須要進行校準,經過校準一會DDR3L 就會工作到最佳狀態。
1、將開發板通過USB OTG 線連接到電腦上
DDR_Tester 軟件通過USB OTG 線將測試程序下載到開發板中,因此首先需要使用USB OTG 線將開發板和電腦連接起來,如圖23.5.3.1 所示:
USB OTG 線連接成功以后還需要如下兩步:
①、彈出TF 卡,如果插入了TF 卡,那么一定要彈出來!!
②、設置撥碼開關從USB 啟動,如圖23.5.3.2 所示:
2、DDR_Tester 軟件
雙擊“DDR_Tester.exe”,打開測試軟件,如圖23.5.3.3 所示:
點擊圖23.5.3.3 中的“Load init Script ”加載前面已經生成的初始化腳本文件
ALIENTEK_512MB.inc,注意,不能有中文路徑,否則加載可能會失敗!完成以后如圖23.5.3.4所示:
ALIENTEK_512MB.inc 文件加載成功以后還不能直接用,還需要對DDR Test Tool 軟件進行設置,設置完成以后如圖23.5.3.5 所示:
一切設置好以后點擊圖23.5.3.5 中右上方大大的“Download”按鈕,將測試代碼下載到開發板中(具體下載到哪里筆者也不清楚,估計是I.MX6ULL 內部的OCRAM),下載完成以后DDR Test Tool 下方的信息窗口就會輸出一些內容,如圖23.5.3.6 所示:
圖23.5.3.6 輸出了一些關于板子的信息,比如SOC 型號、工作頻率、DDR 配置信息等等。
DDR Test Tool 工具有三個測試項:DDR Calibration、DDR Stess Test 和32bit Memory Read/Write,我們首先要做校準測試,因為不同的PCB、不同的DDR3L 芯片對信號的影響不同,必須要進行校準,然后用新的校準值重新初始化DDR。點擊“Calibraton”按鈕,如圖23.5.3.7 所示:
點擊圖23.5.3.7 中的“Calibration”按鈕以后就會自動開始校準,最終會得到Write levelingcalibtarion、Read DQS Gating Calibration、Read calibration 和Write calibration,一共四種校準結果,校準結果如下:
所謂的校準結果其實就是得到了一些寄存器對應的值,比如MMDC_MPWLDECTRL0 寄存器地址為0X021B080C,此寄存器是PHY 寫平衡延時寄存器0,經過校準以后此寄存器的值應該為0X00000000 ,以此類推。我們需要修改ALIENTEK_512MB.inc 文件,找到
MMDC_MPWLDECTRL0、MMDC_MPWLDECTRL1、MPDGCTRL0 PHY0、MPDGCTRL1 PHY0、MPRDDLCTL PHY0 和MPWRDLCTL PHY0 這6 個寄存器,然后將其值改為示例代碼23.5.3.1中的校準后的值。注意,在ALIENTEK_512MB.inc 中可能找不到MMDC_MPWLDECTRL1(0x021b0810)和MPDGCTRL1 PHY0(0x021b0840)這兩個寄存器,找不到就不用修改了。
ALIENTEK_512MB.inc 修改完成以后重新加載并下載到開發板中,至此DDR 校準完成,校準的目的就是得到示例代碼23.5.3.1 中這6 個寄存器的值!
DDR3L超頻測試
校準完成以后就可以進行DDR3 超頻測試,超頻測試的目的就是為了檢驗DDR3 硬件設計合不合理,一般DDR3 能夠超頻到比標準頻率高10%~ 15%的話就認為硬件沒有問題,因此對于正點原子的ALPHA 開發板而言,如果DDR3 能夠超頻到440MHz~460MHz 那么就認為DDR3 硬件工作良好。
DDR Test Tool 支持DDR3 超頻測試,只要指定起始頻率和終止頻率,那么工具就會自動開始一點點的增加頻率,直到達到終止頻率或者測試失敗。設置如圖23.5.4.1 所示:
圖23.5.4.1 中設置好起始頻率為400MHz,終止頻率為600MHz,設置好以后點擊“StressTest”開啟超頻測試,超頻測試時間比較久,大家耐心等待測試結果即可。超頻測試完成以后結果如圖23.5.4.2 所示(因為硬件不同,測試結果可能有些許區別):
從圖23.5.4.2 可以看出,正點原子的ALPAH 開發板EMMC 核心板DDR3 最高可以超頻到556MHz,當超頻到561MHz 的時候就失敗了。556MHz 超過了460MHz,說明正點原子的ALPHA開發板DDR3 硬件是沒有任何問題的。
DDR3L驅動總結
ALIENTEK_512MB.inc 就是我們最終得到的DDR3L 初始化腳本,其中包括了時鐘、IO 等初始化。I.MX6U 的DDR3 接口關于IO 有一些特殊的寄存器需要初始化,如表23.5.5.1 所示:
| 0X020E04B4 | IOMUXC_SW_PAD_CTL_GRP_DDR_TYPE | 0X000C0000 |
| 0X020E04AC | IOMUXC_SW_PAD_CTL_GRP_DDRPKE | 0X00000000 |
| 0X020E027C | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDCLK_0 | 0X00000028 |
| 0X020E0250 | IOMUXC_SW_PAD_CTL_PAD_DRAM_CAS | 0X00000028 |
| 0X020E024C | IOMUXC_SW_PAD_CTL_PAD_DRAM_RAS | 0X00000028 |
| 0X020E0490 | IOMUXC_SW_PAD_CTL_GRP_ADDDS | 0X00000028 |
| 0X020E0288 | IOMUXC_SW_PAD_CTL_PAD_DRAM_RESET | 0X00000028 |
| 0X020E0270 | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDBA2 | 0X00000000 |
| 0X020E0260 | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT0 | 0X00000028 |
| 0X020E0264 | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDODT1 | 0X00000028 |
| 0X020E04A0 | IOMUXC_SW_PAD_CTL_GRP_CTLDS | 0X00000028 |
| 0X020E0494 | IOMUXC_SW_PAD_CTL_GRP_DDRMODE_CTL | 0X00020000 |
| 0X020e0280 | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS0 | 0X00000028 |
| 0X020E0284 | IOMUXC_SW_PAD_CTL_PAD_DRAM_SDQS1 | 0X00000028 |
| 0X020E04B0 | IOMUXC_SW_PAD_CTL_GRP_DDRMODE | 0X00020000 |
| 0X020e0498 | IOMUXC_SW_PAD_CTL_GRP_B0DS | 0X00000028 |
| 0X020E04A4 | IOMUXC_SW_PAD_CTL_GRP_B1DS | 0X00000028 |
| 0X020E0244 | IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM0 | 0X00000028 |
| 0X020E0248 | IOMUXC_SW_PAD_CTL_PAD_DRAM_DQM1 | 0X00000028 |
接下來看一下MMDC 外設寄存器初始化,如表23.5.5.2 所示:
| 0X021B0800 | DDR_PHY_P0_MPZQHWCTRL | 0XA1390003 |
| 0X021B080C | MMDC_MPWLDECTRL0 | 0X00000000 |
| 0X021B083C | MPDGCTRL0 | 0X0138013C |
| 0X021B0848 | MPRDDLCTL | 0X40402E34 |
| 0X021B0850 | MPWRDLCTL | 0X40403A34 |
| 0X021B081C | MMDC_MPRDDQBY0DL | 0X33333333 |
| 0X021B0820 | MMDC_MPRDDQBY1DL | 0X33333333 |
| 0X021B082C | MMDC_MPWRDQBY0DL | 0XF3333333 |
| 0X021B0830 | MMDC_MPWRDQBY1DL | 0XF3333333 |
| 0X021B08C0 | MMDC_MPDCCR | 0X00921012 |
| 0X021B08B8 | DDR_PHY_P0_MPMUR0 | 0X00000800 |
| 0X021B0004 | MMDC0_MDPDC | 0X0002002D |
| 0X021B0008 | MMDC0_MDOTC | 0X1B333030 |
| 0X021B000C | MMDC0_MDCFG0 | 0X676B52F3 |
| 0X021B0010 | MMDC0_MDCFG1 | 0XB66D0B63 |
| 0X021B0014 | MMDC0_MDCFG2 | 0X01FF00DB |
| 0X021b002c | MMDC0_MDRWD | 0X000026D2 |
| 0X021b0030 | MMDC0_MDOR | 0X006B1023 |
| 0X021b0040 | MMDC_MDASP | 0X0000004F |
| 0X021b0000 | MMDC0_MDCTL | 0X84180000 |
| 0X021b0890 | MPPDCMPR2 | 0X00400a38 |
| 0X021b0020 | MMDC0_MDREF | 0X00007800 |
| 0X021b0818 | DDR_PHY_P0_MPODTCTRL | 0X00000227 |
| 0X021b0004 | MMDC0_MDPDC | 0X0002556D |
| 0X021b0404 | MMDC0_MAPSR | 0X00011006 |
關于I.MX6U 的DDR3 就講解到這里,因為牽扯到的寄存器太多了,因此沒有詳細的去分析這些寄存器,大家感興趣的可以對照著參考手冊去分析各個寄存器的含義以及配置值。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的NXP(I.MX6uLL)DDR3实验——DDR3初始化、校准、超频测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何把linux 安装到u盘,利用U盘装
- 下一篇: Win10系统中英文切换