IMX6ULL學(xué)習(xí)筆記(21)——MMDC接口使用(DDR3測(cè)試)

一、MMDC簡(jiǎn)介

MMDC 接口與 STM32 的 FSMC 接口類似,只不過 MMDC 接口專用于外接 DDR,并且 MMDC 外部引腳不復(fù)用。MMDC 是一個(gè)多模的 DDR 控制器,可以連接 16 位寬的 DDR3/DDR3L、16 位寬的 LPDDR2。

MMDC 是一個(gè)可配置、高性能的 DDR 控制器。MMDC 外設(shè)包含一個(gè)內(nèi)核(MMDC_CORE)和 PHY(MMDC_PHY),內(nèi)核和 PHY 的功能如下:

  • MMDC_CORE
    負(fù)責(zé)通過 AXI 接口與系統(tǒng)進(jìn)行通信,實(shí)現(xiàn) DDR 命令生成、DDR 命令優(yōu)化和讀寫數(shù)據(jù)路徑??刂普麄€(gè) MMDC 的功能實(shí)現(xiàn)。
  • MMDC_PHY
    負(fù)責(zé)時(shí)序調(diào)整和校準(zhǔn),使用特殊的校準(zhǔn)機(jī)制以確保數(shù)據(jù)被正常收發(fā), 最高支持 400MHz。

1.1 MMDC信號(hào)引腳

在使用 STM32 的時(shí)候 FMC/FSMC 的 IO 引腳是帶有復(fù)用功能的,如果不接 SRAM 或 SDRAM 的話 FMC/FSMC 是可以用作其他外設(shè) IO 的。但是,對(duì)于 DDR 接口就不一樣了,因?yàn)?DDR 對(duì)于硬件要求非常嚴(yán)格,因此 DDR 的引腳都是獨(dú)立的,一般沒有復(fù)用功能,只做為 DDR 引腳使用。I.MX6U 也有專用的 DDR 引腳如下:

1.2 MMDC時(shí)鐘源

默認(rèn)情況下 PLL2 的 PFD2 時(shí)鐘輸出作為 MMDC 的根時(shí)鐘,時(shí)鐘頻率為 400MHz(實(shí)際396MHz)。時(shí)鐘產(chǎn)生路徑如下圖所示:

PLL2 的 PFD2 經(jīng)過兩個(gè)時(shí)鐘選擇寄存器(標(biāo)號(hào)①和②)和一個(gè)時(shí)鐘分頻寄存器(標(biāo)號(hào)③)之后連接到 MMDC_CLK_ROOT。具體寄存器在時(shí)鐘樹中已經(jīng)標(biāo)出。特別注意的是,在程序中不能任意修改時(shí)鐘選擇寄存器以及時(shí)鐘分頻寄存器,因?yàn)槌绦蛘_\(yùn)行會(huì)使用 DDR,而不正確的修改 DDR 根時(shí)鐘會(huì)造成系統(tǒng)崩潰。

二、DDR簡(jiǎn)介

DDR 內(nèi)存是 SDRAM 的升級(jí)版本,SDRAM 分為 SDR SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。

DDR 全稱是 Double Data Rate SDRAM,也就是雙倍速率 SDRAM,看名字就知道 DDR 的速率(數(shù)據(jù)傳輸速率)比 SDRAM 高 1 倍!這 1 倍的速度不是簡(jiǎn)簡(jiǎn)單單的將 CLK 提高 1 倍,SDRAM 在一個(gè) CLK 周期傳輸一次數(shù)據(jù),DDR 在一個(gè) CLK 周期傳輸兩次數(shù)據(jù),也就是在上升沿和下降沿各傳輸一次數(shù)據(jù),這個(gè)概念叫做預(yù)取(prefetch),相當(dāng)于 DDR 的預(yù)取為 2bit,因此 DDR 的速度直接加倍!比如 SDRAM 速度一般是 133~200MHz,對(duì)應(yīng)的傳輸速度就是 133~200MT/s,在描述 DDR 速度的時(shí)候一般都使用 MT/s,也就是每秒多少兆次數(shù)據(jù)傳輸。133MT/S 就是每秒 133M 次數(shù)據(jù)傳輸,MT/s 描述的是單位時(shí)間內(nèi)傳輸速率。同樣 133~200MHz 的頻率,DDR 的傳輸速度就變?yōu)榱?266~400MT/S,所以大家常說的 DDR266、DDR400 就是這么來的。

