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

図 11–13には、eMMCのカード・デバイスのブート動作を実行するステップを示し

ます。詳細なステップは、フロー・チャートに記述されています。

図 11‒13. eMMC ブート動作のフロー

Start

Step 1

Step 2 to Step 10

Step 11 Step 12

expect_boot_ack = 1 expect_boot_ack = 0

Step 11.a Step 11.b Step 11.c

No Start Pattern

Start Pattern & No Boot Data Received

Start Pattern &

Boot Data Received

Step 12.a Step 12.b No Boot Data

Received

Boot Data Received

Stop Step 11.f Successfully

Received Boot Data

NAC Timeout

Successfully Received Boot Data

1. ソフトウェア・ドライバは、次のチェックを実行します。

eMMCのカード・デバイスは、ブート動作をサポートしている場合

(BOOT_PARTITION_ENABLEビットはeMMCカードのEXT_CSDレジスタ1に設 定される)。

EXT_CSDレジスタのBOOT_SIZE_MULTとBOOT_BUS_WIDTH値は、ブート動作中 に使用される。

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

intmaskレジスタ0に適切なビットを設定することで、割り込みのマスクを設

定します。

ctrl レジスタのグローバルint_enableビットを1に設定します。 ctrl レジス タの他のビットは0に設定する必要があります。

1 アルテラはINT_ENABLEビットを設定する前に、保留中の割り込みをクリア するために、rintstsレジスタとidstsレジスタに0xFFFFFFFFを書き込む ことを推奨します。内部DMAコントローラ・モードの場合、ソフトウェ ア・ドライバはidintenレジスタのすべての関連するフィールドのマスク を解除する必要があります。

3. ソフトウェア・ドライバは、受信した起動データを転送するために内部DMAコ ントローラを使用する必要がある場合、それは以下のステップを実行する必要が あります。

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

ctrlレジスタの use_internal_dmac ビットを1に設定します。

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

詳細については、11–44ページの「クロックのセットアップ」を参照してくださ い。

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

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

7. カード・デバイスでのBOOT_SIZE_MULT値によって示されるように、128 KBの倍 数にbytcnt レジスタを設定します。

8. fifothレジスタのrx_wmarkフィールドを設定します。典型的には、スレッシュ ホールドは、FIFOバッファの深さの半(512)に設定することができます。

9. cmdレジスタの次のフィールドを設定します。

start_cmd= 1を設定することにより、コマンドを開始します。

Enable boot(eenable_boot)= 1

Expect boot acknowledge(expect_boot_ack)

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

expect_boot_ackを1にexpect_boot_ackを設定します。

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

expect_boot_ackを0に設定します。

Card number(card_number)=0

data_expected = 1

cmdレジスタ・ビットの残りを0にリセットします。

10. start-acknowledge patternがカード・デバイスから期待されていない

(expect_boot_ackが0に設定されている)場合、ステップ12に進みます。

11.このステップでは、start-acknowledge patternが期待されるケースを処理します

(ステップ9でexpect_boot_ack が1に設定された場合)。

a. Boot ACK Received割り込みがコマンド(ステップ9)を開始する50 ms内でコ ントローラから受信されていない場合、ソフトウェア・ドライバは、次のcmd レジスタ・フィールドを設定する必要があります。

start_cmd = 1

ディセーブル・ブート(disable_boot)= 1

card_number = 0

他のすべてのフィールド= 0

コントローラは、カード・インタフェースのCMDピンをディアサートした後 Command Done割り込みを生成します。

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

DMAディスクリプタを閉じます。

Boot ACK Receivedタイムアウトを示すidsts レジスタのcesビットを設定し ます。

idstsレジスタの riビットは設定しません。

b. 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ディスクリプタを閉じます。

Boot Data Startタイムアウトを示すidsts レジスタのcesビットを設定しま す。

idstsレジスタの riビットは設定しません。

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

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

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

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

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

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

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

内部DMAコントローラ・モードのみのidstsレジスタの riビット

d. エラーがブートACKパターン(0b010)で発生した場合、またはEBEが発生し た場合:

コントローラはHighにCMDラインをプルアップすることによりブート・プ ロセスを自動的に中止します。

コントローラはCommand Doneを生成します。

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

アプリケーションはブート転送を中止します。

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

ソフトウェア・ドライバは、受信したブート・データが必要とする以上の ディスクリプタを作成した場合、余分なディスクリプタは、コントローラ

によって閉じられません。それらが閉じられるまでソフトウェアがディス クリプタを再利用することはできません。

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

f. NACがデータ・ブロック転送間に違反している場合、DRTO割り込みがアサー トされます。開始ビットまたは終了ビットに関連付けられたエラーがある場 合に加えて、SBEまたはEBE割り込みも生成されます。

eMMCのカード・デバイスのブート動作が完了です。残りのステップ(12)を実 行しないでください。

12.このステップは、start-acknowledgeが予想されていないケース(ステップ9で expect_boot_ackは0に設定した )を処理します。

a. コマンド(ステップ9)を開始する1秒以内にコントローラからBoot Data

Start割り込みが受信されない場合、ソフトウェア・ドライバは、次のフィー

ルドとcmdレジスタを書き込む必要があります。

start_cmd = 1

disable_boot = 1

card_number = 0

他のすべてのフィールド = 0

コントローラは、カードのCMDラインをデアサートした後、Command Done 割り込みを生成します。内部DMAコントローラ・モードでは、ディスクリプ タが閉じられ、idstsレジスタのcesビットがBoot Data Startタイムアウトを スタート示すために1に設定されています。

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

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

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

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

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

rintstsレジスタでのcmdビットおよびdtoビット

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

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

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

eMMCのカード・デバイスのブート動動作が完了です。

関連したドキュメント