NXP(I.MX6uLL)DDR3实验——DDR3初始化、校准、超频测试
DDR3L 初始化與測(cè)試
- ddr_stress_tester簡介(DDR壓力測(cè)試工具)
- DDR3L驅(qū)動(dòng)配置
- DDR3L校準(zhǔn)
- DDR3L超頻測(cè)試
- DDR3L驅(qū)動(dòng)總結(jié)
ddr_stress_tester簡介(DDR壓力測(cè)試工具)
NXP 提供了一個(gè)非常好用的DDR 初始化工具,叫做ddr_stress_tester。此工具已經(jīng)放到了開發(fā)板光盤中,路徑為:5 、開發(fā)工具->5 、NXP 官方DDR 初始化與測(cè)試工具->ddr_stress_tester_v2.90_setup.exe.zip,我們簡單介紹一下ddr_stress_tester 工具,此工具特點(diǎn)如下:
- ①、此工具通過USB OTG 接口與開發(fā)板相連接,也就是通過USB OTG 口進(jìn)行DDR 的初始化與測(cè)試。
- ②、此工具有一個(gè)默認(rèn)的配置文件,為excel 表,通過此表可以設(shè)置板子的DDR 信息,最后生成一個(gè).inc 結(jié)尾的DDR 初始化腳本文件。這個(gè).inc 文件就包含了DDR 的初始化信息,一般都是寄存器地址和對(duì)應(yīng)的寄存器值。
- ③、此工具會(huì)加載.inc 表里面的DDR 初始化信息,然后通過USB OTG 接口向板子下載DDR 相關(guān)的測(cè)試代碼,包括初始化代碼。
- ④、對(duì)此工具進(jìn)行簡單的設(shè)置,即可開始DDR 測(cè)試,一般要先做校準(zhǔn),因?yàn)椴煌腜CB其結(jié)構(gòu)肯定不同,必須要做一次校準(zhǔn),校準(zhǔn)完成以后會(huì)得到兩個(gè)寄存器對(duì)應(yīng)的校準(zhǔn)值,我們需要用這個(gè)新的校準(zhǔn)值來重新初始化DDR。
- ⑤、此工具可以測(cè)試板子的DDR 超頻性能,一般認(rèn)為DDR 能夠以超過標(biāo)準(zhǔn)工作頻率10%~20%穩(wěn)定工作的話就認(rèn)定此硬件DDR 走線正常。
- ⑥、此工具也可以對(duì)DDR 進(jìn)行12 小時(shí)的壓力測(cè)試。
我們來看一下正點(diǎn)原子開發(fā)板光盤里面5、開發(fā)工具->6、NXP 官方DDR 初始化與測(cè)試工具目錄下的文件,如圖23.5.1.1 所示:
我們依次來看一下圖23.5.1.1 中的這些文件的作用:
- ①、ALIENTEK_256MB.inc 和ALIENTEK_512MB.inc,這兩個(gè)就是通過excel 表配置生成的,針對(duì)正點(diǎn)原子開發(fā)板的DDR 配置腳本文件。
- ②、ddr_stress_tester_v2.90_setup.exe.zip 就是我們要用的ddr_stress_tester 軟件,大家自行安裝即可,一定要記得安裝路徑。
- ③、I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 就是NXP 編寫的針對(duì)I.MX6UL 的DDR 初始化execl 文件,可以在此文件里面填寫DDR 的相關(guān)參數(shù),然后就會(huì)生成對(duì)應(yīng)的.inc 初始化腳本。
- ④、最后兩個(gè)PDF 文檔就是關(guān)于I.MX6 系列的DDR 調(diào)試文檔,這兩個(gè)是NXP 編寫的。
DDR3L驅(qū)動(dòng)配置
1、安裝ddr_stress_tester
首先要安裝ddr_stress_testr 軟件,安裝方法很簡單,這里就不做詳細(xì)的講解了。但是一定要記得安裝路徑!因?yàn)槲覀円桨惭b路徑里面找到測(cè)試軟件。比如我安裝到了D:\Program Files (x86)里面,安裝完成以后就會(huì)在此目錄下生成一個(gè)名為ddr_stress_tester_v2.90 的文件夾,此文件夾就是DDR 測(cè)試軟件,進(jìn)入到此文件夾中,里面的文件如圖23.5.2.1 所示:
圖23.5.2.1 中的DDR_Tester.exe 就是我們稍后要使用的DDR 測(cè)試軟件。
2、配置DDR3L,生成初始化腳本
將開發(fā)板光盤中的:5 、開發(fā)工具->5 、NXP 官方DDR 初始化與測(cè)試工具
->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 中最下方有三個(gè)選項(xiàng)卡,這三個(gè)選項(xiàng)卡的功能如下:
- ①、Readme 選項(xiàng)卡,此選項(xiàng)卡是幫助信息,告訴用戶此文件如何使用。
- ②、Register Configuration 選項(xiàng)卡,顧名思義,此選項(xiàng)卡用于完成寄存器配置,也就是配置DDR3,此選項(xiàng)卡是我們重點(diǎn)要講解的。
- ③、RealView.inc 選項(xiàng)卡,當(dāng)我們配置好Register Configuration 選項(xiàng)卡以后,RealView.inc選項(xiàng)卡里面就保存著寄存器地址和對(duì)應(yīng)的寄存器值。我們需要另外新建一個(gè)后綴為.inc 的文件來保存RealView.inc 中的初始化腳本內(nèi)容,ddr_stress_testr 軟件就是要使用此.inc 結(jié)尾的初始化腳本文件來初始化DDR3。
選中“Register Configuration”選項(xiàng)卡,如圖23.5.2.4 所示:
圖23.5.2.4 就是具體的配置界面,主要分為三部分:
①、Device Information
DDR3 芯片設(shè)備信息設(shè)置,此部分需要根據(jù)所使用的DDR3 芯片來設(shè)置,具體的設(shè)置項(xiàng)如下:
-
Manufacturer:DDR3 芯片廠商,默認(rèn)為鎂光(Micron),這個(gè)沒有意義,比如我們用的nanya的DDR3,但是此配置文件也是可以使用的。
-
Memory part number:DDR3 芯片型號(hào),可以不用設(shè)置,沒有實(shí)際意義。
-
Memory type:DDR3 類型,有DDR3-800、DDR3-1066、DDR3-1333 和DDR3-1600,在此選項(xiàng)右側(cè)有個(gè)下拉箭頭,點(diǎn)擊下拉箭頭即可查看所有的可選選項(xiàng),如圖23.5.2.5 所示:
從圖23.5.2.5 可以看出,最大只能選擇DDR3-1600,沒有DDR3-1866 選項(xiàng),因此我們就只能選擇DDR3-1600。 -
DRAM density(Gb):DDR3 容量,根據(jù)實(shí)際情況選擇,同樣右邊有個(gè)下拉箭頭,打開下拉箭頭即可看到所有可選的容量,如圖23.5.2.6 所示:
從圖23.5.2.6 可以看出,可選的容量為1、2、4 和8Gb,如果使用的512MB 的DDR3 就應(yīng)該選擇4,如果使用的256MB 的DDR3 就應(yīng)該選擇2。 -
DRAM Bus width:DDR3 位寬,可選的選項(xiàng)如圖23.5.2.7 所示:
正點(diǎn)原子ALPHA 開發(fā)板所有的DDR3 都是16 位寬,因此選擇16。 -
Number of Banks:DDR3 內(nèi)部BANK 數(shù)量,對(duì)于DDR3 來說內(nèi)部都是8 個(gè)BANK,因此固定為8。
-
Number of ROW Addresses:行地址寬度,可選11~16 位,這個(gè)要具體所使用的DDR3 芯片來定,如果是EMMC 核心板(DDR3 型號(hào)為NT5CC256M16EP-EK),那么行地址為15 位。如果是NAND 核心板(DDR3 型號(hào)為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 時(shí)間參數(shù),要查閱所使用的DDR3 芯片手冊(cè),NT5CC256M16EP-EK 和NT5CC128M16JR-EK 都為13.91ns,因此在后面填寫13.91。
-
tRC Min(ns):DDR3 的tRC 時(shí)間參數(shù),NT5CC256M16EP-EK 和NT5CC128M16JR-EK 都為47.91ns,因此在后面填寫47.91。
-
tRAS Min(ns):DDR3 的tRAS 時(shí)間參數(shù),NT5CC256M16EP-EK 和NT5CC128M16JR-EK都為34ns,因此在后面填寫34。
②、System Information
此部分設(shè)置I.MX6UL/6ULL 相關(guān)屬性,具體的設(shè)置項(xiàng)如下:
-
i.Mx Part:固定為i.MX6UL。
-
Bus Width:總線寬度,16 位寬。
-
Density per Chip select(Gb):每個(gè)片選對(duì)應(yīng)的DDR3 容量,可選1~16,根據(jù)實(shí)際所使用的DDR3 芯片來填寫,512MB 的話就選擇4,256MB 的話就選擇2。
-
Number of Chip Select used:使用幾個(gè)片選信號(hào)?可選擇1 或2,正點(diǎn)原子所有的核心板都只使用了一個(gè)片選信號(hào),因此選擇1。
-
Total DRAM Density(Gb):整個(gè)DDR3 的容量,單位為Gb,如果是512MB 的話就是4,如果是256MB 的話就是2。
-
DRAM Clock Freq(MHz):DDR3 工作頻率,設(shè)置為400MHz。
-
DRAM Clock Cycle Time(ns):DDR3 工作頻率對(duì)應(yīng)的周期,單位為ns,如果工作在400MHz,那么周期就是2.5ns。
-
Address Mirror(for CS1):地址鏡像,僅CS1 有效,此處選擇關(guān)閉,也就是“Disable”,此選項(xiàng)我們不需要修改。
③、SI Configuratin
此部分是信號(hào)完整性方面的配置,主要是一些信號(hào)線的阻抗設(shè)置,這個(gè)要咨詢硬件工程師,這里我們直接使用NXP 的默認(rèn)設(shè)置即可。
關(guān)于DDR3 的配置我們就講解到這里,如果是EMMC 核心板(DDR3 型號(hào)為
NT5CC256M16EP-EK),那么配置如圖23.5.2.8 所示:
NAND 核心板配置(DDR3 型號(hào)為NT5CC128M16JR-EK)配置如圖23.5.2.9 所示:
后面我就以EMMC 核心板為例講解了,配置完成以后點(diǎn)擊RealView.inc 選項(xiàng)卡,如圖23.5.2.10 所示:
圖23.5.2.10 中的RealView.inc 就是生成的配置腳本,全部是“寄存器地址=寄存器值”這種形式。RealView.inc 不能直接用,我們需要新建一個(gè)以.inc 結(jié)尾的文件,名字自定義,比如我名為“ALIENTEK_512MB”的.inc 文件,如圖23.5.2.11 所示:
用notepad++打開ALIENTEK_512MB.inc 文件,然后將圖23.5.2.10 中RealView.inc 里面的所有內(nèi)容全部拷貝到ALIENTEK_512MB.inc 文件中,完成以后如圖23.5.2.12 所示:
至此,DDR3 配置就全部完成,DDR3 的配置文件ALIENTEK_512MB.inc 已經(jīng)得到了,接下來就是使用此配置文件對(duì)正點(diǎn)原子ALPHA 開發(fā)板的DDR3 進(jìn)行校準(zhǔn)并進(jìn)行超頻測(cè)試。
DDR3L校準(zhǔn)
首先要用DDR_Tester.exe 軟件對(duì)正點(diǎn)原子ALPAH 開發(fā)板的DDR3L 進(jìn)行校準(zhǔn),因?yàn)椴煌腜CB 其走線不同,必須要進(jìn)行校準(zhǔn),經(jīng)過校準(zhǔn)一會(huì)DDR3L 就會(huì)工作到最佳狀態(tài)。
1、將開發(fā)板通過USB OTG 線連接到電腦上
DDR_Tester 軟件通過USB OTG 線將測(cè)試程序下載到開發(fā)板中,因此首先需要使用USB OTG 線將開發(fā)板和電腦連接起來,如圖23.5.3.1 所示:
USB OTG 線連接成功以后還需要如下兩步:
①、彈出TF 卡,如果插入了TF 卡,那么一定要彈出來!!
②、設(shè)置撥碼開關(guān)從USB 啟動(dòng),如圖23.5.3.2 所示:
2、DDR_Tester 軟件
雙擊“DDR_Tester.exe”,打開測(cè)試軟件,如圖23.5.3.3 所示:
點(diǎn)擊圖23.5.3.3 中的“Load init Script ”加載前面已經(jīng)生成的初始化腳本文件
ALIENTEK_512MB.inc,注意,不能有中文路徑,否則加載可能會(huì)失敗!完成以后如圖23.5.3.4所示:
ALIENTEK_512MB.inc 文件加載成功以后還不能直接用,還需要對(duì)DDR Test Tool 軟件進(jìn)行設(shè)置,設(shè)置完成以后如圖23.5.3.5 所示:
一切設(shè)置好以后點(diǎn)擊圖23.5.3.5 中右上方大大的“Download”按鈕,將測(cè)試代碼下載到開發(fā)板中(具體下載到哪里筆者也不清楚,估計(jì)是I.MX6ULL 內(nèi)部的OCRAM),下載完成以后DDR Test Tool 下方的信息窗口就會(huì)輸出一些內(nèi)容,如圖23.5.3.6 所示:
圖23.5.3.6 輸出了一些關(guān)于板子的信息,比如SOC 型號(hào)、工作頻率、DDR 配置信息等等。
DDR Test Tool 工具有三個(gè)測(cè)試項(xiàng):DDR Calibration、DDR Stess Test 和32bit Memory Read/Write,我們首先要做校準(zhǔn)測(cè)試,因?yàn)椴煌腜CB、不同的DDR3L 芯片對(duì)信號(hào)的影響不同,必須要進(jìn)行校準(zhǔn),然后用新的校準(zhǔn)值重新初始化DDR。點(diǎn)擊“Calibraton”按鈕,如圖23.5.3.7 所示:
點(diǎn)擊圖23.5.3.7 中的“Calibration”按鈕以后就會(huì)自動(dòng)開始校準(zhǔn),最終會(huì)得到Write levelingcalibtarion、Read DQS Gating Calibration、Read calibration 和Write calibration,一共四種校準(zhǔn)結(jié)果,校準(zhǔn)結(jié)果如下:
所謂的校準(zhǔn)結(jié)果其實(shí)就是得到了一些寄存器對(duì)應(yīng)的值,比如MMDC_MPWLDECTRL0 寄存器地址為0X021B080C,此寄存器是PHY 寫平衡延時(shí)寄存器0,經(jīng)過校準(zhǔn)以后此寄存器的值應(yīng)該為0X00000000 ,以此類推。我們需要修改ALIENTEK_512MB.inc 文件,找到
MMDC_MPWLDECTRL0、MMDC_MPWLDECTRL1、MPDGCTRL0 PHY0、MPDGCTRL1 PHY0、MPRDDLCTL PHY0 和MPWRDLCTL PHY0 這6 個(gè)寄存器,然后將其值改為示例代碼23.5.3.1中的校準(zhǔn)后的值。注意,在ALIENTEK_512MB.inc 中可能找不到MMDC_MPWLDECTRL1(0x021b0810)和MPDGCTRL1 PHY0(0x021b0840)這兩個(gè)寄存器,找不到就不用修改了。
ALIENTEK_512MB.inc 修改完成以后重新加載并下載到開發(fā)板中,至此DDR 校準(zhǔn)完成,校準(zhǔn)的目的就是得到示例代碼23.5.3.1 中這6 個(gè)寄存器的值!
DDR3L超頻測(cè)試
校準(zhǔn)完成以后就可以進(jìn)行DDR3 超頻測(cè)試,超頻測(cè)試的目的就是為了檢驗(yàn)DDR3 硬件設(shè)計(jì)合不合理,一般DDR3 能夠超頻到比標(biāo)準(zhǔn)頻率高10%~ 15%的話就認(rèn)為硬件沒有問題,因此對(duì)于正點(diǎn)原子的ALPHA 開發(fā)板而言,如果DDR3 能夠超頻到440MHz~460MHz 那么就認(rèn)為DDR3 硬件工作良好。
DDR Test Tool 支持DDR3 超頻測(cè)試,只要指定起始頻率和終止頻率,那么工具就會(huì)自動(dòng)開始一點(diǎn)點(diǎn)的增加頻率,直到達(dá)到終止頻率或者測(cè)試失敗。設(shè)置如圖23.5.4.1 所示:
圖23.5.4.1 中設(shè)置好起始頻率為400MHz,終止頻率為600MHz,設(shè)置好以后點(diǎn)擊“StressTest”開啟超頻測(cè)試,超頻測(cè)試時(shí)間比較久,大家耐心等待測(cè)試結(jié)果即可。超頻測(cè)試完成以后結(jié)果如圖23.5.4.2 所示(因?yàn)橛布煌?#xff0c;測(cè)試結(jié)果可能有些許區(qū)別):
從圖23.5.4.2 可以看出,正點(diǎn)原子的ALPAH 開發(fā)板EMMC 核心板DDR3 最高可以超頻到556MHz,當(dāng)超頻到561MHz 的時(shí)候就失敗了。556MHz 超過了460MHz,說明正點(diǎn)原子的ALPHA開發(fā)板DDR3 硬件是沒有任何問題的。
DDR3L驅(qū)動(dòng)總結(jié)
ALIENTEK_512MB.inc 就是我們最終得到的DDR3L 初始化腳本,其中包括了時(shí)鐘、IO 等初始化。I.MX6U 的DDR3 接口關(guān)于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 外設(shè)寄存器初始化,如表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 |
關(guān)于I.MX6U 的DDR3 就講解到這里,因?yàn)闋砍兜降募拇嫫魈嗔?#xff0c;因此沒有詳細(xì)的去分析這些寄存器,大家感興趣的可以對(duì)照著參考手冊(cè)去分析各個(gè)寄存器的含義以及配置值。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的NXP(I.MX6uLL)DDR3实验——DDR3初始化、校准、超频测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何把linux 安装到u盘,利用U盘装
- 下一篇: RTC实时时钟实验(低功耗、纽扣电池供电