• 検索結果がありません。

図 11–14に、eMMCカード・デバイスの代替のブート動作を実行するために必要な

ステップのシーケンスを示します。詳細なステップは、フローチャートに記述され ています。

1. ソフトウェア・ドライバは、次のことを確認します。

eMMCのカード・デバイスが代替ブート動作(BOOT_INFOビットはeMMCの カードに1に設定されている)をサポートしていること。

カード・デバイスでのBOOT_SIZE_MULTとBOOT_BUS_WIDTH値は、ブート・プ ロセス中に使用すること。

2. ソフトウェアには、次のビットを設定します。

intmaskレジスタで適切なビットを0にリセットすることによって、割り込み

のマスクを設定します。

ctrlレジスタのint_enableビットを1に設定します。ctrlレジスタの他のビッ トは0に設定しなければなりません。

図 11‒14. eMMC の代替ブート動作のフロー Start

Step 1

Step 2 to Step 12

Step 13 Step 15

expect_boot_ack = 1 expect_boot_ack = 0

Step 14.a Step 14.b Step 14.e

No Start Pattern

Start Pattern & No Boot Data Received

Start Pattern &

Boot Data Received

Step 16.a Step 16.b No Boot Data

Received

Boot Data Received

Stop Step 14.h Successfully

Received Boot Data (14.d)

NAC Timeout

Successfully Received Boot Data (16.d)

1 保留中の割り込みをクリアするために、INT_ENABLEビットを設定する前に rintstsレジスタおよびidstsレジスタに0xFFFFFFFFを書き込むことが推奨 されています。内部DMAコントローラ・モードでは、ソフトウェア・ド

ライバはidintenレジスタのすべての関連するフィールドのマスクを解除

する必要があります。

3. ソフトウェア・ドライバは、受信したブート・データを転送するために内部DMA コントローラを使用する必要がある場合、次のアクションを実行する必要があり ます。

11–56ページの「内部DMAコントローラの送信シーケンス」 および 11–57ペー ジの「内部DMAコントローラの受信シーケンス」 に記載されているように ディスクリプタを設定するします。

trlレジスタの使用内部DMACビット(use_internal_dmac)を1に設定します。

4. clkdivレジスタを使用して400 kHzにカード・デバイスの周波数を設定します。

詳細については、11–44ページの「クロックのセットアップ」を参照してくださ い。カード・クロックが動作していることを確認します。

5. カード・インタフェースで少なくとも74カード・クロック・サイクルが発生す るまで待ちます。

6. カード・デバイス総アクセス時間のNACに等しいtmoutレジスタのdata_timeout フィールドを設定します。

7. 0x200(512バイト)にblksizレジスタを設定します。

8. カード・デバイスでBOOT_SIZE_MULTの値によって示されるように、128Kバイト

の倍数にbytcntレジスタを設定します。

9. fifothレジスタにrx_wmarkフィールドを設定します。典型的には、閾値は、

FIFOバッファの深さの半分(512)に設定することができます。

10. 0xFFFFFFFAに512レジスタを設定します。

11.次のフィールドにcmdレジスタを設定することにより、コマンドを開始します。

start_cmd = 1

enable_boot = 1

expect_boot_ack:

start-acknowledgeパターンがカード・デバイスから期待されている場合、

expect_boot_ackを1に設定します。

start-acknowledgeパターンがカード・デバイスから期待されていない場合、

expect_boot_ackを0に設定します。

card_number = 0

data_expected = 1

cmd_index = 0

残りのcmdレジスタのビットを0に設定します。

12. start-acknowledgeパターンがカード・デバイスから期待されていない場合

14.このステップでは、start-acknowledgeパターン(expect_boot_ackはステップ11 で1に設定されていた)が期待されるケースを処理します。

a. Boot ACK Received割り込みがコマンド(ステップ11)を開始する50 ms内に コントローラから受信されていない場合、スタート・パターンが受信されて いません。ソフトウェア・ドライバは、ブート・プロセスを中止し、通常の 回復で開始する必要があります。

内部DMAコントローラ・モードがブート・プロセスのために使用される場 合、コントローラはBoot ACK Receivedタイムアウト後に次のステップを実行 します。

DMAディスクリプタがクローズされる。

idstsレジスタのcesビットが1に設定されている(Boot ACK Receivedタイム アウトを示す)。

idstsレジスタのriビットは設定されていない。

b. Boot ACK Received割り込みが受信された場合、ソフトウェア・ドライバは1を 書き込むことによってこの割り込みをクリアする必要があります。

Boot ACK Received割り込みの0.95秒以内に、Boot Data Start割り込みはコント ローラから受信しなければなりません。これが発生しない場合、ソフトウェ ア・ドライバは、ブート・プロセスを中止し、通常の探索で開始する必要が あります。

内部DMAコントローラ・モードは、ブート・プロセスのために使用される場 合、コントローラはBoot ACK Receivedタイムアウト後に次のステップを実行 します。