DDR2 在 DDR 基礎(chǔ)上進(jìn)一步增加預(yù)取(prefetch),增加到了 4bit,相當(dāng)于比 DDR 多讀取一倍的數(shù)據(jù),因此 DDR2 的數(shù)據(jù)傳輸速率就是 533~800MT/s,這個(gè)也就是大家常說的 DDR2 533、DDR2 800。當(dāng)然了,DDR2 還有其他速度,這里只是說最常見的幾種。

DDR3 在 DDR2 的基礎(chǔ)上將預(yù)取(prefetch)提高到 8bit,因此又獲得了比 DDR2 高一倍的傳輸速率,因此在總線時(shí)鐘同樣為 266~400MHz 的情況下,DDR3 的傳輸速率就是 1066~1600MT/S。I.MX6U 的 MMDC 外設(shè)用于連接 DDR,支持 LPDDR2、DDR3、DDR3L,最高支持 16 位數(shù)據(jù)位寬??偩€速度為 400MHz(實(shí)際是 396MHz),數(shù)據(jù)傳輸速率最大為 800MT/S。這里我們講一下 LPDDR3、DDR3 和 DDR3L 的區(qū)別,這三個(gè)都是 DDR3,但是區(qū)別主要在于工作電壓,LPDDR3 叫做低功耗 DDR3,工作電壓為 1.2V。DDR3 叫做標(biāo)壓 DDR3,工作電壓為 1.5V,一般臺(tái)式內(nèi)存條都是 DDR3。DDR3L 是低壓 DDR3,工作電壓為 1.35V,一般手機(jī)、嵌入式、筆記本等都使用 DDR3L。

三、引腳確定

我使用的是 野火_EBF6ULL S1 Pro 開發(fā)板,DDR型號(hào)是 MT41K256M16TW-107,容量 256M*16 共 512M 字節(jié),數(shù)據(jù)寬度 16 位。

四、DDR3測(cè)試

4.1 下載DDR測(cè)試軟件和配置文件

NXP 提供了一個(gè)非常好用的 DDR 測(cè)試軟件,叫做 ddr_stress_tester。
官網(wǎng)下載:https://community.nxp.com/docs/DOC-102005
百度網(wǎng)盤:

打開下載地址,如下圖所示。

我們需要下載測(cè)試軟件和測(cè)試需要使用的配置文件。如下圖所示。

點(diǎn)擊標(biāo)號(hào)①,在附件中找到 配置文件,點(diǎn)擊附件下載即可。如下圖所示。

點(diǎn)擊標(biāo)號(hào)②,在附件中找到 下載工具,下載即可,如下圖所示。

下載完成并解壓如下圖所示:

4.2 配置文件說明

打開 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件,如下圖所示。

配置文件包括三部分內(nèi)容:

  • 配置文件的說明
    幫助信息,告訴用戶此文件如何使用。

  • 配置選項(xiàng)
    通過此表可以設(shè)置板子的 DDR 信息,最后生成一個(gè) .inc 結(jié)尾的 DDR 初始化腳本文件。

  • 根據(jù)配置選項(xiàng)自動(dòng)生成的.inc格式的配置文件
    這個(gè) .inc 文件就包含了 DDR 的初始化信息,一般都是寄存器地址和對(duì)應(yīng)的寄存器值。DDR測(cè)試軟件會(huì)用到這個(gè)文件。

4.2.1 配置選項(xiàng)

第二個(gè)文件是我們要修改的配置選項(xiàng),如下圖所示。

上圖中黃色和藍(lán)色選項(xiàng)框需要根據(jù)硬件平臺(tái)選擇即可,這里默認(rèn)是 NXP 官方評(píng)估板的配置參數(shù)。 如果使用的是 野火_EBF6ULL S1 Pro 開發(fā)板這些配置參數(shù)不用修改,保持默認(rèn)即可。

