図 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のカード・デバイスのための代替ブート動作が完了します。