DMAディスクリプタがクローズされる。

idstsレジスタのcesビットが1に設定されている(Boot Data Startタイムア ウトを示す)。

idstsレジスタのriビットは設定されていない。

c. Boot Data Start割り込みを受信した場合、ブート・データがカード・デバイス

から受信されていることを示しています。 DMAエンジンが内部DMAコント ローラ・モードでない場合、ソフトウェア・ドライバは、rintstsレジスタで のrxdr割り込みビットに基づいてコントローラからのデータ・リードを開始 することができます。

内部DMAコントローラ・モードでは、DMAエンジンは、fifothレジスタの

rx_wmarkフィールドで指定されたレベルに達するとすぐシステム・メモリに

FIFOバッファからデータの転送を開始します。

d. ソフトウェア・ドライバは、SD/SDIO GO_IDLE_STATEコマンドを送信するよう にコントローラに指示することにより、ブート・プロセスを終了する必要が あります。

cmdargレジスタを0にリセットします。

cmd レジスタのstart_cmdビットを1に設定し、そして、他のすべてのビッ トを0に設定します。

e. カードから正常にブート・データ転送の終了時に、以下の割り込みが生成さ れます。

rintstsレジスタでのcmdビットとdtoビット

内部DMAコントローラ・モード専用のidstsレジスタのriビット f. エラーがブートACKパターン(0b010)で発生し、またはEBEが発生した場

合:

コントローラはBoot ACK Received割り込みを生成しません。

コントローラはBoot Data Startを検出して、Boot Data Start割り込みを生成し ます。

コントローラは、ブート・データを受信し続けます。

アプリケーションは、Boot Data Start割り込みを受信した後に中断する必要 があります。

g. 内部DMAコントローラ・モードでは:

ソフトウェア・ドライバが受信したブート・データが必要とする以上の ディスクリプタを作成した場合、余分なディスクリプタは、コントローラ によってクローズされていません。

ソフトウェア・ドライバは、受信したブート・データが必要とするより少 ないディスクリプタを作成する場合、コントローラはDescriptor Unavailable 割り込みが発生し、システム・メモリへのさらなるデータを転送しませ ん。

h. NACがデータ・ブロック転送間で違反されている場合、DRTO割り込みがア サートされます。これとは別に、スタート・美ビットまたはエンド・ビット に関連付けられたエラーがある場合、SBEまたはEBE割り込みも生成されま す。

eMMCのカード・デバイスのための代替ブート動作が完了します。残りのステッ プを実行しないでください(ステップ15および16)。

15. Command Done割り込みを待ちます。

16.このステップは、start-acknowledgeパターンが期待されない場合を処理します

(expect_boot_ack はステップ11に0に設定されていた)。

a. Boot Data Start割り込みコマンド(ステップ11)を開始する1秒以内にコント ローラから受信されていない場合、ソフトウェア・ドライバは、ブート・プ ロセスを中止し、通常の回復で開始する必要があります。

内部DMAコントローラ・モードでは:

DMAディスクリプタがクローズされる。

idstsレジスタのcesビットが1に設定されている(Boot Data Startタイムア ウトを示す)。

idstsレジスタのriビットは設定されていない。

b. Boot Data Start割り込みを受信した場合、ブート・データは、カード・デバイ

スから受信されています。 DMAエンジンが内部DMAコントローラ・モードで ない場合、ソフトウェア・ドライバは、rintstsレジスタでrxdr割り込み ビットに基づいてコントローラからのデータ・リードを開始することができ ます。

内部DMAコントローラ・モードでは、DMAエンジンは、fifothレジスタの

rx_wmarkフィールドで指定されたレベルに達するとすぐシステム・メモリに

FIFOバッファからデータの転送を開始します。

c. ソフトウェア・ドライバは、SD/SDIO GO_IDLE_STATE(CMD0)コマンドを送信 するようにコントローラに指示することによってブート・プロセスを終了す る必要があります。

cmdargレジスタを0にリセットします。

cmdレジスタのstart_cmdビットを1に設定し、そして他のすべてのビット を0に設定します。

d. カードから正常にブート・データ転送の終了時に、以下の割り込みが生成さ れます。

rintstsレジスタでのcmdビットとdtoビット

内部DMAコントローラ・モードでのidstsレジスタのriビット e. 内部DMAコントローラ・モードでは:

ソフトウェア・ドライバは、受信したブート・データが必要とする以上の ディスクリプタを作成した場合、余分なディスクリプタは、コントローラ によってクローズされていません。

ソフトウェア・ドライバは、受信したブート・データが必要とするより少 ないディスクリプタを作成する場合、コントローラはDescriptor Unavailable 割り込みが発生し、システム・メモリへのさらなるデータを転送しませ ん。

eMMCのカード・デバイスのための代替ブート動作が完了します。

関連したドキュメント