具體的配置界面,主要分為三部分:

① 驅(qū)動(dòng)信息(Device Information)
這部分內(nèi)容配置DDR芯片相關(guān)信息。各配置項(xiàng)介紹如下:

  • Manufacturer: DDR芯片廠商,默認(rèn)為鎂光(Micron),這個(gè)沒有意義,如果不改,配置文件也是可以使用的。
  • Memory part number: DDR芯片型號(hào),可以不用設(shè)置,沒有實(shí)際意義。
  • Memory type: DDR類型,有DDR3-800、DDR3-1066、DDR3-1333和DDR3-1600。這里只能通過下拉框選擇,根據(jù)你使用的DDR芯片選擇即可,我們選擇DDR3-1600。
  • DRAM density (Gb): 芯片容量,單位是Gb,我們的DDR容量是512M字節(jié) * 8 = 4Gb。容量根據(jù)實(shí)際容量選擇即可。
  • DRAM Bus Width: 數(shù)據(jù)寬度,16位。
  • Number of Banks: DDR banks數(shù)量,通常情況下DDR3L都是8個(gè)bank。如有特殊情況根據(jù)實(shí)際數(shù)量選擇即可。
  • Number of ROW Addresses: 行地址線數(shù)量,可選11~16條。這個(gè)要具體所使用的DDR3芯片來定,這里使用15條。
  • Number of COLUMN Addresses: 列地址線數(shù)量,可選9~12條。這個(gè)要具體所使用的DDR3芯片來定,這里使用10條。
  • Page Size (K): DDR芯片頁大小,我們使用的DDR頁大小是2K,其他芯片根據(jù)芯片手冊(cè)說明選擇即可。
  • Self-Refresh Temperature (SRT): 自刷新,這個(gè)選項(xiàng)框是對(duì)于 i.MX6UL 來說是不可修改的。
  • tRCD=tRP=CL (ns)、tRC Min (ns)、tRAS Min (ns): DDR相關(guān)延時(shí)相關(guān)參數(shù),這些參數(shù)從DDR芯片數(shù)據(jù)手冊(cè)中獲得。

② 系統(tǒng)信息(System Information)
系統(tǒng)信息大多是固定的,通常情況下不需要修改,具體介紹如下:

  • i.Mx Part: 芯片類型,固定為i.MX6UL。
  • Bus Width: 數(shù)據(jù)總線寬度,16位。
  • Density per chip select (Gb): 每片DDR芯片的容量,單位Gb,我們的DDR容量是512M字節(jié)*8 = 4Gb,根實(shí)際使用的DDR芯片選擇即可。
  • Number of Chip Selects used: 使用了多少片DDR芯片,我們使用了1片,根據(jù)實(shí)際使用數(shù)量選擇。
  • Total DRAM Density (Gb): 總共的DDR容量,我們使用了1片512M字節(jié)的DDR3L,所以這里選擇4。
  • DRAM Clock Freq (MHz): DDR工作頻率,默認(rèn)400MHz。
  • DRAM Clock Cycle Time (ns): 一個(gè)時(shí)鐘周期的時(shí)間長(zhǎng)度,根據(jù)DDR工作頻率計(jì)算即可,1/400M =2.5ns。
  • Address Mirror (for CS1): 地址鏡像,僅CS1有效。選擇Disable。

③ 硬件SI參數(shù)(SI Configuratin)
這里設(shè)置的是硬件阻抗,保持默認(rèn)即可。

4.2.2 保存配置信息

修改完成后,配置信息自動(dòng)更新到 RealView.inc 文件,如下圖所示:

RealView.inc 不能直接用,我們需要新建一個(gè)以 .inc 結(jié)尾的文件,名字自定義,但最好不要用中文。

使用 VS code 打開 RealVies.inc 文件(也可使用其他工具打開)。復(fù)制原配置文件中的全部?jī)?nèi)容到新建的 ALIENTEK_512MB.inc 文件,保存即可。后面 DDR 測(cè)試軟件會(huì)使用到該配置文件。

