重要:DDRツールまたはサポート・ドキュメントに関してご質問または報告したい問題がある場合は、 i.MXコミュニティでサポート・チケットを作成してください。プライベート・メッセージやダイレクト・メールは常時チェックされず、返信されないことにご留意ください。
i.MX6/7 DDRストレス・テスト・ツールは、DDRパラメータに合わせて微調整されたPCベースのソフトウェアで、OSを使用しない単一タスク環境でDDR性能の検証に使用される軽量ツールです。書き込みレベリング、DQSゲーティング、読み取り/書き込み遅延キャリブレーション機能を実行します。
このページで説明されているツールは、以下のi.MX 6/7シリーズのSoCを対象としています。
DDRストレステストツールは、上記のすべてのi.MX SoCをサポートしていますが、ツールで指定されているサポート対象のi.MX SoCの一部は、次のように複数のi.MX SoCをサポートしています。
i.MX 6/7シリーズのDDRツールを使用すると、デバイス構成(密度、チップ/セレクトの数など)やボードのレイアウト(データ・バス・ビットのスウィズリングなど)に基づいて、カスタムのDRAM初期値の生成やテストが実行できるようになります。このプロセスの次は、ブートローダとOSの起動に進むことができます。OSが起動したら、OSベースのメモリ・テスト(Linux memtesterなど)を実行して、DDRメモリ・インターフェースをさらに検証・テストすることをお勧めします。
i.MX 6/7シリーズDDRツールの構成要素は以下のとおりです。
DDRストレス・テストの実行方法は3通りあり、それぞれ、添付のZIPファイルで取りあげられています。以下では、各方法の概要と関連ZIPファイルの命名規則について説明しています。
オプション 1 GUIベース:
GUI実行ファイルを実行し、USB経由でホストPCにボードを接続します。
オプション2 DDRストレステスター:JTAGインターフェース
JTAGインターフェース経由でボードに接続されたハードウェア・デバッガを使用して、ELFファイルをi.MX SoCのOCRAM(内部RAM)にダウンロードし、実行を開始します。結果はUARTシリアル・ポート(115200-8-n-1)に表示されます。
オプション 3 U-Boot:
ブートローダのU-Bootを起動し、U-Boot内のコマンドを使用してbinファイルをSoC OCRAMにダウンロードし、実行を開始します。結果はUARTシリアルポート(115200-8-n-1)に表示されます。
この方法によるとU-BootからDDRストレス・テストをロードして実行できますが、NXPではシステム・テストとデバッグにはGUIベースのバージョンを実行することを強くお勧めしています。U-Bootを使用する方法は、USBもJTAG接続もない生産中のシステム向けの「最後の手段」と考えられ、その根拠として以下が挙げられます。
U-Bootの新しいバージョンでは、SDカード(ブート・メディア)からSoC内部のOCRAM(別名IRAM)にDDRストレス・テスト・コードを直接ロードできません。そのため手順は、まずDDRストレス・テスト・コードをDDRにロードしてから、OCRAMにコピーする(下記手順を参照)という形に変更されます。
u-boot> dcache off;icache off;fatload mmc 2:1 0x12000000 ddr-test-uboot-jtag-mx6dq.bin;cp.b 0x12000000 0x00907000 0x20000;go 0x00907000
U-BootはDDRストレス・テストの動作と競合する可能性のある多くのペリフェラルを初期化するため、テストの実行前にこれらのペリフェラルをクロック・ゲーティングする必要があります。そのため、上記の手順を次のように拡張することを強くお勧めします。
u-boot> dcache off;icache off;fatload mmc 2:1 0x12000000 ddr-test-uboot-jtag-mx6dq.bin;cp.b 0x12000000 0x00907000 0x20000;
u-boot> mw 0x020c4068 0x00C0000F;
u-boot> mw 0x020c406c 0x00000000;
u-boot> mw 0x020c4074 0x3F300000;
u-boot> mw 0x020c4078 0x0000F300;
u-boot> mw 0x020c407c 0x0F000003;
u-boot> mw 0x020c4080 0x000003FC;
u-boot> go 0x00907000
上記の手順では、各クロック・ゲート・レジスタに別々のコマンドで書き込むことをお勧めします(「mw」で始まるコマンドを参照)。SoCでは各クロックのゲーティングに特定の時間を必要とするため、新しいコマンド・ライン書き込みでこのシーケンスを実行すると、SoCが目的のクロックをゲーティングする時間を確保できます。
| ストレス・テストのリビジョン | 特長 | コメント |
|---|---|---|
| 3.00 |
GUIバージョンにi.MX 7ULPのサポートを追加 |
既知の問題:USBハブまたは一部のPC環境下でUSB接続が不安定になります。 |
| 2.92 |
発生していないのにエラーが報告されるという特殊なケースを回避するために、ライト・レベリング・キャリブレーション・コードのエラーチェックに軽微な修正を加えました。 |
|
| 2.91 |
コード内の競合状態により、キャリブレーションルーチンが遅延値を見つけられなくなる可能性がある書き込みレベリングキャリブレーションコードの問題を解決しました。 |
DDR3をサポートするMX6シリーズのSoCにのみ適用されます。 |
| 2.90 |
書き込みキャリブレーションを行う際には、DDRスクリプトが行うように、書き込み遅延ラインレジスタ(MMDC_MPWRDLCTL)の設定を予約してください。以前のリリースでは、MMDC_MPWRDLCTLはデフォルトで0x40404040に変更されていました。 |
*詳細については、リリース・ノートを参照してください
_________________________________________________________________________________________________________________________________________
FAQ
Q:「ERROR: DCD addr is out of valid range(エラー:DCD addrは有効な範囲外です)」というエラー・メッセージが表示されます。このエラーはなぜ発生し、どうすれば解決できるでしょうか?
A:Register Programming Aidの使用時に、DCD範囲でサポートされていないレジスタ書き込みが発生することがあります。次の項目を探して、DDR初期化スクリプトからコメント・アウトしてください。
wait = on setmem /16 0x020bc000 = 0x30 // disable watchdog (note the address for this may be different between i.MX6x devices)
Q:「DDR Density(密度)」プルダウン・メニューにはどのような目的があり、どのように選択すればよいですか?
A. DDR密度のプルダウンメニューでは、ユーザーがボードに実際に搭載されている密度よりも小さいDDR密度をテストするオプションを選択できます。これを行う利点は、テスト時間を短縮し、ユーザーがシステムの「クイックテスト」を実行できるようにすることです。重要:ユーザーは、この値をボードでサポートされている密度よりも高く設定しないことが必須です。そうすると、ストレステストが失敗したり、ロックアップしたりします。
DDR密度の意味は、テストされるメモリ・タイプ(DDR3またはLPDDR2)によって異なります。
DDR3の場合、これはチップ・セレクトあたりの密度を表します。つまり、ボードに2つのチップ・セレクトがあり、各チップ・セレクトに512MBがある場合は、単純に512MB以下を選択します。デフォルト設定では、検出された密度がチップ・セレクトごとに設定されます。
LPDDR2の場合は、チャネルあたりの密度を指します。これは、2チャネルLPDDR2メモリ(MX6DQ、MX6DL)をサポートするMX6デバイスにのみ関連します。1つのLPDDR2チャネルのみをサポートする他のMX6デバイスの場合は、そのチャネルの合計密度(最大設定)を指します。LPDDR2の場合、(チャネルごとの)チップ・セレクト数はテストの密度の選択には影響しないという点に注意する必要があります。ストレス・テストでは両方のチップ・セレクトがチャネルごとに1つの密度に結合されるためです。たとえば、2GBのLPDDR2デバイスに2つのチャネルがあり、各チャネルに2つのチップ・セレクトがあるとしましょう。チップ・セレクトあたりの容量はチャネルごとに512MBとなります。各チャネルで両方のチップ・セレクトを組み合わせると、チャネルごとの容量は1GBになると言うこともできます。この場合は、DDR密度ドロップダウン・メニューで(最大設定の)1GBを選択します。これはデフォルト設定でもありますが、1チャネルにつき1GBが実際にテストされているという確信を持つために1GBを選択してもまったく問題ありません。
ここで、チャネル(LPDDR2)とチップ・セレクトが1つずつしかなく、密度が128MBであると仮定します。この場合、選択できる最大DDR密度は128MBです。
チャネルが1つ、チップ・セレクトが2つあり、各チップ・セレクトの密度が128MBであると仮定する場合は、選択できる最大DDR密度は256MB(両方のチップ・セレクトの合計)です。
MX7Dについては、実際の密度を入力する必要がありますのでご注意ください。MX6xシリーズでは、このフィールドをデフォルトのままにしておくと、DDRストレス・テストによりDDR初期化スクリプトでサポートされている密度が確認されます。MX7D DDRコントローラの設計は異なり、この機能はサポートされていないため、ユーザーは実際の密度を入力する必要があります(MX7Dの密度の使用とチップ選択の数の詳細については、DDR CS設定に関する次のFAQを参照してください)。
Q. 「DDR CS」プルダウンオプションの目的は何ですか?
A. 答えは、どのプロセッサをテストしているかによって異なります。
i.MX 6xシリーズの場合:
このプルダウン・メニューには、1つのチップ・セレクト(CS0)、または(*2チップ・セレクト構成の場合*)すべてのチップ・セレクト(両方)をテストするオプションがあります。2チップ・セレクト構成がある場合にテスト時間を短縮したい場合は、1つのチップ・セレクトのみをテストできます。それ以外の場合は、両方のチップ・セレクトをテストすることができます。1チップ・セレクト構成で「ALL(すべて)」を選択すると、ストレス・テストでエラーが返されることにご注意ください。
i.MX 7Dの場合:
MX7D DDRコントローラの設計は異なり、DDRストレス・テストでは、ユーザーはボード上でサポートされているすべての密度を入力する必要があります。当然1つのチップ・セレクトがテストされてから、次に進むため、チップ・セレクト・フィールドはそのまま(0)にします。たとえば、チップ・セレクトを2つ使用していて、各チップ・セレクトが512MBであると仮定する場合は、DDR密度フィールドに1GBを入力して、両方のチップ・セレクトがテストされるようにします。(テスト時間短縮のために)ボードに表示されている密度よりも低い密度を入力できますが、両方のチップ・セレクトがテストされない可能性があることに留意してください。
Q:DDRキャリブレーションを実行するのにDDRストレス・テスト・ツールを使用して結果を取得しています。取得されるパラメータはU-Bootのflash_header.Sに自動的に書き込まれますか、それとも手動で書き込みますか?
A:DDRストレス・テスト・ツールから取得したキャリブレーション値は、flash_header.Sファイルまたは他のDDR初期化スクリプトで手動で更新される必要があります。
Q:MX7DでDDRストレス・テストを実行してキャリブレーションを試みると、キャリブレーションがサポートされていないというエラーが表示されますが、これは予想される動作ですか?
A:はい、MX7ではキャリブレーションはサポートされておらず、必要もありません。MX7はMX6シリーズとは異なるメモリ・コントローラを使用しているためです。MX6シリーズのメモリ・コントローラには、MX7メモリ・コントローラにはないキャリブレーションのサポートが組み込まれています。
Q:MX7でDDRストレス・テストのGUIバージョンを実行し、DDR密度をデフォルトのままにしておくと、密度の指定が必要というエラーがツールに表示されます。なぜでしょうか?
A:これは、MX7がMX6 シリーズとは異なるメモリ・コントローラを使用しているためです。MX6シリーズでは、メモリ・コントローラのレジスタ設定からメモリ密度を計算することが可能でした。MX7メモリ・コントローラの設計は異なっており、レジスタ設定に基づいてサポートされる密度を簡単に計算することはできません。代わりに、ユーザーがボード上の密度を確認し、DDR密度のプルダウン・メニューでこの値を選択する必要があります。
Q。書き込みレベリングキャリブレーションを実行すると、書き込みレベリングのキャリブレーション値が1/8クロックサイクルを超える場合、WALATを1に設定する必要があるという注意が表示されることがあります。これはどういう意味ですか?
A. 特定の i.MX 6 デバイスのリファレンス・マニュアルの MMDC 章では、MDMISC レジスタで WALAT を設定する必要性が次のように説明されています。
「WALATの目的は、バースト・ライト操作の最後に時間遅延を加え、Write Post Amble Delay(tWPST)のJEDEC時間仕様への準拠を徹底することにあります(DQSストローブは、バースト・ライトの終了時のリリース前にクロック・サイクルの30%以上の間、低レベルで維持されます)。WL_DL_ABS_OFFSETn レジスタ・フィールドのいずれかの値が「1F」より大きい場合、WALATを「1」(サイクル追加遅延)に設定する必要があります。WL_CYC_DELnレジスタ・フィールドによって追加されるフルサイクル遅延では、WALATをさらに引き上げる必要があります」
したがって、ライト・レベリング・キャリブレーション・ルーチンで0x1Fより大きい遅延値が検出された場合、WALATの設定が必要なことをユーザーに通知し、DDR3初期化スクリプトを更新してWALATが確実に設定されるようにします。ライト・レベリングの遅延値が実行ごとに変動しているとユーザーが気付くことが時々ありますが、これはごく普通のことです。この遅延が「ボーダーライン」である、つまり0x1Fより大きいこともあれば、それよりやや小さいこともある場合は、WALATを初期化スクリプトに永続的に設定しても問題はなく、JEDECのtWPST内にとどまることが保証されます。
Q:ライト・レベリング・キャリブレーションの実行後に、報告される遅延値がゼロ(0x00)になることもあれば、ゼロ以外の値が報告されることがあるのは、なぜでしょうか。
A:ライト・レベリング・キャリブレーションを実行するたびに遅延値がやや変動するのはごく普通のことです。このキャリブレーション・ルーチンでは、ユーザーの大半が自分のボードを設計する際にDDR3メモリをi.MX 6 SoCの近くに配置すると前提しています。NXPのDDRストレス・テストのライト・レベリング・キャリブレーション・コードには、返されたライト・レベリング値をチェックするメカニズムが組み込まれています。ライト・レベリング・キャリブレーション・ルーチンで、返された遅延値がクロック・サイクルの3/4を超えることが検出されると、遅延値は「ゼロ」に設定されます。こうした大きな遅延結果が生じる原因は、DQS信号がSDCLKに対して既に遅延していることにあると想定されるためです。DQSをSDCLKに一致させるには、キャリブレーション・ルーチンでDQSをさらに遅延させて次のSDCLKエッジと一致させる必要がありますが、これは理論的には避けたいことです。JEDEC仕様では、DQSエッジはSDCLKエッジに対してSDCLKサイクルの25%以内に収まる必要があるため、DQSが最初にSDCLKからわずかに遅れていても実際には問題ありません。返された値がクロック・サイクルの3/4を超えると、キャリブレーション・ルーチンで遅延値が「ゼロ」に設定されるのはこうした理由からです。このような場合、DQSエッジとSDCLKエッジは非常に近いため、キャリブレーションの実行によっては、DQSエッジがSDCLKよりわずかに先行(ライト・レベリング遅延値が非常に小さくなる)することもあれば、SDCLKに対してわずかに遅れることもあります(ライト・レベリング遅延値が結果として非常に大きくなった場合、DQSを次のSDCLKエッジと一致させるためにゼロにする必要があります)。
Q:DDRストレス・テストのJTAGバージョンを使用する場合、シリアル・ポートに別のUARTポートを選択するにはどうすればよいですか?
A:フォルダ「ddr_stress_tester_jtag_v2.52」内に、DDR初期化スクリプトに追加コマンドをいくつか加えることで異なるUARTポートの追加方法を説明するテキスト・ファイルがあります。 以下に、これらのコマンドの概要を示します。
1. UARTモジュールのクロックのゲートを解除します(ほとんどのNXPスクリプトでは、スクリプトの冒頭ですべてのペリフェラル・クロックのゲートが解除されるため、この部分はすでに完了しています)。
2. UARTで使用するピンでIOMUXオプションを設定します(通常、UART_TXとUART_RXにはIOMUXオプションを、UART_RX入力にはデイジー・チェーン・オプションを設定します)。
3. レジスタUCR1のビットUART_ENを介して目的のUARTモジュールを有効にします。
4. 他のUARTモジュールを無効にする(UCR1[UART_EN]=0)。通常は UART1 を無効にするだけで十分ですが、ストレステストの目的で、他の未使用の UART オプションをすべて無効にしても問題ありません。
次のセットアップでの.dsファイル用語の例を以下に示します:MX6DQ、KEY_COL0およびKEY_ROW0上にUART4(すべてのペリフェラルに対してクロックのゲーティングが解除されていると仮定)
mem set 0x020E01F8 32 0x00000004 #// config_pad_mode(KEY_COL0, ALT4) mem set 0x020E01FC 32 0x00000004 #// config_pad_mode(KEY_ROW0, ALT4); mem set 0x020E0938 32 0x00000001 #// Pad KEY_ROW0 is involved in Daisy Chain. mem set 0x02020080 32 0x00000000 #//disable UART1 in UART1_UCR1(注:他のUARTモジュールも無効にできます) mem set 0x021F0080 32 0x00000001 #//enable UART4 in UART4_UCR1
次のセットアップでの.incファイル用語の別の例を以下に示します:MX6SX、SD4_DATA4およびSD4_DATA5上のUART5(すべてのペリフェラルに対してクロックのゲーティングが解除されていると仮定)。
setmem /32 0x020E0294 = 0x2 //IOMUXC_SW_MUX_CTL_PAD_SD4_DATA5, ALT2; UART5_TX_DATA setmem /32 0x020E0290 = 0x2 //IOMUXC_SW_MUX_CTL_PAD_SD4_DATA4, ALT2; UART5_RX_DATA setmem /32 0x020E0850 = 0x00000000 // IOMUXC_UART5_IPP_UART_RXD_MUX_SELECT_INPUT, daisy chain for UART5_RX input to use SD4_DATA4 setmem /32 0x021F4080 = 0x00000001 // Enable UART_EN in UCR1 of UART5 // Disable UART_EN in UCR1 of UART1, UART2, UART3, and UART4 setmem /32 0x02020080 = 0x00000000 // UART1 setmem /32 0x021F0080 = 0x00000000 // UART2 setmem /32 0x021EC080 = 0x00000000 // UART3 setmem /32 0x021E8080 = 0x00000000 // UART4
関連リソースのリンク: