カード・スタックは次のタスクを実行します。
■ 接続されているカードを発見します。
■ 接続したカード内の相対Card Address Register (RCA)を設定します。
■ カード固有の情報を読み出します。
■ カード固有の情報は、ローカルに格納されます。
コントローラに接続されているカードは、MMC、CE-ATA、SDまたはSDIO(IO ONLY、
MEM ONLYとCOMBOを含む)カードであることができます。接続されているカード
の種類を識別するには、次のディスカバリー・シーケンスが必要です。
1. ctypeレジスタ内のカード幅1または4ビット(card_width2)およびカード幅8 ビット(card_width1)フィールドを0にリセットします。
2. SD、MMC、SDIOまたはSDIO-COMBOカードのタイプを識別します。
a. カードへの引数0でSD/SDIO IO_SEND_OP_COND(CMD5)コマンドを送信しま す。
b. コントローラ上のresp0を読み出します。 IO_SEND_OP_CONDコマンドに対す る応答はカードがサポートしている電圧を提供します。
c. 引数に所望の電圧ウィンドウで、IO_SEND_OP_CONDコマンドを送信します。
このコマンドは、電圧ウィンドウを設定し、カードが初期化状態を終了する ことができます。
d. resp0のビット27をチェックします。
■ ビット27が0の場合、SDIOカードはONLY IOです。この場合、ステップ5に 進みます。
■ ビット27が1の場合、カード・タイプはSDIO COMBOです。次のステップに 進みます。
3. SDIOカード・タイプがCOMBOであるか、または以前IO_SEND_OP_CONDコマン ドから受信した応答がない場合にのみ、このステップに進みます。それ以外の場 合、ステップ5に進みます。
a. 次の引数を使用してSD/SDIO SEND_IF_COND(CMD8)コマンドを送信します。
■ ビット[31:12] = 0x0(予約ビット)
■ ビット[11:8] = 0x1(電源電圧値)
■ ビット[7:0] = 0xAA(SDIO Simplified Specification Version 2.00または以降の バージョンに準拠したSDメモリ・カードで優先のチェック・パターン)
f 11–87ページの「参考資料」上で説明したように、SDIO Simplified Specification Version 2.00を参照してください。
b. 応答が以前のSEND_IF_CONDコマンドに受信された場合、カードはD
Specifications, Part 1, Physical Layer Simplified Specification Version 2.00に準拠した SD High-Capacityをサポートしています。
応答が受信されない場合、ステップeに進みます。
c. 次の引数を使用してSD_SEND_OP_COND(ACMD41)コマンドを送信します。
■ ビット[31] = 0x0 (予約ビット)
■ ビット[30] = 0x1 (高容量ステータス)
■ ビット[29:25] = 0x0(予約ビット)
■ ビット[24] = 0x1(S18R - 1.8Vのための電圧スイッチングをサポートする)
■ ビット[23:0] = サポートされている電圧範囲
d. 応答が以前のSD_SEND_OP_CONDコマンドに受信された場合、カードの種類 はSDHCです。そうでない場合、カードは、MMCやCE-ATAとなります。それ 以外の場合、次のステップをスキップして、ステップ5に進みます。
e. 応答は初期のSEND_IF_CONDコマンドに受信されない場合、カードはHigh
■ ビット[31] = 0x0 (予約ビット)
■ ビット[30] = 0x0(高容量ステータス)
■ ビット[29:24] = 0x0(予約ビット)
■ ビット[23:0] = サポートされている電圧範囲
f. 応答が以前のSD_SEND_OP_CONDコマンドに受信された場合、カードは、SD タイプとなります。そうでない場合、カードは、MMCやCE-ATAとなります。
1 High Capacity SDメモリ・カードを初期化するために、前に最初の
SD_SEND_OP_CONDコマンドにSEND_IF_CONDコマンドを発行する必要が あります。次の条件のいずれかに該当するときは、カードの
SD_SEND_OP_CONDコマンドの応答としてビジーを返します。
■ カードは、その内部の初期化処理を実行します。
■ SEND_IF_CONDコマンドはSD_SEND_OP_CONDコマンドの前に発行されてい ません。
■ ACMD41コマンドが発行されます。コマンドの引数では、Host Capacity
Support(HCS)のビットは大容量SDカードの場合、0に設定されます。
4. カードがCE-ATA1.1、CE-ATA1.0、またはMMCデバイスのいずれかを判別するに は、次のシーケンスを使用します。
a. カードはATAモードを選択しようとするCE-ATA v1.1のカード・デバイスであ るかどうかを確認します。外部カード中のEXT_CSDレジスタ・ブロックのバ イト504(S_CMD_SET)を尋ねて、SD/SDIO SEND_IF_CONDコマンドを送信し ます。
■ ビット4が1に設定されている場合、カード・デバイスは、ATAモードをサ ポートしています。SWITCH_FUNC(CMD6)コマンドを送信して、EXT_CSD レジスタ・スライス191(CMD_SET)のATAビット(ビット4)を 1に設 定します。このコマンドは、ATAモードを選択して、ATAコマンド・セッ トをアクティブにします。
EXT_CSDレジスタのバイト191から読み戻すことによって、現在選択され
ているモードを確認することができます。
ステップ5に進みます。
■ カード・デバイスがATAモードをサポートしない場合、MMCカードまたは
CE-ATA v1.0のカードである場合があります。ステップbに進みます。
b. カードはCE-ATA1.0カード・デバイスまたはRW_REGコマンドを送信するこ
とにより、MMCカード・デバイスであることを確認します。応答が受信さ れ、応答データにCE-ATAの署名が含まれている場合、カードはCE-ATA1.0 カード・デバイスです。そうでない場合、カードはMMCカード・デバイスで す。
5. この時点で、ソフトウェアは、SD/SDHC、SDIOまたはSDIO-COMBOカードのタイ プを決定している場合があります。この場合、発見されているタイプに応じて カード・スタックを列挙する必要があります。
6. 識別クロック・レートの周波数にカード・クロック・ソースの周波数を400 kHz に設定します。次のディスカバリー・コマンド・シーケンスのいずれかを使用し ます。
■ SDカードやSDIOのメモリ・セクションは、次のSD/SDIOコマンドシーケンスを 送信します。
■ GO_IDLE_STATE
■ SEND_IF_COND
■ SD_SEND_OP_COND (ACMD41)
■ ALL_SEND_CID (CMD2)
■ SEND_RELATIVE_ADDR (CMD3)
■ SDIOカードは、次のコマンド・シーケンスを送信します。
■ IO_SEND_OP_COND.
■ 関数カウントが有効の場合、SEND_RELATIVE_ADDRコマンドを送信します。
■ MMCは、次のコマンド・シーケンスを送信します。
■ GO_IDLE_STATE
■ SEND_OP_COND (CMD1)
■ ALL_SEND_CID
■ SEND_RELATIVE_ADDR
7. sdmmc_clkクロックを分周するclkdivレジスタに値を書き込むことにより、発 見された後、カード・クロック周波数を変更することができます。
次のリストでは、さまざまな種類のカードの代表的なクロック周波数を示してい ます。
■ SDメモリ・カードの25 MHz
■ MMCカード・デバイスの12.5 MHz
■ フル・スピードSDIO, 25 MHz
■ ロー・スピードSDIO, 400 kHz