4.3 安裝ddr_stress_tester

雙擊 ddr_stress_tester_v3.00_setup.exe,軟件會(huì)自動(dòng)生成我們需要的測(cè)試工具,如下圖所示。

一直點(diǎn)擊下一步即可,最終會(huì)在當(dāng)前文件夾下生成我們需要的測(cè)試軟件如下圖所示。

進(jìn)入生成的工具,如下圖所示。

4.4 DDR校準(zhǔn)

雙擊DDR_Tester.exe,打開測(cè)試軟件如下圖所示。

根據(jù)使用的硬件平臺(tái)進(jìn)行配置。

配置完成后,將開發(fā)板設(shè)置為 USB 啟動(dòng)方式,點(diǎn)擊 Download 按鈕將測(cè)試代碼下載到開
發(fā)板中,下載完成以后 DDR Test Tool 下方的信息窗口就會(huì)輸出一些內(nèi)容。

DDR TestTool 工具有三個(gè)測(cè)試項(xiàng):DDR Calibration、DDR Stess Test 和 32bit Memory Read/Write,我們首先要做校準(zhǔn)測(cè)試,因?yàn)椴煌?PCB、不同的 DDR3L 芯片對(duì)信號(hào)的影響不同,必須要進(jìn)行校準(zhǔn),然后用新的校準(zhǔn)值重新初始化 DDR。點(diǎn)擊 Calibraton 按鈕,校準(zhǔn)完成后會(huì)輸出校準(zhǔn)后的寄存器值,如下圖所示。

如果校準(zhǔn)成功軟件會(huì)輸出成功提示信息,如上圖標(biāo)號(hào)①所示。標(biāo)號(hào)②處是校準(zhǔn)后得到的6個(gè)寄存器的值, 我們需要用這些寄存器的值替換校準(zhǔn)文件中的值。

例如我們使用的配置文件為 ALIENTEK_512MB.inc,使用 VS code 打開后直接搜索寄存器地址,例如修改 MMDC_MPWLDECTRL0 寄存器,則直接搜索 0x021b080c,找到后直接使用校準(zhǔn)后的值 0x00050003 替換現(xiàn)有值即可。特別提醒,默認(rèn)情況下,配置文件中找不到 MMDC_MPWLDECTRL1(0x021b0810)MPDGCTRL1 PHY0(0x021b0840), 這兩個(gè)寄存器直接忽略即可。修改完成后保存即可。

ALIENTEK_512MB.inc 修改完成以后重新加載并下載到開發(fā)板中,至此 DDR 校準(zhǔn)完成。

4.5 DDR性能測(cè)試

校準(zhǔn)完成以后就可以進(jìn)行 DDR3 超頻測(cè)試,超頻測(cè)試的目的就是為了檢驗(yàn) DDR3 硬件設(shè)計(jì)合不合理,一般 DDR3 能夠超頻到比標(biāo)準(zhǔn)頻率高 10%~15%的話就認(rèn)為硬件沒有問題。

DDR Test Tool 支持 DDR3 超頻測(cè)試,只要指定起始頻率和終止頻率,那么工具就會(huì)自動(dòng)開始一點(diǎn)點(diǎn)的增加頻率,直到達(dá)到終止頻率或者測(cè)試失敗。

設(shè)置好起始頻率為 400MHz,終止頻率為 600MHz,設(shè)置好以后點(diǎn)擊 Stress Test 按鈕開啟超頻測(cè)試,超頻測(cè)試時(shí)間比較久,請(qǐng)耐心等待。

從上圖可以看出,當(dāng)超頻到556MHz是出現(xiàn)了錯(cuò)誤,說明我測(cè)試的這塊開發(fā)板最高頻率為552MHz, 不同開發(fā)板稍有差別,但都能滿足400M的標(biāo)準(zhǔn)工作頻率。


? 由 Leung 寫于 2023 年 3 月 31 日

? 參考:13. DDR測(cè)試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容