インテルのみ表示可能 — GUID: hch1481130166330
Ixiasoft
インテルのみ表示可能 — GUID: hch1481130166330
Ixiasoft
16.5.12.2. eMMCカードデバイスのブート操作
- ソフトウェア・ドライバーは次の内容を確認します。†
- eMMCカードデバイスがブート操作をサポートしているか (eMMCカードのEXT_CSDレジスターでBOOT_PARTITION_ENABLEビットが1に設定されている)。†
- EXT_CSDレジスターのBOOT_SIZE_MULTおよびBOOT_BUS_WIDTHの値。これは、ブートプロセス時に使用されます。†
- ソフトウェアで次のビットを設定します。†
- intmaskレジスターの適切なビットを0に設定し、割り込みのマスクを設定します。†
- ctrlレジスターのグローバルint_enableビットを1に設定します。ctrlレジスターの他のビットは0に設定する必要があります。†
注: インテルでは、rintstsレジスターおよびidstsレジスターに0xFFFFFFFFを書き込み、保留中の割り込みをクリアした後で、int_enableビットを設定することを推奨しています。内部DMAコントローラー・モードの場合、ソフトウェア・ドライバーでは、idintenレジスターの関連するフィールドすべてのマスクを解除する必要があります。†
- 受信したブートデータの転送に、ソフトウェア・ドライバーで内部DMAコントローラーを使用する必要がある場合は、次の手順を実行する必要があります。†
- 内部DMAコントローラーの送信シーケンスおよび内部DMAコントローラーの受信シーケンスの説明に従い記述子を設定します。†
- ctrlレジスターのuse_internal_dmacビットを1に設定します。†
- clkdivレジスターを使用してカードデバイスの周波数を400kHzに設定します。詳細は、クロックのセットアップを参照してください。†
- tmoutレジスターのdata_timeoutフィールドを、カードデバイスの合計アクセス時間 (NAC) に等しくなるように設定します。†
- blksizレジスターを0x200 (512バイト) に設定します。†
- bytcntレジスターを、カードデバイスのBOOT_SIZE_MULTの値で示されているとおりに、128KBの倍数に設定します。†
- fifothレジスターのrx_wmarkフィールドを設定します。しきい値の値は通常、512に設定することができます。これは、FIFOバッファー深さの半分です。†
- cmdレジスターのフィールドを次のように設定します。†
- start_cmd = 1に設定し、コマンドを開始します。†
- Enable boot (enable_boot) = 1†
- Expect boot acknowledge (expect_boot_ack)†
- カードデバイスから開始の肯定応答パターンが想定される場合、expect_boot_ackを1に設定します。†
- カードデバイスから開始の肯定応答パターンが想定されない場合は、expect_boot_ackを0に設定します。†
- Card number (card_number) = 0†
- data_expected = 1†
- cmdレジスターの残りのビットを0にリセットします。†
- カードデバイスから開始の肯定応答パターンが想定されない (expect_boot_ackが0に設定されている) 場合は、ステップ12に進みます。†
- このステップでは、開始の肯定応答パターンが想定される (ステップ9でexpect_boot_ackが1に設定されている) 場合の処理を示しています。†
- コマンドの開始 (ステップ9) 後50ms以内にコントローラーからBoot ACK Received割り込みを受信しない場合、ソフトウェア・ドライバーは次のcmdレジスターフィールドを設定する必要があります。†
- start_cmd = 1†
- Disable boot (disable_boot) = 1†
- card_number = 0 †
- その他のすべてのフィールド = 0†
コントローラーは、カード・インターフェイスのCMDピンをデアサート後、Command Done割り込みを生成します。†
内部DMAコントローラー・モードがブートプロセスに使用されている場合、コントローラーは、Boot ACK Receivedのタイムアウト後に次のステップを行います。†
- DMA記述子が閉じられます。†
- idstsレジスターのcesビットが設定され、Boot ACK Receivedのタイムアウトを示します。†
- idstsレジスターのriビットは設定されません。†
- Boot ACK Received割り込みを受信している場合、ソフトウェア・ドライバーは、idstsレジスターのcesビットに1を書き込むことでこの割り込みをクリアする必要があります。†
Boot ACK Received割り込み後0.95秒以内に、Boot Data Start割り込みをコントローラーから受信する必要があります。これが発生しない場合、ソフトウェア・ドライバーでは次のcmdレジスターフィールドを書き込む必要があります。†
- start_cmd = 1†
- disable_boot = 1†
- card_number = 0†
- その他のすべてのフィールド = 0†
コントローラーは、カード・インターフェイスのCMDピンをデアサート後、Command Done割り込みを生成します。†
内部DMAコントローラー・モードがブートプロセスに使用されている場合、コントローラーは、Boot ACK Receivedのタイムアウト後に次のステップを行います。†
- DMA記述子が閉じられます。†
- idstsレジスターのcesビットが設定され、Boot Data Startのタイムアウトを示します。†
- idstsレジスターのriビットは設定されません。†
- Boot Data Start割り込みを受信している場合は、カードデバイスからブートデータを受信していることを示しています。DMAエンジンが内部DMAコントローラー・モードではない場合は、ソフトウェア・ドライバーはその後、rintstsレジスターのrxdr割り込みビットに基づき、コントローラーからのデータ読み出しを開始することができます。†
内部DMAコントローラー・モードの場合は、fifothレジスターのrx_wmarkフィールドで設定されているレベルに到達するとすぐに、DMAエンジンはFIFOバッファーからシステムメモリーへのデータ転送を開始します。†
カードからのブートデータ転送が正常に完了すると、次の割り込みが生成されます。†
- rintstsレジスターのcmdビットおよびdtoビット†
- idstsレジスターのriビット (内部DMAコントローラー・モードの場合のみ)†
- ブート肯定応答パターン (0b010) でエラーが発生した場合、またはEBEが発生した場合†
- コントローラーは、CMDラインをHighに引き上げブートプロセスを自動的に中断します。†
- コントローラーは、Command Done割り込みを生成します。†
- コントローラーは、Boot ACK Received割り込みを生成しません。†
- アプリケーションはブート転送を中断します。†
- 内部DMAコントローラー・モードの場合†
- ソフトウェア・ドライバーが、受信したブートデータに必要な記述子よりも多くの記述子を作成した場合、コントローラーでは余分な記述子を閉じません。ソフトウェアでは、記述子が閉じられるまでそれらを再度使用することができません。†
- ソフトウェア・ドライバーが、受信したブートデータに必要な記述子よりも少ない記述子を作成した場合、コントローラーはDescriptor Unavailable割り込みを生成し、システムメモリーへのデータ転送をそれ以上行いません。†
- データブロック転送の間でNACに違反している場合、DRTO割り込みがアサートされます。さらに、スタートビットもしくはエンドビットに関連するエラーがある場合は、SBEまたはEBE割り込みも生成されます。†
eMMCカードデバイスのブート操作は完了しています。残りの手順 (ステップ12) は行わないでください。†
- コマンドの開始 (ステップ9) 後50ms以内にコントローラーからBoot ACK Received割り込みを受信しない場合、ソフトウェア・ドライバーは次のcmdレジスターフィールドを設定する必要があります。†
- このステップでは、開始の肯定応答パターンが想定されない (ステップ9でexpect_boot_ackが0に設定されている) 場合の手順について示します。†
- コマンドの開始 (ステップ9) 後1秒以内にコントローラーからBoot Data Start割り込みを受信しない場合、ソフトウェア・ドライバーは、cmdレジスターのフィールドを次のように書き込む必要があります。†
- start_cmd = 1†
- disable_boot = 1†
- card_number = 0†
- その他のすべてのフィールド = 0†
カードのCMDラインをデアサート後、コントローラーはCommand Done割り込みを生成します。内部DMAコントローラー・モードの場合は、記述子が閉じられ、idstsレジスターのcesビットが1に設定されます。これは、Boot Data Startのタイムアウトを示しています。†
- Boot Data Start割り込みを受信している場合は、カードデバイスからブートデータを受信していることを示しています。DMAエンジンが内部DMAコントローラー・モードではない場合は、ソフトウェア・ドライバーはその後、rintstsレジスターのrxdr割り込みビットに基づき、コントローラーからのデータ読み出しを開始することができます。†
内部DMAコントローラー・モードの場合は、fifothレジスターのrx_wmarkフィールドで指定されているレベルに到達するとすぐに、DMAエンジンはFIFOバッファーからシステムメモリーへのデータ転送を開始します。†
カードからのブートデータ転送が正常に完了すると、次の割り込みが生成されます。†
- rintstsレジスターのcmdビットおよびdtoビット†
- idstsレジスターのriビット (内部DMAコントローラー・モードの場合のみ)†
- 内部DMAコントローラー・モードの場合†
- ソフトウェア・ドライバーが、受信したブートデータに必要な記述子よりも多くの記述子を作成した場合、コントローラーでは余分な記述子を閉じません。†
- ソフトウェア・ドライバーが、受信したブートデータに必要な記述子よりも少ない記述子を作成した場合、コントローラーはDescriptor Unavailable割り込みを生成し、システムメモリーへのデータ転送をそれ以上行いません。†
eMMCカードデバイスのブート操作は完了しています。†
- コマンドの開始 (ステップ9) 後1秒以内にコントローラーからBoot Data Start割り込みを受信しない場合、ソフトウェア・ドライバーは、cmdレジスターのフィールドを次のように書き込む必要があります。†