図 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のカード・デバイスのブート動動作が完了です。