SD/MMC コントローラ

11. SD/MMC コントローラ
November 2012
cv_54011-1.1
cv_54011-1.1
ハード・プロセッサ・システム(HPS)は、外部 SD と MMC のフラッシュ・カード、
セキュア・デジタル I/O(SDIO)デバイス、および Consumer Electronics Advanced
Transport Architecture(CE-ATA)ハード・ドライブにインタフェースするための Secure
Digital/MultiMediaCard(SD/MMC)コントローラを提供します。SD/MMC コントローラ
はブート・イメージを格納し、除去可能なフラッシュ・カードからプロセッサ・シ
ステムをブートすることをイネーブルできます。また、大規模なアプリケーション
やユーザー・データ用のオン・ボード・ストレージ容量を拡張するためにフラッ
シュ・カードを使用することができます。他のアプリケーションは、エンベデッド
SD(ESD)およびエンベデッド MMC(eMMC)除去不可能なフラッシュ・デバイスへ
のインタフェースが含まれています。
SD/MMC コントローラは、シノプシスの Synopsys® DesignWare® Mobile Storage Host
(DWC_mobile_storage)コントローラに基づいています。
f 本資料では、11–87 ページの「参考資料」に記載されているように、SD/SDIO コマンド
を指します。それは、Physical Layer Simplified Specification、Version 3.01 、および SDIO
Simplified Specification Version 2.00 に詳しく記載されています。
SD/MMC コントローラの特性
HPS SD/MMC コントローラは以下の機能を提供します。
■
モバイル・ストレージから HPS ブーツをサポートする
■
以下のスタンダードまたはカード・タイプをサポートする
■
eSD を含む SD— バージョン 3.0
■
エンベデッド SDIO (eSDIO)を含む SDIO— バージョン 3.0
■
CE-ATA— バージョン 1.1
■
eMMC を含む MMC— バージョン 4.41、1 ビット、4 ビット、および 8 ビット、
( 11–2 ページの表 11–2 に示すとおりのいくつかのパッケージ)
■
統合 ディスクプタ・ベースのダイレクト・メモリ・アクセス(DMA)
■
内部 4 KB 受送信の FIFO バッファ
表 11–1 には、様々な SD カードのデバイス・タイプおよびサポートされている電圧、
バス・モード、およびスピードを示します。
© 2012 Altera Corporation. All rights reserved. ALTERA, ARRIA, CYCLONE, HARDCOPY, MAX, MEGACORE, NIOS, QUARTUS and STRATIX words and logos
are trademarks of Altera Corporation and registered in the U.S. Patent and Trademark Office and in other countries. All other words and logos identified as
trademarks or service marks are the property of their respective holders as described at www.altera.com/common/legal.html. Altera warrants performance of its
semiconductor products to current specifications in accordance with Altera's standard warranty, but reserves the right to make changes to any products and
services at any time without notice. Altera assumes no responsibility or liability arising out of the application or use of any information, product, or service
described herein except as expressly agreed to in writing by Altera. Altera customers are advised to obtain the latest version of device specifications before relying
on any published information and before placing orders for products or services.
Portions © 2011 Synopsys, Inc. Used with permission. All rights reserved. Synopsys & DesignWare are registered trademarks of Synopsys, Inc. All documentation
is provided "as is" and without any warranty. Synopsys expressly disclaims any and all warranties, express, implied, or otherwise, including the implied warranties
of merchantability, fitness for a particular purpose, and non-infringement, and any warranties arising out of a course of dealing or usage of trade.
ISO
9001:2008
Registered
†Paragraphs marked with the dagger (†) symbol are Synopsys Proprietary. Used with permission.
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Subscribe
11‒2
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの特性
SD/MMC コントローラは直接 eSDIO カード・デバイスの電圧スイッチング、カード
の割り込み、またはバック・エンドのパワー・コントロールをサポートしていませ
ん。ただし、汎用 I/O(GPIO)に、これらの信号を接続することができます。
表 11‒1. SD カードを使用するケース
サポートされるバス・スピード・モード
カード・デ
バイスのタ
イプ
サポートさ
れる電圧
サポートされるバス
・モード
デフォル
トの速度
高速
SDR12
SDR25
(1)
3.3 V
1.8 V
SPI
1
ビッ
ト
4
ビッ
ト
8
ビッ
ト
12.5 MBps
25 MHz
25 MBps
50 MHz
12.5 MBps
25 MHz
25 MBps
50 MHz
SDSC (SD)
v
—
v
v
—
—
v
v
—
—
SDHC
v
v (2)
v
v
v
—
v
v
v
v
SDXC
v
v (2)
v
v
v
—
v
v
v
v
eSD
v
v (2)
v
v
v
—
v
v
v
v
SDIO
v
v (2)
v
v
v
—
v
v
v
v
eSDIO
v
v (2)
v
v
v
v (3)
v
v
v
v
表 11‒1 の注 :
(1) SDR25 速度モードでは 1.8 V の信号を必要とします。カードは、UHS-I モード(例ば SDR50、SDR104、DDR50)をサポートし
ていても、それはまだ低速(例えば SDR12、SDR25)で通信することに注意してください。
(2) SD の 1.8 V シグナリングをサポートするために電圧スイッチ出力をコントロールします。
(3) eSDIO 用のオプション 8 ビットのバス・モードは、すべての FPGA パッケージでサポートされていません。
1
彼らはカード・インタフェース機能に影響を与えないため、カードのフォーム・
ファクタ(例えば、ミニやマイクロなど)は表 11–1 に列挙されていません。
表 11–2 は、さまざまな MMC カードのデバイス・タイプおよびサポートされている
電圧、バスモード、バス速度を示しています。
SD/MMC コントローラが外部カード・インタフェースの一部として、リセット出力
が含まれていません。フラッシュ・カードのデバイスをリセットするには、汎用出
力ピンを使用することを検討してください。
表 11‒2. MMC を使用するケース
カード・デバイス
のタイプ
最大ク 最大デー
ロック・ タ・レー
スピー
ト
ド (MHz) (MBps)
サポートされ
る電圧
サポートされる
バス・スピー
ド・モード
サポートされるバス
・モード
3.3 V
1.8 V
SPI (1)
1 ビッ 4 ビッ 8 ビッ
ト
ト
ト
デフォ
ルトの
速度
高ス
ピード
MMC
20
2.5
v
—
v
v
—
—
v
—
RSMMC
20
10
v
—
v
v
v
—
v
v
MMCPlus
50 (3)
25
v
—
—
v
v
v (2)
v
v
50
6.5
v
v
—
v
—
—
v
v
MMCMobile
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのブロック図とシステム・インテグレーション
11‒3
表 11‒2. MMC を使用するケース
eMMC
50
v
25
v
—
v
v
—
v
v
表 11‒2 の注 :
(1) SPI モードは MMC4.41 仕様では廃止されています。
(2) 任意の 8 ビットのバス・モードは、すべての FPGA パッケージでサポートされていません。
(3) 最大クロック・レートの 52 MHz の速度の代わりに、最大クロック・レートの 50 MHz(MMC 仕様で指定されている)をサ
ポートしています。
SD/MMC コントローラのブロック図とシステム・インテグレー
ション
SD/MMC コントローラでは、バス・インタフェース・ユニット(BIU)およびカー
ド・インタフェース・ユニット(CIU)が含まれています。BIU は、コントロールお
よびステータス・レジスタ(CSR)をアクセスするホストのためのスレーブ・インタ
フェースを提供します。また、このユニットは DMA インタフェースを介して独立し
た FIFO バッファへのアクセスを提供します。DMA コントローラは、システム・メモ
リと FIFO バッファ間でデータを交換するための責任があります。DMA レジスタは、
DMA 動作をコントロールするホストからアクセスできます。CIU は、コントローラ上
の SD、MMC、および CE-ATA プロトコルをサポートし、クロック・コントロール・
ブロックを介してクロック管理を提供します。割り込みを発生させるための割り込
みのコントロール・ブロックは、ARM® Cortex™-A9 マイクロプロセッサ・ユニット
(MPU)サブシステム内の汎用割り込みコントローラに接続します。
図 11–1 は、SD/MMC コントローラのブロック図と HPS に統合する方法を示していま
す。
図 11‒1. SD/MMC コントローラの接続
SD/MMC Controller
L3 Interconnect
Bus Interface Unit
Master
Interface
DMA
Controller
Data Path
Control
L4 Bus
FIFO
Buffer
Control
Slave
Interface
Card Interface Unit
Synchronizer
FIFO
Buffer
Control
Command
Path Control
I/O Pins
Clock
Control
Register
Block
Storage
FIFO Buffer
MPU
Subsystem
2012 年 11 月
Interrupt
Control
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒4
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
SD/MMC コントローラの機能の説明
この項では、SD/MMC コントローラのコンポーネント、またコントローラを動作す
る方法を説明します。
SD/MMC/CE-ATA プロトコール
SD/MMC/CE-ATA プロトコルはスタート・ビットによって開始され、ストップ・ビッ
トで終端され、コマンドとデータのビット・ストリームに基づいています。さらに、
SD/MMC コントローラは基準クロックを提供し、トランザクションを開始すること
ができるたった一つのマスタ・インタフェースです。
■
コマンド — オペレーションを開始する CMD ピンにシリアルに送信されるトークン
です。
■
応答 — 特定のコマンドに応答して、CMD のピンにシリアルに送信されるカードか
らのトークンです。
■
データ — データの移動コマンドにデータ・ピンを使用してシリアルに送信されま
す。
図 11–2 には、複数ブロックのリード動作の一例を示します。クロックは代表だけで
あり、クロック・サイクルの正確な数が表示されません。
図 11‒2. 複数ブロックのリード動作
From Host
to Card
From Card
to Host
Command
Response
Data from
Card to Host
Stop Command
Stops Data Transfer
sdmmc_cclk_out
sdmmc_cmd
sdmmc_data
Data Block
Command
CRC
Data Block
CRC
Block Read Operation
Data Block
Response
CRC
Data Stop Operation
Multiple Block Read Operation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒5
図 11–3 は、複数ブロックのライト動作にホストによって送信されたコマンド・トー
クンの例を示しています。
図 11‒3. 複数ブロックのライト動作
From Host
to Card
From Card
to Host
Command
Response
Data from
Host to Card
Stop Command
Stops Data Transfer
OK Response &
Busy from Card
sdmmc_cclk_out
sdmmc_cmd
sdmmc_data
Command
Data Block
CRC
Busy
Block Write Operation
Data Block
CRC
Response
Busy
Data Stop Operation
Multiple Block Read Operation
BIU
BIU は CIU とインタフェースされ、レベル 3(L3)のインタコネクトとレベル 4(L4)
のペリフェラル・バスに接続されています。BIU は、次の主な機能ブロックで構成さ
れています。
■
スレーブ・インタフェース
■
レジスタ・ブロック
■
FIFO バッファ
■
内部 DMA コントローラ
スレーブ・インタフェース
ホス・トプロセッサは、スレーブ・インタフェースを介して、SD/MMC コントロー
ラのレジスタやデータの FIFO バッファをアクセスします。
レジスタ・ブロック
レジスタ・ブロックは BIU の一部であり、CSR のへのリードおよびライトのアクセ
スを提供しています。
すべてのレジスタは BIU クロック・ドメインに存在しています。コマンドが 1 にコ
マンド・レジスタ(cmd)のスタート・コマンド・ビット(start_cmd)を設定して
ことで、カードに送信され、CIU の動作に必要なすべての関連レジスタは CIU ブロッ
クに転送されます。この間、ソフトウェアは BIU から CIU に転送されたレジスタへ
の書き込みはいけません。ソフトウェアは、再びこれらのレジスタへの書き込み前
に、ハードウェアが 0 に start_cmd ビットをリセットするまで待機する必要があり
ます。レジスタ・ユニットはハードウェアのロック機能があり、レジスタへの不正
な書き込みを防止します。
スタート・コマンドが cmd レジスタの start_cmd ビットを設定することによって発
行された後、コマンドが CIU によって受け入れられるまで、次のレジスタを書き換
えることはできません。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒6
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
■
Command (cmd)
■
Command argument (cmdarg)
■
Byte count (bytcnt)
■
Block size (blksiz)
■
Clock divider (clkdiv)
■
Clock enable (clkena)
■
Clock source (clksrc)
■
Timeout (tmout)
■
Card type (ctype)
ハードウェアは、CIU がコマンドを start_cmd ビット受け入れるとリセットします。
これらのレジスタのいずれかがこのロック・タイムの間に、ホストが書き込もうと
する場合、書き込みは無視され、ハードウェア・ロックのライト・エラー・ビット
(hle)が実際の込みステータ・スレジスタ(rintsts)に 1 に設定されています。さ
らに、割り込みがイネーブルされ、ハードウェア・ロック・エラーに対してマスク
されていない場合、割り込みがホストに送信されます。
コマンドが受け入れられた後に、次の条件の下で、CIU(これは一深いコマンド
キューがある)に、別のコマンドを送信することができます。
■
前のコマンドがデータ転送コマンドでない場合、前のコマンドが完了すると、新
しいコマンドはライト SD/MMC/CE-ATA カードに送信されます。
■
前のコマンドがデータ転送コマンドである場合、cmd レジスタの Wait Previous Data
Complete ビット(wait_prvdata_complete)は新しいコマンドのために 1 に設定
されている場合、新しいコマンドはデータ転送が完了するときに SD/MMC/CE-ATA
カードに送信されます。
■
wait_prvdata_complete ビットが 0 の場合、前のコマンドが送信されると、新しい
コマンドはすぐに SD/MMC/CE-ATA カードに送信されます。一般に、停止または中
止する前のデータ転送またはデータ転送の途中でカードのステータスを照会する
ために、またはデータ転送の途中でカードのステータスを照会するために、この
機能を使用してください。
割り込みコントローラ・ユニット
割り込みコントローラユニットは rintsts レジスタ、割り込みマスク・レジスタ
(intmask)、およびコントロール・レジスタ(ctrl)の割込みイネーブル・ビット
(int_enable)に依存する割り込みを発生します。割り込み条件が検出されると、コ
ントローラは rintsts 内の対応する割り込みビット・レジスタを設定します。
rintsts レジスタのビットは、0 ビットはそのまま残さを書く ; ソフトウェアがリセッ
ト割り込みビットに 1 を書き込むことによってビットを 0 にするまで 1 に設定され
たままです。rintsts レジスタのビットは、ソフトウェアが割り込みビットに 1 を書
き込むことによってこのビットを 0 にレセットするまで 1 に設定されたままです(0
を書き込むとビットはそのままに維持される)。
割り込みポートはアクティブ High とレベル・センシティブの割り込みです。割り込
みポートは、rintsts レジスタ内の少なくとも 1 ビットが 1 に設定される場合にのみ
アクティブになり、このとき対応する intmask レジスタ・ビットが 1 である、
ctrlint_enable レジスタのビットは 1 になります。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒7
以下のビットは、デバッグの目的のために、トップ・レベルのポートとして使用で
きます。
■
intmask レジスタのすべてのビット
■
rintsts レジスタのすべてのビット
■
ctrl レジスタのビット int_enable
ctrlレジスタのint_enablビットは電源投入時に 0 に設定されており、intmaskレジス
タの各ビットは、0x0000000 に設定されています。これにより、すべての割り込みが
マスクされます。
以下の条件は、割り込みが発生する原因となります。
■
リード上のエンド・ビット・エラー
■
ライト上には CRC(Cyclic Redundancy Code)なし
■
オート・コマンドが完了
■
スタート・ビット・エラー
■
ハードウェア・ロックされたのライト・エラー
■
FIFO バッファのアンダーフローまたはオーバーフロー・エラー
■
ホスト・タイムアウトによるデータ飢餓
■
データ・リード・タイムアウトまたはブート・データ・スタート
■
応答タイムアウトまたは ACK ブートが受信
■
データ CRC エラー
■
応答 CRC エラー
■
FIFO バッファのデータ要求が受信
■
トランスミット FIFO バッファのデータ要求
■
データ転送上
■
コマンドが完了
■
応答エラー
Receive FIFO Data Request および Transmit FIFO Data Request の割り込みはレベル・セン
シティブの割り込み要因によって設定されます。したがって、rintsts レジスタに 0
で割り込みの対応するビットをリセットする前に、割り込みソースは、まずクリア
する必要があります。
例えば、Receive FIFO Data Request 割り込みを受信受信したときに、FIFO バッファは
FIFO バッファ・カウントが RX watermark より大きくならないように空にする必要が
あります。それ以外の場合、割り込みがトリガされるようになります。
割り込みの残りの部分は、シングル・クロック・パルス幅のソースによってトリガ
されます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒8
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
FIFO バッファ
SD/MMC コントローラは、送信および受信データを格納するための、4 KB のデータ
FIFO バッファを持っています。FIFO バッファ・メモリは、エラー訂正コード(ECCS)
をサポートしています。FIFO バッファの両方のインタフェースは、シングルとダブ
ル・ビット・エラー・インジェクションをサポートしています。イネーブルおよび
エラー・インジェクション・ピンはシステム・マネージャによってドライブされる
入力です。そして、ステータス・ピンは、MPU サブシステムにドライブされる出力
です。
SD/MMC コントローラは、シングル・ビット訂正可能なエラーが検出された(また
訂正された)ときに出力をシステム・マネージャに通知するとき、また、ダブル・
ビット(修正不可能)エラーが検出されたときに提供します。システム・マネー
ジャは、ECC エラーが検出されたときに GIC への割り込みを生成します。
f 詳しくは、Cyclone® V デバイス・ハンドブック Volume 3 の「 System Manager 」の章を
参照してください。
内部 DMA コントローラ
内部 DMA コントローラは、CSR とカードへ、またはその逆にシステム・メモリから
データを転送し、単一の送信または受信のエンジンを持っています。コントローラ
は、効率的にソースから最小限のホスト・プロセッサの介入宛先へデータを移動す
るために、ディスクリプタのメカニズムを使用します。このようなカードから送信
および受信データ転送の完了のような状況で、ホスト・プロセッサに割り込むよう
にコントローラを設定することができます(他の正常またはエラー条件も同じく)。
シングル・データ構造を介して DMA コントローラとホスト・ドライバと通信しま
す。
内部 DMA コントローラは、システム・メモリにカードからデータ・バッファに受信
データを転送し、転送コントローラの FIFO バッファにメモリ内のデータ・バッファ
からデータを送信します。システム・メモリに常駐するディスクリプタはこれらの
バッファにポインタとして機能します。
データ・バッファは、システム・メモリの物理メモリ・スペースに常駐し、完全ま
たは部分的なデータで構成されます。バッファ状態はディスクリプタに保持されま
す。データ・チェインは、複数のデータ・バッファにまたがるデータを指します。
ただし、単一のディスクリプタには、複数のデータ・バッファにまたがることはで
きません。
単一の記述は、受信と送信の両方に使用されます。リストのベース・アドレスは、
ディスクリプタ・リスト・ベースのアドレス・レジスタ(dbaddr)に書き込まれて
います。ディスクリプタ・リストは前方にリンクされています。最後の記述は、環
構造を作成するための最初のエントリにポイントすることができます。ディスクリ
プタ・リストは、ホストの物理メモリ・アドレス・スペースに常駐します。各ディ
スクリプタは、最大 2 つのデータ・バッファを指すことができます。
内部 DMA コントローラ・ディスクリプタ
内部 DMA コントローラは、ディスクリプタ構造体のこれらのタイプを使用していま
す。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒9
■
デュアル・バッファ構造 — 2 ディスクリプタ間の距離は、バス・モード・レジス
タ(bmod)のディスクリプタ・スキップ・レングス・フィールド(dsl)に書き
込まれたスキップの長さの値によって決定されます。
■
チェイン構造 — 各ディスクリプタは、ユニークなバッファへ、またはリンクされ
たリスト内の次のディスクリプタを指しています。
図 11–4 および図 11–5 にはそれぞれ、内部 DMA コントローラのデュアル・バッ
ファ・ディスクリプタの構造やチェイン・ディスクリプタの構造を示しています。
図 11‒4. デュアル・バッファ・ディスクリプタの構造
Data Buffer 1
Descriptor A
Data Buffer 2
The Distance Between 2
Descriptors Is Determined
by the DSL Value Programmed
in the BMOD Register
Data Buffer 1
Descriptor B
Data Buffer 2
Data Buffer 1
Descriptor C
Data Buffer 2
図 11‒5. チェイン・ディスクリプタの構造
Data Buffer
Descriptor A
Data Buffer
Descriptor B
Data Buffer
Descriptor C
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒10
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
表 11–3 は、ディスクリプタの内部フォーマットを示しています。ディスクリプタ・
アドレスは 32 ビット・バスに揃える必要があります。各ディスクリプタは、コント
ロールおよびステータス情報の 16 バイトが含まれています。ディスクリプタの各
ビットについて詳しくは、11–11ページの表 11–4~ 11–13ページの表 11–7に参照し
てください。
表 11‒3. ディスクリプのフォーマット
26 25
...
13 12
...
6 5 4 3 2 1 0
—
ER CH FS LD
DES0
0
DES1
4
DES2
8
BAP1
DES3
12
BAP2 または次のディスクリプタ・アドレス
—
BS2
DIC
...
CES
OWN
オフ
ディスク
セッ 31 30 29
リプタ名
ト
BS1
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
—
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒11
内部 DMA コントローラ・ディスクリプタ内の DES0 フィールドは、コントロールお
よびステータス情報が含まれています。表 11–4 は、このディスクリプタのビットを
示しています。
表 11‒4. 内部 DMA コントローラ DES0 のディスクリプタ・フィールド
ビット
ビット名
説明
1 に設定すると、このビットはディスクリプタが内部 DMA コント
ローラによって所有されていることを示しています。
31
OWN
このビットが 0 に設定されている場合、ディスクリプタがホストに
よって所有されていることを示しています。データ転送を完了したと
き、内部 DMA コントローラはこのビットを 0 にリセットします。
CES のビットは、トランザクション・エラーが発生したかどうかを示
します。CES ビットは、rintsts レジスタの次のエラービット数の論
理和です。
30
29:6
5
4
Card Error Summary (CES)
■
End-bit error (ebe)
■
Response timeout (rto)
■
Response CRC (rcrc)
■
Start-bit error (sbe)
■
Data read timeout (drto)
■
Data CRC for receive (dcrc)
■
Response error (re)
Reserved
—
End of Ring (ER)
1 に設定すると、このビットは、ディスクリプタのリストが最終的な
ディスクリプタに達したことを示しています。内部 DMA コントロー
ラは、ディスクリプタ・リングを作成して、リストのベース・アドレ
スにリターンします。ER はデュアル・バッファ・ディスクリプタの構
造にのみ使用可能です。
Second Address Chained
(CH)
1 に設定すると、このビットはディスクリプタ内の 2 番目のアドレス
次のディスクリプタのアドレスではなく、第二のバッファ・アドレス
であることを示します。このビットを 1 に設定すると、BS2
(DES1[25:13]) は全てゼロでなければなりません。
3
First Descriptor (FS)
1 に設定すると、このビットは、このディスクリプタがデータの最初
のバッファが含まれることを示します。最初のバッファのサイズが 0
の場合、次のディスクリプタは、データの先頭が含まれています。
2
Last Descriptor (LD)
1 に設定すると、このビットはこのディスクリプタでポイントする
バッファがデータの最後のバッファであることを示しています。
1
0
Disable Interrupt on
Completion (DIC)
Reserved
2012 年 11 月
Altera Corporation
1 に設定すると、このビットはこのディスクリプタでポイントする
バッファで最後のデータのための内部 DMA コントローラ・ステータ
ス・レジスタ(idsts)の TI/RI ビットの設定を防止します。
—
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒12
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
DES1 ディスクリプタ・フィールドは、バッファ・サイズが格納されます。表 11–5
は、このディスクリプタのビットを示しています。
表 11‒5. 内部 DMA コントローラ DES1 のディスクリプタ・フィールド
ビット
31:26
25:13
12:0
ビット名
説明
Reserved
—
Buffer 2 Size (BS2)
これらのビットは、第 2 データ・バッファのバイ
ト・サイズを示します。バッファ・サイズは 4 の
倍数でなければなりません。バッファ・サイズが
4 の倍数でない場合、結果の動作は未定義です。
DES0[4] が 1 に設定されている場合、このフィー
ルドには、有効ではありません。
Buffer 1 Size (BS1)
4 バイトの倍数でなければならないデータ・バッ
ファのバイト・サイズを示しています。バッ
ファ・サイズが 4 の倍数でない場合、結果の動作
は未定義です。このフィールドが 0 の場合、DMA
はバッファを無視し、チェイン構造のために次の
ディスクリプタに、またはデュアル・バッファ構
造のための次のバッファに移動します。
プログラムするディスクリプタとバッファが 1 つ
しかない場合、バッファ 2 の代わりに 1 バッファ
1 を使用する必要があります。
DES2 ディスクリプ・タフィールドには、データ・バッファへのアドレス・ポインタ
が含まれています。表 11–6 に、このディスクリプタのビットを示します。
表 11‒6. 内部 DMA コントローラ DES2 のディスクリプタ・フィールド
ビット
31:0
ビット名
説明
Buffer Address Pointer 1
(BAP1)
これらのビットは、最初のデータ・バッファの物
理アドレスを示しています。内部 DMA コント
ローラは唯一の 32 ビット・アラインメントされ
たアクセスを実行するため、DES2 [1:0] を無視し
ます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒13
現在のディスクリプタがデュアル・バッファ構造のチェイン・ディスクリプタまた
は第二バッファ・アドレスで最後のディスクリプタでない場合、DES3 ディスクリプ
タ・フィールドでは、次のディスクリプタへのアドレス・ポインタが含まれていま
す。表 11–7 は、このディスクリプタのビットを示しています。
表 11‒7. 内部 DMA コントローラ DES3 のディスクリプタ・フィールド
ビット
31:0
ビット名
説明
これらのビットは、デュアル・バッファ構造が
使用されている第 2 のバッファの物理アドレス
を示しています。Second Address Chained
(DES0[4])ビットが 1 に設定されている場合、
Buffer Address Pointer 2
このアドレスでは次のディスクリプタが存在し
(BAP2) or Next Descriptor
ている物理メモリへのポインタが含まれます。
Address
これが最後のディスクリプタでない場合、次の
ディスクリプタ・アドレス・ポインタは 32 ビッ
トにアラインされる必要があります。ビット 1
および 0 が無視されます。
ホスト・バスのバースト・アクセス
内部 DMA コントローラは、bmod レジスタの固定バースト・ビット(fb)を使用して
構成されている場合、マスタ・インタフェース上で固定長のバースト転送を実行し
ようとします。最大バースト長が示され、bmod レジスタのプログラマブルなバース
ト長(pbl)フィールドによって制限されます。ディスクリプタが取得されるとき、
マスタ・インタフェースは、常にインタコネクトに 4 つのバースト・サイズを表示
します。
内部 DMA コントローラは、設定されたバーストを収容するのに、転送の終了での十
分なスペースがある場合、または転送の終了でのバイト数でがコンフィギュレー
ションされたバースト長より少ない場合にデータ転送を開始します。DMA マスタ・
インタフェースが固定長のバースト用に設定されている場合、INCR4/8/16 および
SINGLE トランザクションの最も効率的な組み合わせを使用してデータを転送しま
す。DMA のマスタ・インタフェースが固定長バースト用に構成されていない場合、
INCR(不定長)と SINGLE トランザクションを使用してデータを転送します。
ホスト・データ・バッファのアラインメント
システム・メモリ内の送信および受信データ・バッファは、32 ビット境界に揃える
必要があります。
バッファ・サイズの計算
ドライバは、送信または受信するデータの量が知られています。DES1 ディスクリプ
タ・フィールドのバッファ・サイズ・フィールドで指定されたカードに送信するた
めに、内部の DMA コントローラは、FIFO バッファからの正確なバイト数を転送しま
す。
ディスクリプタは最後に設定されていない場合(DES0 フィールド LD ビットが 0 に
設定する状態)、対応するバッファは、完全なものとみなされ、バッファ内の有効な
データの量は正確にバッファ・サイズ・フィールドによって示されています。ディ
スクリプタが最後としてマークされている場合、DES1 フィールドでのバッファ・サ
イズによって示されるように、バッファは十分(または不十分)の場合もあります。
ドライバが有効である場所の数を認識しています。ドライバは残留の無効なバイト
を無視するように期待されています。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒14
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
内部 DMA コントローラの割り込み
割り込みは、様々なイベントの結果として生成することができます。idsts レジスタ
には、割り込みを発生させる可能性のあるすべてのビットが含まれています。内部
DMA コントローラの割り込みイネーブル・レジスタ(idinten)は、割り込みを発生
する可能性があるイベントのそれぞれのイネーブル・ビットが含まれています。
idsts のレジスタで 2 つのサマリー割り込みがあります:通常の割り込みサマリ・
ビット(nis)と異常な割り込みサマリ・ビット(ais)。nis ビットは、idsts で の送信割り込み(ti)と受信割り込み(ri)ビットの論理和からの出力されます。
ais ビットは、idsts レジスタでの致命バス・エラー割り込み(fbe)、ディスクリプタ
不使用能割り込み(du)、カード・エラーの要約割り込み(ces)ビットの論理和
(OR)の結果です。
割り込みは、対応するビット位置に 1 を書き込むことによってクリアされます。0 割
り込みのビット位置に書き込まれた場合、書き込みは無視され、割り込みはクリア
されません。グループ内のすべてのイネーブルされた割り込みがクリアされると、
対応するサマリ・ビットは 0 に設定されます。両方の要約ビットを 0 に設定すると、
割り込み信号がデアサートされます。
割り込みは、キューに入れられません。ドライバは以前の割り込みに応答する前に
他の割り込みイベントが発生した場合、追加の割り込みは生成されません。例えば、
idsts レジスタの ri ビットは、1 つ以上のデータをホスト・バッファに転送されたこ
とを示します。
割り込みは同時の複数のイベントのために一度だけ生成されます。ドライバは、割
り込み要因のための idsts レジスタをスキャンする必要があります。コントローラ
からの最終の割り込み信号は BIU と内部 DMA コントローラからの割り込みで論理和
です。
内部 DMA コントローラ FSM
次のステップでは、内部の DMA コントローラの機能ステート・マシン(FSM)の動
作を示しています。
1. 内部 DMA コントローラがディスクリプタをフェッチするために 4 つのアクセス
を実行します。
2. DMA コントローラは、内部ディスクリプタ情報を格納します。それが最初のディ
スクリプタの場合、コントローラは FIFO バッファ・リセットを発行して、リセッ
トが完了するまで待ちます。
3. 内部 DMA コントローラは、正しさのディスクリプタの各ビットをチェックしま
す。ビットのミスマッチが発見された場合、適切なエラー・ビットが 1 に設定さ
れ、ディスクリプタは DES0 フィールドでの OWN ビットを 1 に設定することで閉
じられます。
rintsts レジスタは、次の条件のいずれかを示します。
■
応答タイムアウト
■
応答 CRC エラー
■
データ受信タイムアウト
■
応答エラー
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒15
4. DMA がシステム・メモリにデータを書き込む前に到達する RX の透かし、または
システム・メモリからデータを読み出す前に到達する TX の透かしを待ちます。
RX の透かしは、DMA がメモリへの書き込みをする前に、FIFO バッファにローカ
ルに格納されるバイト数を表します。DMA がメモリからデータを読み込む前に、
TX の透かしは地元の FIFO バッファの空きバイト数を表します。
5. プログラマブルなバースト長(PBL)のフィールドの値は、バッファ内のデータ
の残量よりも大きい場合、単一の転送が開始されます。デュアル・バッファが使
用されている場合、また第 2 のバッファにデータ(バッファ・サイズ = 0)が含
まれていない場合、バッファがスキップされ、ディスクリプタが閉じられます。
6. ディスクリプタ内の OWN ビットは、1 ディスクリプタのデータ転送が完了した
後の内部 DMA コントローラによって 0 に設定されます。転送は複数のディスク
リプタにまたがっている場合、DMA コントローラは、次のディスクリプタを
フェッチします。転送が現在のディスクリプタで終わっている場合、内部の DMA
コントローラは idsts レジスタの ri ビットまたは ti ビットを設定した後、アイ
ドル状態になります。ディスクリプタ構造(デュアル・バッファもしくはチェイ
ンされたバッファ)に応じて、ディスクリプタの適切な開始アドレスがロードさ
れます。デュアル・バッファ・ディスクリプタの第 2 のデータ・バッファの場
合、ディスクリプタは再度フェッチされていません。
内部 DMA 転送中の中断
データ転送が進行中である間に、ホストがカードに SD/SDIO STOP_TRANSMISSION コ
マンド (CMD12) を発行する場合、内部 DMA コントローラは、Data Transfer Over
(DTO)の割り込みがアサートされるまでデータ転送が完了した後に現在のディスク
リプタを閉じます。STOP_TRANSMISSION コマンドが発行されると、DMA コントロー
ラは、単一のバースト転送を実行します。
1. カードのライト動作では、内部 DMA コントローラは、DTO の割り込みがアサー
トされるまでシステム・メモリからフェッチした後 FIFO バッファにデータを書き
込みます。これは、カード・クロックの動作を維持して、STOP_TRANSMISSION
コマンドが確実にカードに送信されるように行われます。
2. カードのリード動作では、内部 DMA コントローラは、FIFO バッファからデータ
の読み出しを維持して、DTO の割り込みが発生するまで、システム・メモリに書
き込みます。すべての FIFO バッファのデータが空にされていない限り、DTO の割
り込みが発生されないため、このステップが必要です。
1
カード・ライトの中止の場合、STOP_TRANSMISSION コマンドが発行されている間の
現在のディスクリプタのみ内部 DMA コントローラによってクローズされています。
残りの未読ディスクリプタは内部 DMA コントローラでクローズされていません。
1
カード・リードの中止の場合、内部の DMA コントローラは、FIFO バッファのデータ出
力を読み出し、対応するディスクリプタのデータ・バッファに書き込みます。残り
の未読ディスクリプタはクローズされません。
FIFO バッファのオーバーフローおよびアンダーフロー
通常のデータ転送状態の間、FIFO バッファのオーバーフローやアンダーフローは発
生しません。しかし、プログラミング・エラーは、FIFO バッファのオーバー・フ
ローまたはアンダーフローが存在する場合発生することがあります。例えば、次の
ようなシナリオを考えてみましょう。
送信の場合:
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒16
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
■
PBL=4
■
TX の透かし = 1
これらのプログラミング値では、FIFO バッファが 1 つの空場所のみを持っている場
合、DMA は、使用可能なストレージでたった 1 つのワードがあってもメモリから 4
ワードを読み込もうとします。これは、FIFO バッファオーバフロー割り込みに結果し
ます。
受信の場合:
■
PBL=4
■
RX の透かし = 1
FIFO バッファが 1 つの場所のみを満たす場合、DMA は、たった 1 つのワードがあっ
てもメモリから 4 ワードを読み込もうとします。これは、FIFO バッファオーバフロー
割り込みに結果します。
ドライバは、バイト数が転送されることを確認する必要があります(ディスクリプ
タで示されるように 4 バイトの倍数である)。例えば、bytcnt レジスタは 13 の場合、
レングス・フィールドは常に 4 バイトの倍数でなければならないため、ディスクリ
プタで示されるバイト数は 16 に切り上げなければなりません。
表 11–8 に内部 DMA コントローラのデータ転送動作のための法的 PBL と FIFO バッ
ファの透かし値を示します。
表 11‒8. PBL とウォーターマーク・レベル
PBL ( 転送数 )
TX/RX のウォーターマーク値
1
1 以上
4
4 以上
8
8 以上
16
16 以上
32
32 以上
64
64 以上
128
128 以上
256
256 以上
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒17
致命バスエラーのシナリオ
致命的なバスエラーは、マスタ・インタフェースを介してエラー応答が原因で発生
します。このエラーはシステム・エラーです。したがって、ソフトウェア・ドライ
バは、コントローラ上のすべてのそれ以上の設定を行ってはなりません。このよう
なシナリオからのたった 1 つのリカバリー・メカニズムは、次のいずれかのタスク
を実行することです。
■
リセット・マネージャを介してコントローラにリセットを発行します。
■
CTRL レジスタのコントローラ・リセット・ビット(controller_reset)に書き
込むことによって、プログラム・コントローラのリセットを発行します。
CIU
CIU インタフェースは、BIU と SD/MMC カードまたはデバイスとインタフェースして
います。ホスト・プロセッサは SD/MMC コントローラの BIU のコントロール・レジ
スタにコマンド・パラメータを書き込み、これらのパラメータは、CIU に渡されま
す。コントロール・レジスタの値に応じて、CIU は SD/MMC プロトコルに従ってカー
ド・バスで SD/ MMC コマンドおよびデータ・トラフィックを生成します。コント
ロール・レジスタの値は、コマンドとデータ・トラフィックが CE-ATA カードに向け
られているかどうかを決定し、SD/MMC コントローラがコマンドとデータ・パスを
制御します。
以下のリストは、CIU の動作の制約について説明します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒18
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
■
コマンドが発行された後、CIU は、リード・ステータスを確認するために、また
は転送を停止するために、別のコマンドを受け入れます。
■
一度に 1 回のデータ転送コマンドしか発行できません。
■
オープン・エンドのカードのライト動作中、FIFO バッファが空であるため、カー
ド・クロックが停止している場合、ソフトウェアは FIFO バッファにデータを記入
し、カード・クロックを開始する必要があります。そして、カードに 1 つの
SD/SDIO STOP_TRANSMISSION (CMD12)コマンドのみ発行することができます。
■
SDIO/COMBO カードの転送中は、カード機能を中断し、ソフトウェアが中断転送
を再開する場合、新たなデータ転送コマンドのように、まず FIFO バッファをリ
セットして、再開のコマンドを起動する必要があります。
■
カードのデータ転送が進行している間、SD/SDIO カードのリセット・コマンド
(GO_IDLE_STATE、GO_INACTIVE_STATE または CMD52_reset)を発行すると、ソフ
トウェアは、cmd レジスタ内の stop_abort_cmd を 1 に設定する必要があります。
それにより、カードのリセット・コマンドを発行した後にコントローラはデータ
転送を停止することができます。
■
カード・リード間に FIFO バッファがいっぱいになっているため、カード・クロッ
クが停止している場合、ソフトウェアはそのカード・クロックを開始するには、
少なくとも 2 つの FIFO バッファの位置を読み出す必要があります。
■
CE-ATA カード・デバイスの割り込みがイネーブルされる場合(ATA のコントロー
ル・レジスタで nIEN ビットはに 0 に設定されている場合)、進行中に保留の
RW_BLK コマンドがある場合、新しい RW_BLK コマンドは同じカード・デバイス
に送信してはいけません(このドキュメントで使用される RW_BLK コマンドは
CE-ATA 仕様によって定義された RW_MULTIPLE_BLOCK MMC コマンドである)
。
Command Completion Signal(CCS)を待っている間に Command Completion Signal
Disable(CCSD)コマンドのみ送信することができます。
■
同じカード・デバイスでは、CE-ATA カードで割り込みがディセーブル場合、ス
テータス情報を読み出すために新しいコマンドを実行することができます(nIEN
ビットは ATA のコントロール・レジスタが 1 に設定されています)。
■
オープ・ンエンドの転送は CE-ATA カード・デバイスではサポートされません。
■
send_auto_stop 信号は、CE-ATA の転送のためにはサポートされません(ソフト
ウェアは cmd レジスタの send_auto_stop ビットを設定してはいけない)。
CIU は、主に次のような機能ブロックから構成されています。
■
コマンド・パス
■
データ・パス
■
クロック・コントロール
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒19
コマンド・パス
コマンド・パスは次の機能を実行します。
■
カード・コマンドのパラメータをロードする
■
カード・バスにコマンドを送信する
■
カード・バスからの応答を受信する
■
BIU に対して応答を送信する
■
クロック・パラメータを読み込む
■
コマンド・ピンに P ビットをドライブする
新しいコマンドは、BIU のレジスタに書き込み、そして cmd レジスタに start_cmd
ビットを設定することにより、コントローラに要求されます。コマンド・パスは、
新しいコマンド(コマンド、コマンド引数は、タイムアウト)をロードすると BIU
に確認応答を送信します。
新しいコマンドがロードされた後、コマンド・パスのステート・マシンはカード・
バス(内部生成 7 項の CRC-7 を含む)にコマンドを送信し、任意の場合、応答を受
信します。そして、ステート・マシンはコマンドが完了したことを BIU に対する受
信応答と信号を送信し、新しいコマンドをロードする前に、8 クロック・サイクルを
待ちます。CE-ATA のデータ・ペイロード転送(RW_MULTIPLE_BLOCK)コマンドで
は、カード・デバイスの割り込みがイネーブルされる場合(ATA のコントロール・レ
ジスタで nIEN ビットは 0 に設定されている場合)、ステート・マシンが応答を受信
した後、次のアクションを実行します。
■
P ビットをドライブするのではなく、CCS を待機して、デコードし、アイドル状態
に戻り、その後、P ビットをドライブします。
■
ホストが CCSD のコマンドを送信すると、応答した後に 8 クロック・サイクルが有
効期限が切れている場合、コマンド・ピンの CCSD パターンを送信します。
コマンド・パラメータのロード
コマンドまたは応答は、次のような状況でコマンド・パスにロードされます。
■
BIU からの新しいコマンド —BIU が CIU に新しいコマンドを送信すると、cmd レジス
タでの start_cmd ビットは 1 に設定されます。
■
内部生成 send_auto_stop— データ・パスが終了すると、SD/SDIO STOP コマンド要
求がロードされます。
■
相対カード・アドレス(RCA)0x000 との割り込み要求(IRQ)— コマンド・パス
は、MMC から IRQ 応答を待っている場合、そして BIU によって「send irq
response」
という要求がシグナルされる場合、ctrl レジスタでの IRQ 要求ビッ
ト(send_irq_response)は 1 に設定されています。
コマンド・パスで BIU からの新しいコマンドをロードすることは、次の cmd レジス
タ・ビットの設定に依存します:
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒20
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
■
update_clock_registers_only— このビットはcmdレジスタで 1 に設定されている
場合、コマンド・パスは clkena は、clkdiv、および clksrc レジスタのみ更新し
ます。このビットが 0 に設定されている場合、コマンド・パスは、cmd、cmdarg、
および tmout にレジスタをロードします。その後、カードに送信される新しいコ
マンドを処理します。
■
wait_prvdata_complete— このビットが 1 に設定されている場合、コマンド・パス
は、次のいずれかの条件の下で、新しいコマンドをロードします。
■
すぐにデータ・パスが空いている場合(つまり、進行中のデータ転送がない
。
場合)、またはオープン・エンドのデータ転送が進行中の場合((bytcnt= 0)
■
現在のデータ転送が完了した後に、事前定義されたデータ転送が進行中の場
合。
コマンドの送信および対応の受信
新しいコマンドがコマンド・パス(cmd レジスタの update_clock_registers_only
ビットが 0 に設定されている)にロードされた後、コマンド・パスのステート・マ
シンはカード・バス上のコマンドを送出します。図 11–6 は、コマンド・パスのス
テート・マシンを示しています。
図 11‒6. コマンド・パースのステート・マシン
load_new_cmd
Command
Idle
response_expected = 0
tNCC Done
wait_tncc
Transmit
Command
Send IRQ
Response
Request
response_expected = 1
Receive
Response
Response Done/
Response Timeout
コマンド・パスのステート・マシンは、cmd レジスタ・ビット値に応じて、次の機能
を実行します。
1. send_initialization—80 クロック・サイクルの初期化シーケンスは、コマンド
を送信する前に送信されます。
2. response_expected— 応答は、コマンドのために期待されています。コマンドが
送信された後、コマンド・パスのステート・マシンは、48 ビットまたは 136 ビッ
トの応答を受信すると BIU に送信します。カード応答のスタート・ビットがク
ロック・サイクル数(tmout レジスタとして設定される)内に受信されない場合、
BIU をシグナルするために rto ビットと command done(CD)ビットが rintsts
レジスタで 1 に設定されます。response-expected ビットが 0 に設定されている場
合、コマンド・パスは、コマンドを送信し、BIU に response done をシグナルしま
す。これにより、cmd ビットは rintsts レジスタで 1 に設定されるようになりま
す。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒21
3. response_length— このビットが 1 に設定されている場合、136 ビット長の応答
が受信され、それが 0 に設定されている場合、48 ビットの短い応答が受信されま
す。
4. check_response_crc— このビットが 1 に設定されている場合、コマンド・パス
は、内部生成された CRC-7 と受信 CRC-7 を比較しています。この 2 つが一致しな
い場合、応答の CRC エラーは、rintsts レジスタでの rcrc ビットは 1 に設定さ
れている BIU に通知されます。
BIU に応答を送信
response_expected ビットが CMD レジスタで 1 に設定されている場合、受信した応答
が BIU に送信されます。応答・レジス 0(resp0)は短い応答のために更新され、応
答・レジス 3(resp3)、応答・レジスタ 2(resp2)、応答・レジス 1(resp1)、およ
び resp0 レジスタは、長い応答で更新されます(cmd ビットが rintsts レジスタが 1
に設定された後)。応答が CIU によって送信される AUTO_STOP コマンドのためのも
のである場合、応答は resp1 に書き込まれます(auto command done bit の acd が
rintsts レジスタに設定された後)。
正しいカードの応答は、表 11–9 に記載されています。コマンド・パスはカード・応
答の内容を検証します。
表 11‒9. カード・応答のフィールド
フィールド
内容
レスポンス送信ビット
0
コマンド・インデックス
送信したコマンドのコマンド・インデック
ス
エンド・ビット
1
コマンド索引は、136 ビット応答をチェックされていないか、または cmd レジスタの
ccheck_response_crc ビットが 0 に設定されている場合にチェックされていません。
136 ビット応答や予約の CRC 48 ビット応答では、コマンド・インデックスが予約さ
れています(つまり 0b111111)。
f 応答値について詳しくは、11–87 ページの「参考資料」を参照してください。
CMD ライン上で P ビットのドライブ
応答が予想されていない場合、コマンド・パスは、2 つのコマンドの CMD ライン上
に 1 に 1 サイクル・プルアップ・ビット(P ビット)をドライブします。応答が予
想される場合、P ビットは、応答が受信された後、そしてコマンドの開始前にドラ
イブされます。CCS を期待するコマンドについては、CE-ATA カード・デバイスにアク
セスするときに、P ビットは、CE-ATA カード(ATA のコントロール・レジスタでの
nIEN ビットは 1 に設定されている)での割り込みがディセーブルされるときにのみ、
応答した後にドライブされます。つまり、CCS expected ビット(ccs_expected)は
cmd レジスタが 0 に設定されています。コマンドが CCS を想定している場合、P ビット
は、CCS を受信した後にのみドライブされます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒22
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
CCS のポーリング
CE-ATA カード・デバイスは、通常の ATA コマンド補完または ATA コマンド終端のホ
スト・コントローラに通知する CCS を生成します。カードからの応答を受信した後
に、コマンド・パスのステート・マシンは、cmd レジスタ・に応じて図 11–7 に示す
機能を実行します。
図 11‒7. CE-ATA コマンド・パスのステート・マシン
ccs_expected = 1
Response
End Bit
Transmit
CMD12
ccs_expected = 0
wait_CCS
cmd_in = 0
wait_tncc
Command
Idle
send_auto_stop_ccsd
okay_to_send_ccsd
send_CCSD
counter_zero
以下は、図 11–7 での細部について説明します。
1. Response end bit state— ステート・マシンはカード・デバイスからの応答の最後の
ビットを受信します。cmd レジスタの ccs_expected ビットが 1 に設定されている
場合、ステート・マシンは wait CCS のステートになります。
2. Wait CCS— ステート・マシンは、CE-ATA カード・デバイスからの CCS を待ちま
す。CCS のを待っている間、以下のイベントが発生する可能性があります。
a. ソフトウェアは、CCS を待つことと、コマンド・ラインで CCSD パターンを送
信しないことを示す ctrl レジスタでの send CCSD ビット(send_ccsd)を設
定します。
b. CMD ラインの CCS を受信します。
3. Send CCSD command—CMD ライン上 CCSD パターン(0b00001)を送信します。
ホスト・プロセッサへの CCS 検出および割り込み
cmd レジスタの ccs_expected ビットが 1 に設定された場合、CE-ATA カード・デバイス
からの CCS が rintsts レジスタでの data transfer over ビット(dto)を設定すること
によって示されます。この割り込みがマスクされていない場合、コントローラは、
DTO の割り込みを生成します。
RW_MULTIPLE_BLOCK コマンドについては、CE-ATA カード・デバイス割り込みがディ
セーブルされる場合(ATA のコントロール・レジスタの nIEN ビットが 1 に設定され
ている)、cmd レジスタで ccs_expected ビットが 0 に設定されると、カードからの
CCS が存在しません。データ転送が完了すると(すなわち、要求されたバイト数が
転送されると)、rintsts レジスタの dto ビットが 1 に設定されています。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒23
CCS タイムアウト
コマンドは、カード・デバイス(ccs_expected ビットは cmd レジスタが 1 に設定さ
れている)からの CCS をウェイトする場合、コマンド・ステート・マシンは、CCS
をウェイトして、ウェイト CCS 状態に留まります。CE-ATA カードが CCS を送信する
ために失敗した場合、ホスト・ソフトウェアは、コマンドとデータ・パスを解放す
るためにタイムアウト・メカニズムを実装する必要があります。コントローラは、
ハードウェア・タイマを実装するのではなく、ソフトウェア・タイマを維持するこ
とはホスト・ソフトウェアの責任です。
CCS のタイムアウトが発生した場合、ホストは、ctrl レジスタの send_ccsd ビット
を設定することによって、CCSD のコマンドを発行する必要があります。コントロー
ラー・コマンド・パスのステート・マシンは CE-ATA カード・デバイスに CCSD のコ
マンドを送信して、アイドル状態を完了します。また、CCSD のコマンドを送信した
後、ホストは未処理の ATA コマンドの中止に CE-ATA カードに SD/SDIO
STOP_TRANSMISSION コマンドを送信する必要があります。
CCSD のコマンドの送信
ctrl レジスタの send_ccsd ビットが 1 に設定されている場合、コントローラは、CMD
ライン上の CCSD パターンを送信します。CCS を待っている間、または CCS のタイム
アウトが発生した後、にホストは CCSD のコマンドを送信することができます。
CCSD パターンを送信した後、コントローラは rintsts レジスタの cmd ビットを設定
し、Command Done の割り込みがマスクされていない場合、ホストに割り込みを発生
します。
1
CIUブロック内で、ctrlレジスタのビットsend_ccsdがCCSがサンプリングされている
のと同じクロック・サイクルで 1 に設定されている場合、CIU ブロックは CMD ライ
ン上の CCSD パターンを送信しません。このケースでは、rintsts レジスタの dto お
よび cmd ビットが 1 に設定されます。
1
非同期境界のため、CCS がすでに発生した可能性があり、send_ccsd ビットが 1 に設定
されます。このケースでは、CCSD のコマンドは、CE-ATA カード・デバイスに送信さ
れなくなり、send_ccsd ビットは 0 に設定されていません。次のコマンドが発行され
る前に、ホストは 0 に send_ccsd ビットをリセットする必要があります。
ctrl レジスタの送信自動停止 CCSD(send_auto_stop_ccsd)ビットが 1 に設定されて
いる場合、コントローラは、CCSD のパターンを送信した後、内部で生成された
STOP_TRANSMISSION コマンド(CMD12)を送信します。コントローラは rintsts レ
ジスタでの acd ビットを設定します。
I/O 伝送遅延 (NACIO タイムアウト )
ホスト・ソフトウェアは、CE-ATA カード・デバイスからの読み出し中に I/O 伝送遅
延(NACIO サイクル)のタイムアウトを処理するためのタイムアウト・メカニズムを
維持します。コントローラは、任意のタイムアウト・メカニズムを維持すること、
またはデータ・トークンのスタート・ビットを待っている間 NACIO サイクルの経過
を示すことをしません。I/O 伝送遅延が RW_REG と RW_BLK コマンドを使用して転送
を読み出すために適当ですが、このドキュメントで使用されている RW_REG と
RW_BLK コマンドは、CE-ATA 仕様で定義される RW_MULTIPLE_REGISTER と
RW_MULTIPLE_BLOCK MMC コマンドを参照しています。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒24
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
1
NACIO タイムアウトの後に、アプリケーションは CCSD と STOP コマンド、または STOP
コマンドを送信することによって、コマンドを中止する必要があります。rintsts レ
ジスタでのデータ・リード・タイムアウトの boot data start ビット(bds)と dto ビッ
トが 1 に設定されている場合、Data Read Timeout(DRTO)割り込みは、
STOP_TRANSMISSION コマンドがコントローラの転送されている間に 1 に設定される
ことがあります。
データ・パス
データ・パス・ブロックは、ライト・データ転送中にカード・バス上でデータ FIFO
バッファを読み込み、データを送信します。または、リード・データの転送中に
FIFO バッファにデータを受信して、書き込みます。データ・パスは、予期される
データ、リード / ライトのデータ転送、ストリーム / ブロック転送、ブロック・サイ
ズ、バイト数、カードタイプ、タイムアウト・レジスタなどの新しいデータ・パラ
メータをデータ転送コマンドが進行中ではないときにロードします。cmd レジスタの
data transfer expected ビット(data_expected)が 1 に設定されている場合、新しいコ
マンドは、データ転送コマンドであり、データ・パスは、次のいずれかのアクショ
ンを開始します。
■
リード / ライト・ビットの転送データ = 1
■
リード / ライト・ビットの受信データ = 0
データ送信
図 11–8 に示すように、データ送信ステート・マシンは、データ・ライト・コマンド
を受信したとき応答した後にデータ伝送の 2 つのクロック・サイクルを開始します。
コマンド・パスが応答エラーまたは応答の CRC エラーを検出しても発生します。応
答が原因で応答タイムアウトのカードから受信されていない場合、データは送信さ
れません。cmd レジスタでの transfer mode ビット(transfer_mode)の値に応じて、
データ送信ステート・マシンはストリームまたはブロック内のカード・データ・バ
ス上にデータを入れます。
図 11‒8. データ送信ステート・マシン
load_new_cmd,
data_expected, Write
Data & Block Transfer
Stop Data Command
Data Tx
Idle
load_new_command,
data_expected, Write
Data & Stream Transfer
Tx
Data Block
Stop Data Command
Block Done
Byte Count
Remaining != 0
Data Not Busy
Byte Count
Remaining = 0
or Suspend/Stop
Data Command
Tx
Data Stream
Rx
CRC Status
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒25
ストリーム・データ送信
cmd レジスタの transfer_mode ビットが 1 に設定されている場合、転送はストリー
ム・ライト・データ転送となります。データ・パスは BIU からの FIFO バッファ
からデータを読み込み、カード・データ・バスへのストリームに送信します。
FIFO バッファが空になった場合、データが FIFO バッファに使用可能になると、
カード・クロックを停止して再始動します。
bytcnt レジスタが 0 にリセットされると、転送はオープン・エンド・ストリー
ム・ライトのデータ転送となります。このデータ転送時には、データ・パスは連
続してホスト・ソフトウェアが SD/SDIO STOP コマンドを発行するまでストリー
ム内のデータを送信します。STOP コマンドのエンド・ビットおよびデータのエ
ンド・ビットは 2 つのクロック・サイクルに一致した場合、ストリーム・データ
転送は終了します。
bytcnt レジスタがゼロ以外の値が記述されている場合、または cmd レジスタの
send_auto_stop ビットが 1 に設定されている場合、STOP コマンドの最後のビット
ストリーム・ライト転送の最後のバイトが一致した後に発生したときに、STOP
コマンドは内部で生成され、コマンド・パスにロードされます。また、データ・
バイトがすべてカード・バスに転送される前に、ホストが STOP コマンドを出せ
ば、このデータ転送はさらに終了することができます。また、すべてのデータ・
バイトがカード・バスに転送される前にホストは STOP コマンドを発生すると、
このデータ転送が終了させることができます。
シングル・ブロック・データ
cmdレジスタの transfer_mode ビットが 0 に設定されており、bytcntレジスタの値
は block_size レジスタ値に等しい場合、シングル・ブロックのライト・データ
転送が発生します。データ・送信ステート・マシンは、内部で生成された 16 項
CRC (CRC-16) を含むバイト数がブロック・サイズに等しいシングル・ブロックで
データを送信します。
ctype レジスタが 1 ビット、4 ビット、または 8 ビット・データ転送用に設定され
ている場合、データはそれぞれ 1、4、または 8 のデータ・ラインに送信されま
す。また、CRC-16 はそれぞれ 1、4、または 8 のデータ・ラインに別々に生成
し、送信されます。
シングル・データ・ブロックが送信された後、データ送信ステート・マシンは
カードから CRC ステータスを受信して、BIU へのデータ転送を通知します。これ
は rintsts レジスタの dto のビットが 1 に設定された場合に発生します。
負の CRC ステータスがカードから受信した場合、データ・パスがレジスタ
rintsts で dcrc ビットを設定することにより、
BIU に対するデータの CRC エラーを
通知します。
また、CRC ステータスのスタート・ビットは、データ・ブロックの終了後に 2 ク
ロック・サイクルで受信されない場合、CRC ステータス・スタート・ビット・エ
ラー(SBE)は、rintsts レジスタの SBE ビットを設定することにより、BIU に
通知されます。
複数のブロック・データ
cmd レジスタの transfer_mode ビットが 0 に設定されて、bytcnt レジスタの値が
block_size のレジスタの値に等しくない場合、複数のブロックのライト・デー
タ転送が発生します。データ送信ステート・マシンは、内部で生成された CRC16 を含むブロック内のバイト数がブロック・サイズと等しいブロック内のデー
タを送信します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒26
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
ctype レジスタが 1 ビット、4 ビット、または 8 ビット・データ転送用に設定され
ている場合、データはそれぞれ 1、4、または 8 のデータ・ラインに送信されま
す。また、CRC-16 はそれぞれ 1、4、または 8 のデータ・ラインに別々に生成
し、送信されます。
1 データ・ブロックが送信された後、データ送信ステート・マシンがカードから
CRC ステータスを受信ししす。残りのバイト数が 0 になった場合、BIU へのデー
タ・パスは、データ転送が完了したことを通知します。これは、rintsts レジス
タの dto のビットが 1 に設定された場合に発生します。
残りのデータ・バイトがゼロより大きい場合、データ・パス・ステート・マシン
は、別のデータ・ブロックの送信を開始します。
負の CRC ステータスがカードから受信した場合、データ・パスは rintsts レジ
スタに dcrc ビットを設定することにより、BIU に対するデータ CRC エラーを通
知し、すべてのバイトが送信されるまで、データ送信を継続します。
CRC ステータ・ススタート・ビットがデータ・ブロックの終了後に 2 クロック・
サイクルで受信されない場合、CRC ステータス SBE は rintsts レジスタに ebe
ビットを設定し、データ転送が終了したことにより、BIU に通知されます。
send_auto_stopビットはcmdレジスタが1に設定されている場合、SD/SDIO STOPコ
マンドは、内部的に余分なバイトがカードに転送されていない最後のデータ・ブ
ロックの転送中に生成されます。STOP コマンドのエンド・ビットは最後のデー
タ・ブロックの CRC ステータスのエンド・ビットと一致しない場合があります。
カードのデータ幅のそれぞれ 1 ビット、4 ビット、または 8 ビットのためにブ
ロック・サイズが 4、16、32 より小さい場合、データはすべてのデータ送信ス
テート・マシンは、すべてのデータが転送されるときに終了します。その場合に
は、内部で生成される STOP コマンドは、コマンド・パスにロードされます。
bytcnt がゼロの場合(ブロック・サイズはゼロより大きくなければならない)
転送は、オープン・エンドのブロック転送です。データ転送のこのタイプのデー
タ送信ステート・マシンは、ホスト・ソフトウェアが SD/SDIO STOP または
STOP_TRANSMISSION(CMD12)コマンドを発行するまで、ブロック・ライト・
データ転送を継続します。
データ・レシーバ
図 11–9 に示されるように、データ受信ステート・マシンは、コマンド・パスが応答
エラーや応答 CRC エラーを検出した場合でも、データ・リード・コマンドの最後の
ビットの後にデータの 2 クロック・サイクルを受信します。応答タイムアウトが発
生するため、応答がカードから受信されていない場合、BIU は、データ転送が完了し
たことを信号を受信しません。コントローラによって送信されたコマンドがカード
に対する不正なオペレーションのとき、これは発生します。これによって、カード
はリード・データ転送を開始することを防ぎます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒27
データがデータ・タイムアウトの前に受信されない場合、データ・パスは BIU への
データ・タイムアウトおよび実行されたデータ転送のエンドを示します。cmd レジス
タの transfer_mode ビットの値に基づいて、データ受信ステート・マシンは、スト
リームまたはブロック(複数可)のカード・データ・バスからデータを取得します。
図 11‒9. データ受信ステート・マシン
load_new_cmd,
data_expected, Read
Data & Block Transfer
Stop Data Command
Data Rx
Idle
load_new_command,
data_expected, Read
Data & Stream Transfer
Rx
Data Block
Stop Data Command
Block Done
Byte Count
Remaining != 0
Byte Count
Remaining = 0
or Stop Data Command
Rx
Data Stream
Read
Wait
ストリーム・データ・リード
cmd レジスタの transfer_mode ビットが 1 に設定されている場合、ストリーム・
リード・データ転送が発生します。このとき、データ・パスは、カードからデー
タを受信し、FIFO バッファに書き込まれます。FIFO バッファがフルになった場
合、カード・クロックを停止して、FIFO バッファが完全ではない場合に再起動し
ます。
bytcnt レジスタが 0 に設定されている場合、オープン・エンドのストリーム・
リード・データ転送が発生します。このデータ転送時には、データ・パスはホス
ト・ソフトウェアがを SD/SDIO STOP コマンド発行するまで連続してストリーム
内のデータを受信します。ストリーム・データ転送は、STOP コマンドの最後の
ビットの後の 2 クロック・サイクルを終了します。
bytcnt レジスタはゼロでない値が含まれている場合、そして cmd レジスタでの
send_auto_stop ビット 1 に設定される場合、STOP コマンドは、内部的に生成さ
れ、コマンド・パスにロードされます・このとき、STOP コマンドのエンド・
ビットがストリーム・データ転送が受信される最後のバイトの後に発生します。
すべてのデータ・バイトがカードから受信される前に、ホストがコマンド
SD/SDIO STOP または STOP_TRANSMISSION(CMD12)を生成する場合、このデー
タ転送が終了することができます。
シングル・ブロック・データ・リード
ctype レジスタは 1 ビット、4 ビット、または 8 ビット・データ転送に設定されて
いる場合、データはそれぞれ 1、4、または 8 のデータ・ラインから受信され、
CRC-16 は別々に生成し、それぞれ 1、4、または 8 つのデータ・ラインのために
チェックされます。CRC-16 の不一致がある場合、データ・パスは BIU へのデータ
の CRC エラーを通知します。受信エンド・ビットが 1 でない場合、BIU は、エン
ド・ビット・エラー(EBE)を受信します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒28
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
複数ブロック・データ・リード
cmd レジスタの transfer_mode ビットが 0 に設定されて、bytcnt レジスタの値が
block_size のレジスタの値と等しくない場合、転送は、複数ブロックのリー
ド・データ転送となります。データ受信ステート・マシンは、内部で生成された
CRC-16 を含むブロック内のバイト数がブロック・サイズに等しいブロック単位
でデータを受信します。
ctype レジスタは 1 ビット、4 ビット、または 8 ビット・データ転送に設定されて
いる場合、データはそれぞれ 1、または 8 のデータ・ラインから受信され、CRC16 は別々に生成し、それぞれ 1、4、または 8 つのデータラインのためにチェッ
クされます。データ・ブロックが受信された後、残りのバイト数がゼロになった
場合、データ・パスは BIU へのデータ転送を通知します。
残りのデータバイトがゼロより大きい場合、データ・パス・ステート・マシン
は、別のデータ・ブロックが受信されるようになります。受信されたデータ・ブ
ロックの CRC-16 は、内部で生成された CRC-16 と一致しない場合、BIU へのデー
タ CRC エラーとデータ受信はべてのバイトが送信されるまでデータ送信を継続
します。さらに、受信データ・ブロックのエンドが 1 でない場合、データ・パス
信号のデータは CIU へのビット・エラーを終了し、データ受信ステート・マシン
はデータ受信を終了し、データタイムアウトを待ち、そして BIU にデータ転送が
完了したことを通知します。
cmd レジスタの send_auto_stop ビットが 1 に設定されている場合、最後のデータ・
ブロックを転送する際に余分なバイトがカードから転送されていないと、
SD/SDIO STOP コマンドは、内部的に生成されます。STOP コマンドのエンド・
ビットはまさに最後のデータ・ブロックのエンド・ビットと一致しない場合があ
ります。
カードへのデータ転送のための要求されたブロック・サイズは 1 ビット、4 ビッ
ト、または 8 ビットのデータ転送モードはそれぞれ 4、16、32 バイト未満の場
合、データ送信ステート・マシンは、すべてのデータが転送されるとデータ転送
を終了します。その場合には、内部的に生成された STOP コマンドはコマンド・
パスにロードされます。その後にカードから受信したデータは、データ・パスで
無視されます。
bytcnt レジスタが 0(ブロック・サイズはゼロより大きくなければならない)の
場合、転送はオープン・エンドのブロック転送です。このタイプのデータ転送の
場合、データ受信ステート・マシンは、ブロック・リードのデータ転送はホス
ト・ソフトウェアが SD/SDIO STOP または STOP_TRANSMISSION(CMD12)コマン
ドを発行するまで続行します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒29
オート・ストップ
コントローラは、内部 SD/SDIO STOP コマンドを生成し、cmd レジスタの
send_auto_stop ビットが 1 に設定されたコマンド・パスにロードされます。
AUTO_STOP コマンドは、MMC のためのストリーム・リードまたはライト、そして複
数ブロックの読み出しまたは SD カード用の SD メモリ転送のためのリードまたはラ
イトを使用して、データ・バイトの正確な数を送信するために役立ちます。ソフト
ウェアは、表 11–10 に記載されている内容に応じて send_auto_stop ビットを設定す
る必要があります。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒30
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
表 11‒10. オート・ストップの生成
以下のリストは、AUTO_STOP コマンドのための条件について説明します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
2012 年 11 月
11‒31
■
ゼロより大きいバイト数の MMC 用ストリーム・リード — データの最後のバイトが
カードから読み出したときに STOP コマンドのエンド・ビットが送信されるよう
に、また余分なデータバイトが受信されないように、コントローラは、内部
STOP コマンドを生成して、コマンド・パスにロードします。バイト数が 6(48
ビット)よりも小さい場合、いくつかの余分なデータ・バイトが送信され、STOP
コマンドのエンド・ビットの前にカードから受信されます。
■
ゼロより大きいバイト数の MMC 用ストリーム・ライト — データの最後のバイトの
送信したときに STOP コマンドのエンド・ビットが送信されるように、また余分
なデータバイトが送信されないように、コントローラは、内部 STOP コマンドを
生成して、コマンド・パスにロードします。バイト数は 6(48 ビット)よりも小
さい場合、データ・パスは、これらの条件を満たすために最後のデータを送信し
ます。
■
ゼロより大きいバイト数の SD カード用複数ブロックのリード・メモリ — ブロッ
ク・サイズが 4(シングル・ビット・データ・バス)、16(4 ビット・データ・バ
ス)、または 32(8 ビット・データ・バス)未満の場合、すべてのバイトが読み
込まれた後に、AUTO_STOP コマンドはコマンド・パスにロードされます。それ以
外の場合、STOP コマンドは、最後のデータ・ブロックを受信した後に STOP コマ
ンドのエンド・ビットが送信されるようにコマンド・パスにロードされます。
■
ゼロより大きいバイト数の SD カード用複数ブロックのライト・メモリ — ブロッ
ク・サイズが 3(シングル・ビット・データ・バス)、12(4 ビット・データ・バ
ス)、または 24(8 ビット・データ・バス)未満の場合、すべてのデータ・ブ
ロックが転送された後に AUTO_STOP コマンドは、コマンド・パスにロードされ
ます。それ以外の場合、STOP コマンドは CRC ステータスのエンド・ビットが受
信された後に、STOP コマンドのエンド・ビットが送信されるようにコマンド・
パスにロードされます。
■
auto-stop 中にホスト・ソフトウェアのための注意事項自 —AUTO_STOP コマンドが
発行されるとき、ホスト・ソフトウェアはコントローラによって AUTO_STOP コ
マンドが送信されるまで、そしてデータ転送が完了されるまでコントローラに新
しいコマンドを発行してはいけません。ホストが AUTO_STOP コマンドの進行中
に新しいコマンドを発行する場合、データ転送中に新しいコマンドが送信され、
その応答を受信した後、AUTO_STOP コマンドが送信する場合があります。これに
より、STOP コマンドの送信が遅延され、 余分なデータ・バイトを転送すること
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒32
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
ができます。ストリーム・ライトには、余分なデータ・バイトはエラー・データ
であり、カード・データが破損することがあります。ホストがデータ転送が完了
する前にデータ転送を終了する場合、SD/SDIO STOP または STOP_TRANSMISSION
(CMD12)コマンドを発行することができます。その場合には、コントローラー
が AUTO_STOP コマンドを生成しません。
データ・パスを使用するデータ以外の転送コマンド
いくつかの SD/SDIO データ以外の転送コマンド(リードおよびライト・コマンド以
外)は、データ・パスを使用します。表 11–11 には、コマンドとそのレジスタ・
セットアップ要件を示します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒33
SEND_SCR
(ACMD51)
SEND_NUM_WR_BLOCKS
(ACMD22)
SD_STATUS
(ACMD13)
LOCK_UNLOCK
(CMD42)
PROGRAM_CSD
(CMD27)
SEND_WRITE_PROT
(CMD30)
表 11‒11. データ以外の転送コマンドと要件
cmd レジスタ・セットアップ
Cmd_index
0x1B=27 0x1E=30
0x2A=42
0x0D=13 0x16=22 0x33=51
Response_expect
1
1
1
1
1
1
Response_length
0
0
0
0
0
0
Check_response_crc
1
1
1
1
1
1
Data_expected
1
1
1
1
1
1
Read/write
1
0
1
0
0
0
Transfer_mode
0
0
0
0
0
0
Send_auto_stop
0
0
0
0
0
0
Wait_prevdata_complete 0
0
0
0
0
0
Stop_abort_cmd
0
0
0
0
0
スタ
フ・
ビット
スタフ・
ビット
4
8
4
8
0
cmdarg レジスタ・セットアップ
スタ
フ・
ビット
32 ビッ
ト・ラ
イト保
護デー
タ・ア
ドレス
スタフ・
ビット
スタ
フ・
ビット
blksiz レジスタ・セットアップ
16
4
Num_bytes (1) 64
bytcnt レジスタ・セットアップ
16
4
Num_bytes (1) 64
表 11‒11 の注 :
(1) Num_bytes = ロック・カードのデータ構造に従って指定されたバイト数。SD 仕様と MMC の仕様を参
照してください。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒34
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
表 11‒12.
クロック・コントロール・ブロック
クロック・コントロール・ブロックは、SD/MMC/CE-ATA カードに必要なさまざまな
クロック周波数を提供します。クロック・コントロール・ブロックは、別のカード・
クロック周波数を生成するために使用される 1 クロック・ディバイダを持っていま
す。
カード・クロック周波数は次のクロック ctrl レジスタの設定に依存します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒35
■
clkdiv レジスタ — 内部クロック・ディバイダは、カードに必要なさまざまなク
ロック周波数を生成するために使用されます。クロック・ディバイダの分周比は
clkdiv レジスタに書き込むことによって行います。クロック・ディバイダは、1
から 510 までのクロック分周係数を提供し、8 ビットの値です。値が 0 の場合、
クロック・ディバイダのバイパスを表し、値が 1 の場合は 2 分周を表し、値が 2
の場合、4 分周を表します。
■
clksrc レジスタ — クロックはクロック・ディバイダ 0 で分割したため、このレジ
スタに 0 を設定します。
■
clkena レジスタ —cclk_out カードの出力クロックは、次の条件の下でイネーブ
ルまたはディセーブルすることができます。
■
clkena レジスタの cclk_enable ビットが 1 に設定されると、cclk_out がイネー
ブルされ、0 に設定されるとディセーブルされます。
■
低電力モードは、clkena レジスタの cclk_low_power ビットを 1 に設定するこ
とによりイネーブルすることができます。低電力モードはカードの電源を節
約するためにイネーブルされる場合、カードが少なくとも 8 カード・クロッ
ク・サイクルの間アイドル状態になったとき、cclk_out 信号がディセーブル
されます。低電力モードは、新しいコマンドがロードされたときにイネーブ
ルされており、コマンド・パスが非アイドル状態になります。
次の条件下では、カード・クロックが停止しているか、またはディセーブルされま
す。
1
■
クロックはclkena レジスタに書き込むことによってディセーブルされることがで
きます。
■
低消費電力モードが選択される場合、またカードには、少なくとも 8 クロック・
サイクルの間アイドル状態になっている場合。
■
FIFO バッファがフルの場合。そのとき、FIFO バッファのオーバーフローを回避す
るために、データ・パスは、カードからのデータを受け入れることができなくな
り、データ転送は不完全になります。
■
FIFO バッファが空の場合、FIFO バッファのアンダーフローを回避するために、
データ・パスがカードに多くのデータを送信することができず、データ転送は不
完全になります。
カード・クロックは、ホスト・ソフトウェアが clkdiv と clksrc レジスタの値を変更
する前に clkena レジスタを使ってディセーブルされる必要があります。
エラー検出
エラーは次のような状況で CIU 内でカード動作時に発生する可能性があります。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒36
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
応答
■
応答タイムアウト — これは、タイムアウト・レジスタのクロック・サイクルの指
定された数以内に応答スタート・ビットと予想される応答を受信しません。
■
応答 CRC エラー— 応答が予想して、チェック応答 CRC が要求されます。応答 CRC-7
は、内部で生成された CRC-7 と一致しません。
■
応答エラー — 応答送信ビットが 0 でない場合、コマンド・インデックスは、送信
コマンドのコマンド・インデックスと一致しない、または応答エンド・ビットが
1 ではありません。
データ送信
■
CRC ステータスなし — ライト・データ転送中、データ・ブロックの終了ビットが
発送された後、CRC ステータス・スタートビットが 2 クロック・サイクルに対し
て受信されない場合、データ・パスは次のアクションを行ないます。
■
BIU への CRC ステータス・エラーを示しません。
■
一層のデータ転送を終了します。
■
BIU へのデータ転送が完了したことを示します。
■
負の CRC— ライト・データ・ブロックの後の受信した CRC ステータスが負の場合
(つまり、0b010 ではない場合)、データ・パスは BIU へのデータの CRC エラーを
通知し、データ転送を継続します。
■
空の FIFO バッファによるデータ飢餓 — FIFO バッファは、ライト・データ送信中に
空になった、またはカード・クロックが停止し、FIFO バッファは、クロック・サ
イクルのデータ・タイムアウト数の空のままである場合、データ・パスは BIU と
データ・パスにデータ飢餓、エラーを通知した場合、FIFO バッファ内のデータを
待機し続けます。
データ受信
■
データ・タイムアウト — リード・データの転送中に、データのスタート・ビット
がタイムアウト・レジスタで指定されたクロック・サイクル数の前に受信されな
い場合、データ・パスは、以下のアクションを実行します。
■
BIU へのデータ・タイムアウト・エラーを示します。
■
一層のデータ転送を終了します。
■
BIU へのデータ転送が完了したことを示します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
11‒37
■
データ SBE—4 ビットまたは 8 ビットのリード・データ転送時には、全ビット・
データ・ラインにスタート・ビットがない場合、データ・パスは BIU へのデータ
SBE を示し、データ・タイムアウト(それはデータ転送が修了した後に合図す
る)を待ちます。
■
データ CRC エラー — リード・データ・ブロック転送時には、受信した CRC-16 は、
内部で生成された CRC-16 と一致しないと、データ・パスは BIU へのデータの
CRC エラーを通知し、データ転送を継続します。
■
データ EBE— リード・データ転送時には、受信したデータの最後のビットが 1 でな
い場合、、データ・パスは、BIU への EBE を通知し、さらにデータ転送を終了し、
BIU にデータ転送が終了したことを通知します。
■
FIFO バッファフルによるデータ飢餓 — リード・データ送信時、FIFO バッファがフ
ルになったときに、カード・クロックは停止します。FIFO バッファは、クロッ
ク・サイクルのデータ・タイムアウト数の完全なままである場合、データ・パス
が rintsts レジスタでデータ飢餓 host timeout ビット(hto)を 1 に設定すること
により、BIU にデータ飢餓エラーを通知し、データ・パスは FIFO バッファが空に
なるまで待ちます。
クロック
SD/MMC コントローラのクロックは、表 11–13 に記載されています。
表 11‒13. SD/MMC コントローラのブロック
クロック名
方向
説明
sdmmc_clk
入力
SD/MMC コントローラ CIU 用のクロック
l4_mp_clk
入力
SD/MMC コントローラ BIU 用のクロック
sdmmc_cclk_out
出力
カード用の生成された出力クロック
sdmmc_sample_clk
内部
カードからのコマンドとデータをサンプリングするために使用される
sdmmc_clk の位相シフト・クロック sdmmc_drv_clk
内部
ホールド・タイムの要件要件を満たすためにカードにコマンドとデータ
を駆動するコントローラ用 sdmmc_clk の位相シフト・クロック
sdmmc_clk_divided
内部
sdmmc_clk の分周 4 クロック
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒38
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラの機能の説明
図 11–10 には、コントローラへの各種クロックの接続を示します。
図 11‒10. SD/MMC コントローラのクロック接続
l4_mp_clk
sdmmc_clk
sdmmc_cclk_out
sdmmc_clk_divided
Divide
by 4
Phase
Shifter
Phase
Shifter
sdmmc_drv_clk
SD/MMC
Controller
Core
sdmmc_sample_clk
sdmmc_fb_clk_in
シフタとコントローラに渡される前に、クロック・マネージャからの sdmmc_clk ク
ロックは 4(sdmmc_clk_divided クロック)によって分割されています。シフタは
sdmmc_drv_clk と sdmmc_sample_clk クロックを生成するために使用されます。これら
の位相シフタは、0、45、90、135、180、225、270、および 315 度を含む最大 8 つの
位相シフトまで提供します。sdmmc_sample_clk クロックは、位相シフタからの出力
によってドライブすることができます。位相シフトの度合いと sdmmc_sample_clk
ソースの選択は、システム・マネージャで行われます。位相シフトを設定し、
sdmmc_sample_clkクロックのソースを選択する方法について詳しくは、11–44ページ
の「クロックのセットアップ」に参照してください。
コントローラーはカードにドライブされ sdmmc_cclk_out クロックを生成します。
sdmmc_cclk_out クロックの生成について詳しくは、11–34 ページの「クロック・コン
トロール・ブロック」を参照してください。
リセット
SD/MMC コントローラが 1 つのリセット信号を持っています。リセット・マネー
ジャはコールドまたはウォーム・リセットで SD/MMC コントローラにこの信号をド
ライブします。
f 詳しくは、Cyclone V デバイス・ハンドブック Volume 3 の「 Reset Manager 」の章を参
照してください。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒39
インタフェース信号
表 11–14 は SD/MMC コントローラのインタフェース信号の I/O ピンの使用を示してい
ます。
表 11‒14. コントローラのインタフェースの I/O ピン
信号
幅
方向
説明
sdmmc_cclk_out
1
力
sdmmc_cmd
1
入力 / 力 カード・コマンド
sdmmc_pwren
1
力
sdmmc_data
8
入力 / 力 カード・データ
コントローラからカードへのクロック
外部デバイス・パワー・イネーブル
SD/MMC コントローラのプログラミング・モード
初期化
この項では、SD/MMC コントローラを初期化する方法について説明します。
図 11–11 は、SD/MMC コントローラの初期化フローを示しています。コントローラ
への電源とクロックが安定した後、コントローラ・アクティブ Low のリセットがア
サートされます。リセット・シーケンスは、レジスタ、FIFO バッファ・ポインタ、
DMA インタフェース・コントロール、およびコントローラ内のステート・マシンを
初期化します。
図 11‒11. SD/MMC コントローラ初期化シーケンス
Assert Active-Low Reset
Enable Power to Card
Set Interrupt Masks
Enumerate Card Stack
Set the Clock Source Assignments
Set Other Controller Registers
ソフトウェアは、パワー・オン・リセット後に次のステップを実行する必要があり
ます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒40
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
1. カードへの電力供給をイネーブルする前に、電圧レギュレータの電圧設定が正し
いことを確認します。
2. 電源イネーブル・レジスタ(pwren)に power enable ビット(power_enable)を 1
に設定することにより、カードへの電源をイネーブルします。次のステップに進
む前に、電源のランプアップ時間を待ちます。
3. intmask レジスタ 0 に適切なビットをリセットすることにより、割り込みマスク
を設定します。
4. ctrl レジスタの int_enable ビットを 1 に設定します。
1
アルテラでは、1 に int_enable ビットを設定する前に、保留中の割り込み
をクリアするために rintsts レジスタに 0xFFFFFFFF を書き込むことを推奨
します。
5. カードの種類に応じてカード・スタックを検出します。ディスカバリーのために
は、SD/MMC/CE-ATA 基準に準拠する 400 kHz のクロック周波数を制限する必要が
あります。詳細については、11–41 ページの「列挙されたカード・スタック」に
参照してください。
6. クロック・ソースの割り当てを設定します。コントローラの clkdiv と clksrc レ
ジスタを使用してカードの周波数を設定します。詳細については、11–44 ページ
の「クロックのセットアップ」を参照してください。
7. 次のような共通のレジスタとフィールドが初期化プロセス中に設定することがで
きます:
■
tmout レジスタの応答タイムアウト・フィールド(response_timeout)。典型
的な値は 0x64 になります。
■
tmout レジスタのデータ・タイムアウト・フィールド(data_timeout)、次の
最高値:
■
10 * NAC
= 10 * ((TAAC * FOP) + (100 * NSAC))
この場合、
NAC = カード・デバイスの総合アクセス時間
TAAC = データ・アクセス時間の時間依存的要因
FOP = カード動作に使用されるカード・クロック周波数
NSAC = データ・アクセス・タイムのワースト・ケースのクロックのレート
依存要因
■
ホスト FIFO バッファ・レイテンシ
オン・リード : ホストがフル FIFO バッファから読み出しを開始する前の経過
時間
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒41
オン・ライト : ホストは空の FIFO バッファへの書き込みを開始する前の経過
時間
■
Debounce counter レジスタ(debnce)。典型的なデバウンス値は 25 ms です。
■
FIFO スレッショルド・ウォーターマーク・レジスタ(fifoth)の TX watermark
フィールド(tx_wmark)。通常、スレッショルド値は 512 に設定され、FIFO
バッファの深さの半分です。
■
fifoth レジスタの RX watermark(rx_wmark)フィールド。通常、スレッショル
ドは 511 に設定されています。
これらのレジスタは、すべての SD/MMC/CE-ATA コマンドで変更する必要はありま
せん。SD/MMC/CE-ATA 仕様に従って典型的な値に設定します。
列挙されたカード・スタック
カード・スタックは次のタスクを実行します。
■
接続されているカードを発見します。
■
接続したカード内の相対 Card Address Register (RCA) を設定します。
■
カード固有の情報を読み出します。
■
カード固有の情報は、ローカルに格納されます。
コントローラに接続されているカードは、MMC、CE-ATA、SD または SDIO(IO ONLY、
MEM ONLY と COMBO を含む)カードであることができます。接続されているカード
の種類を識別するには、次のディスカバリー・シーケンスが必要です。
1. ctype レジスタ内のカード幅 1 または 4 ビット(card_width2)およびカード幅 8
ビット(card_width1)フィールドを 0 にリセットします。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒42
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
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
Capacity SD2.0 をサポートしていません。次に、GO_IDLE_STATE コマンドを発
行して、引数を指定して SD_SEND_OP_COND コマンドを発行します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
■
ビット [31] = 0x0 (予約ビット)
■
ビット [30] = 0x0(高容量ステータス)
■
ビット [29:24] = 0x0(予約ビット)
■
ビット [23:0] = サポートされている電圧範囲
11‒43
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 カードのタイ
プを決定している場合があります。この場合、発見されているタイプに応じて
カード・スタックを列挙する必要があります。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒44
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
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
クロックのセットアップ
SD/MMC コントローラの次のレジスタは、ソフトウェアがカードの所望のクロック
周波数を選択することができます:
■
clksrc
■
clkdiv
■
clkena
コントローラはアップデート・クロック・コマンドを受信したときに、この項で説
明するように、これらのレジスタにロードします。カード・クロック周波数を変更
するには、次のステップを実行します。
1. クロックをディセーブルされる前に、カードは以前のデータ・コマンドを使用し
て、ビジー状態でないことを確認します。これを実行するには、ステータス・レ
ジスタ(status)の data_busy ビットが 0 であることを確認します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒45
2. カード・クロック生成をディセーブルするには、clkena レジスタの cclk_enable
ビットを 0 にリセットします。
3. clksrc レジスタを 0 にリセットします。
4. cmd レジスタに次のビットを 1 に設定します。
■
update_clk_regs_only— アップデート・クロック・コマンドを指定します
■
wait_prvdata_complete— 進行中のデータ転送が完了するまでクロック・パラ
メータが変更されないことを保証します。
■
start_cmd— コマンドを開始します。
5. start_cmd と update_clk_regs_only ビットが 0 に変更されるまで待ちます。ク
ロックの変更が完了した割り込みはありません。コントローラは、コマンドの完
了時に rintsts レジスタでの command_done ビットを設定しません。それが既に
キュー内の別のコマンドがある場合、コントローラは、ハードウェアロック・エ
ラーを通知することがあります。この場合、ステップ 4 に戻ります。
ハード・ロック・エラーに関する情報については、11–72 ページの「割り込みと
エラー処理」を参照してください。
6. クロック・マネージャ・ペリフェラルの PLL グループ(perpllgrp)の enable レ
ジスタ sdmmc_clk_enable ビットを 0 にリセットします。
7. システム・マネージャでの SDMMC コントローラ・グループ(sdmmcgrp)のコン
トロール・レジスタ(ctrl)では、ドライブ・クロック位相シフト・セレクト
(drvsel)およびサンプル・クロックの位相シフト・セレクト(smplsel)ビット
を設定し、必要な位相シフト値を指定します。
8. クロック・マネージャ perpllgrp グループの Enable レジスタ内の
sdmmc_clk_enable ビットを 1 に設定します。
9. 必要なクロック周波数ディバイダの正しい値にコントローラの clkdiv レジスタ
を設定します。
10. カード・クロック生成をイネーブルするには、clkena レジスタの cclk_enable
ビットを 1 に設定します。
また、カードが複数の 8 クロック・サイクルの間アイドル状態のときに自動的に
sdmmc_cclk_out クロックを停止し、
低消費電力モードをイネーブルする clkena レ
ジスタを使用することができます。
コントローラ /DMA/FIFO バッファ・リセットの使用
次のリストは、SD/MMC コントローラの様々な部分にあるリセットの効果を示して
います。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒46
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
■
コントローラ・リセット —ctrl レジスタの controller_reset ビットを 1 に設定す
ることにより、コントローラーをリセットします。コントローラー・リセット
は、CIU とステート・マシンおよび BIU-to-CIU インタフェースをリセットします。
このリセット・ビットはセルフ・クリアですので、リセットを発行した後には、
このビットを 0 に更新するまで待ちます。
■
FIFO バッファ・リセット —ctrl レジスタの FIFO リセット・ビット(fifo_reset)
を 1 に設定することにより、FIFO バッファをリセットします。FIFO バッファ・リ
セットは FIFO バッファ内の FIFO バッファ・ポインタおよびカウンタをリセット
します。このリセット・ビットはセルフ・クリアですので、リセットを発行した
後には、このビットを 0 に更新するまで待ちます。
■
DMA リセット —ctrl レジスタの DMA リセット・ビット(dma_reset)を 1 に設定す
ることにより、内部 DMA コントローラ・ロジックをリセットします。それは、
直ちに進行中の任意の DMA 転送を終了します。このリセット・ビットはセルフ・
クリアですので、リセットを発行した後には、このビットを 0 に更新するまで待
ちます。
1
DMA が DMA リセットを実行する前にアイドル状態であることを確認しま
す。それ以外の場合、L3 は相互接続は不定の状態に陥る可能性がありま
す。
最初に、ctrl レジスタの controller_reset、fifo_reset、dma_reset と dma_reset
ビットを設定し、そして割り込みの結果をクリアするために、別のライトを使用し
て rintsts レジスタを 0 にリセットすることを推奨します。
FIFO バッファ ECC のイネーブル
ECC 付き FIFO バッファのデータを保護するには、SD/MMC コントローラを持つ任意
の動作を実行する前に、ECC 機能をイネーブルする必要があります。FIFO バッファ
ECC 機能をイネーブルするには、次のステップを実行します。
1. コントローラにコミットされたコマンドが存在しないことを確認します。
2. FIFO バッファが初期化されていることを確認します。すべての 1024 の FIFO バッ
ファ位置に 0 を書き込むことで FIFO バッファを初期化します。FIFO バッファが
0x200 から最大 FIFO バッファ・サイズに任意のアドレスへの書き込み時には有効
です。
3. 以前に検出された ECC エラーをクリアするには、システム・マネージャの
eccgrp グループ内の sdmmc レジスタで SDMMC RAM EC シングルとダブルの訂正可
能なエラー割り込みステータス・ビット(serrporta、derrporta、serrportb、
および derrportb)を 1 に設定します。
4. ctrl レジスタの fifo_reset ビットを 1 に設定することによって、FIFO バッファ
をリセットします。このアクションによると、FIFO バッファのポインタとカウン
タがリセットされます。このリセット・ビットは自動的にクリアされるので、リ
セットを発行した後、0 ビットが変化するまで待ちます。
5. SD/MMC コントローラの FIFO バッファに ECC をイネーブルするには、システム・
マネージャの eccgrp グループ内 SDMMC レジスタの en ビットを 1 に設定しま
す。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒47
データ以外の転送コマンド
任意のデータ転送以外のコマンドを送信するには、ソフトウェアが適切なパラメー
タを指定して cmd レジスタと cmdarg レジスタを書き込む必要があります。これらの
2 つのレジスタを使用して、コントローラがコマンドを形成し、CMD ピンに送信しま
す。コントローラは rintsts レジスタのエラー・ビットを介してコマンド応答でエ
ラーを報告します。
応答が受信されると(エラー応答または有効な応答)コントローラが rintsts レジ
スタでの command_done ビットを 1 に設定します。短い応答は、resp0 にコピーされ
ていますが、長い応答はすべての 4 つの応答レジスタ(resp0、resp1、resp2、およ
び resp3)にコピーされています。長い応答では、resp3 のビット 31 は MSB を表わ
します。また、resp0 のビット 0 は LSB を表わします。
基本とデータ転送以外のコマンドについては、次のステップを実行します。
1. 適切なコマンドの引数パラメータで cmdarg レジスタに書き込みます。
2.
11–50 ページの表 11–15 の設定で cmd をレジスタに書き込みます。
3. コマンドを受け付けるようにコントローラを待ちます。start_cmd ビットは、コ
マンドが受け入れられるときに 0 にに変更されます。
コマンドがコントローラにロードされたときに次のアクションが発生します。
■
前のコマンドが処理されていない場合、コントローラは実行のためにコマン
ドを受け入れ、cmd レジスタの start_cmd ビットを 0 にリセットします。前の
コマンドが処理されている場合、コントローラは、コマンド・バッファの新
しいコマンドをロードします。
■
コントローラーが新しいコマンド(すなわち、コマンドは既に進行中の場合)
をロードすることができない場合、2 番目のコマンドはバッファにあります。
また、3 番目のコマンドが試みられます。そのとき、コントローラはハード
ウェア・ロック・エラーを生成します。
4. ハードウェア・ロック・エラーがあるかどうかを確認します。
5. 完了するまでコマンドの実行を待ちます。カードまたは応答タイムアウトからの
応答を受信した後、コントローラは rintsts レジスタでの command_done ビット
を 1 に設定します。ソフトウェアは、このビットをポーリングするか、または生
成された割り込み(イネーブルされる場合)に応答することができます。
6. 応答タイムアウト boot acknowledge received(bar)、rcrc、または re ビットが 1
に設定されることをチェックします。ソフトウェアは、これらのエラーによって
提起される割り込みに応答するか、または rintsts レジスタの re、rcrc、および
bar ビットをポーリングすることができます。応答エラーが受信されない場合、
応答が有効です。必要な場合、ソフトウェアが応答レジスタからの応答をコピー
することができます。
1
2012 年 11 月
コマンドが実行されている間、ソフトウェアはクロック・パラメータを変更するこ
とはできません。
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒48
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
データ転送コマンド
データ転送コマンドは、メモリ・カードとコントローラ間のデータを転送します。
データ・コマンドを発行するには、コントローラがコマンド引数、合計データ・サ
イズ、およびブロック・サイズを必要とします。メモリ・カードから(またはメモ
リ・カードに)転送されたデータはコントローラの FIFO バッファでバッファリング
されます。
データ転送コマンドを発行する前に、ソフトウェアは、カードが使用されておらず、
次のステップを実行して、転送状態にあることを確認する必要があります。
1. SD/SDIO SEND_STATUS(CMD13)コマンドを発行します。コントローラは、コマ
ンドに対する応答として、カードのステータスを送信します。
2. カードのビジー状態を確認します。
3. カードがビジーでなくなるまで待ちます。
4. カードの転送状態を確認します。カードがスタンド・バイ状態にある場合、
SD/SDIO、SELECT / DESELECT_CARD(CMD7)転送状態に配置するようにコマンド
を発行します。
1
CE-ATA RW_BLK ライト転送時には、MMC はビジー信号が最後のブロックの後にアサー
トされる場合があります。CE-ATA カード・デバイスの割り込みがディセーブルされ
る場合(カード・デバイスの ATA コントロール・レジスタ内の nIEN ビットが 1 に設
定されている場合)、カードが MMC BUSY を送信していても、rintsts レジスタの
dto ビットが 1 に設定されます。ホストは CMD61 コマンドの後に、ATA のビジー状態を
確認するには CMD60 コマンドを発行することはできません。代わりに、ホストは次
のいずれかのアクションを実行する必要があります。
■
SEND_STATUS コマンドを発行し、新しい CMD60 コマンドを発行する前に、MMC の
ビジー状態を確認する
■
CMD39 コマンドを発行し、新しい CMD60 コマンドを発行する前に、ATA のビジー
状態を確認する
データ転送コマンドの場合、ソフトウェアはそのカードにプログラムされているバ
ス幅の ctype レジスタを設定する必要があります。
データ転送中に、コントローラは、次の rintsts レジスタ・ビットに反映される異
なる条件のために割り込みを生成します。
1. dto— データ転送は、過剰または終端されています。応答タイムアウト・エラー
が発生した場合、コントローラは任意のデータ転送、データ転送を試行しなく、
Data Transfer Over ビットが設定されません。
2. Transmit FIFO data request bit (txdr)— データを送信するための FIFO バッファ・ス
レッショルドに達した場合、適用可能な場合、ソフトウェアは FIFO バッファに、
データを書き込むことが期待されています。
3. Receive FIFO data request bit (rxdr)—FIFO バッファ・スレッショルドのための受信
データが到達されます。ソフトウェアは FIFO バッファからデータを読み出すこと
が期待されています。
4. hto—FIFO バッファが送信中に空であることか、または受信中にフルであること
です。ソフトウェアは空の状態のデータを書き込む、または完全な状態のデータ
を読み出すことにより、この状態を補正しない限り、コントローラは、データ転
送を継続することはできません。カードへのクロックが停止されます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒49
5. bds— カードがタイムアウト期間内にデータ送信していません。
6. dcrc—CRC エラーは、データ受信時に発生しました。
7. sbe— スタート・ビットは、データ受信中に受信されていません。
8. ebe— エンド・ビットはデータ受信中に受信しました、または書き込み動作のた
めに受信されていません。CRC エラーは、カードによって示されます。
条件 6、7、および 8 は、受信したデータにエラーがあることを示しています。応答
タイムアウトがある場合、データ転送は行われません。
シングル・ブロック・リードまたはマルチ・ブロック・リード
シングル・ブロックまたは複数のブロック・リードを実装するには、ソフトウェア
は、以下のステップを実行します。
1. bytcnt レジスタにバイト単位のデータ・サイズを書き込みます。マルチ・ブ
ロック・リードの場合、bytcnt は、ブロック・サイズの倍数でなければなりませ
ん。
2. blksiz レジスタにバイト単位のブロック・サイズを書き込みます。コントローラ
は、データがサイズ blksiz のブロック内のカードから復帰することを期待して
います。
3. カードの遅延などのリード・ラウンド・トリップ遅延は、sdmmc_clk_divided の
半分より大きい場合、カード・クロックがカードからホストへの転送されるデー
タのブロックの途中で停止しないようにするために card threshold control レジスタ
(cardthrctl)に書き込みます。詳細については、11–69 ページの「カード・リー
ド・スレッショルド」を参照してください。
1
card read threshold enable ビット(cardrdthren)が 0 の場合、ホスト・シス
テムは、RX FIFO バッファが FIFO バッファに書き込まれるデータより速く
レートで読み出されることを保証することによって、RX FIFO バッファが
リード・データ転送中にフルにならないようにする必要があります。それ
以外の場合、オーバーフローが発生することがあります。
4. データ・リードの先頭データ・アドレスで cmdarg レジスタを書き込みます。
5. 表 11–15 に記載されているパラメータで cmd レジスタを書き込みます。SD と
MMC カードの場合、シングル・ブロック・リードのために SD/SDIO
READ_SINGLE_BLOCK(CMD17)コマンドを使用して、マルチ・ブロック・リード
のために READ_MULTIPLE_BLOCK(CMD18)コマンドを使用します。SDIO カード
には、両方のシングル・ブロックとマルチ・ブロックの転送に IO_RW_EXTENDED
(CMD53)コマンドを使用します。cmd レジスタに書き込んだ後、コントローラ
は、コマンドの実行を開始します。コマンドをバスに送信されると、Command
Done が生成されます。
6. ソフトウェアは、rintsts レジスタでの dcrc、bds、sbe、および ebe ビットでレ
ポートされるをチェックする必要があります。必要な場合、ソフトウェアが
SD/SDIO STOP コマンドを送信することにより、データ転送を終了することができ
ます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒50
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
7. ソフトウェアが rintsts レジスタでホストのタイムアウト条件をチェックする必
要があります:
■
FIFO バッファのデータ要求を受信する
■
ホストによるデータ飢餓 — ホストは、カードからデータを維持できる速度で
FIFO バッファから読み取っていません。この状態を修正するには、ソフト
ウェアは、次のステップを実行する必要があります。
■
status レジスタの fifo_count フィールドを読み込む
■
FIFO バッファのうちデータの対応する量を読み込む
どちらの場合も、ソフトウェアは FIFO バッファからデータを読み出して、そして
より多くのデータを受信するための FIFO バッファにスペースを構造する必要があ
ります。
8. DTO の割り込みが受信されると、ソフトウェアは、FIFO バッファから残りのデー
タを読み出す必要があります。
表 11‒15. シングル・ブロック・リードおよびマルチ・ブロック・リードのための cmd レジスタの設定 ( そ
の1 )
パラメータ
値
説明
デフォールト
start_cmd
1
コマンドが委託された後、このビットはそれ自体を 0 にリセット
します。
use_hold_reg
1 or 0
使用されているスピード・モードに基づいて値を選択します。
update_clk_regs_only
0
クロック・パラメータを更新する必要はありません。
data_expected
1
データ・コマンド。
card_number
1
1 つのカードのみ。
transfer_mode
0
ブロック転送。
send_initialization
0
SD/SDIO GO_IDLE_STATE コマンドなどのカード・リセット・コマ
ンドの場合は 1
それ以外の場合は 0
stop_abort_cmd
0
STOP_TRANSMISSION コマンドなどのデータ転送を中止する場合
は1
それ以外の場合は 0
send_auto_stop
0 または 1
read_write
0
response_length
0
response_expect
1 または 0
11–30 ページの表 11–10 に応じて設定します。
カードから読み出します。
R2(長い ) 応答の場合、値が 1 です。
短いの場合、値が 0 です。
SD/SDIO GO_IDLE_STATE、SET_DSR、および GO_INACTIVE_STATE な
どの対応のないコマンドの場合は 0
それ以外の場合は 1
ユーザー選択可能
wait_prvdata_complete
1 または 0
0— 直ちに CIU にコマンドを送信します。
1— 以前のデータ転送が終了した後にコマンドを送信します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒51
表 11‒15. シングル・ブロック・リードおよびマルチ・ブロック・リードのための cmd レジスタの設定 ( そ
の2 )
パラメータ
値
説明
デフォールト
check_response_crc
1 または 0
cmd_index
コマンド・
インデック
ス
0— コントローラが応答 CRC をチェックしてはいけません。
1— コントローラが応答 CRC をチェックする必要があります。
このパラメータをコマンド数に設定します。例えば、SD/SDIO
READ_SINGLE_BLOCK (CMS17) または READ_MULTIPLE_BLOCK
(CMD18) の場合、17 または 19 に設定します。
シングル・ブロック・ライトまたはマルチ・ブロック・ライト
次のステップでは、シングル・ブロック・ライトまたはマルチ・ブロック・ライトが
含まれています。
1. bytcnt レジスタにバイト単位でデータ・サイズを書き込みます。マルチ・ブ
ロック・ライトの場合、bytcnt は、ブロック・サイズの倍数でなければなりませ
ん。
2. blksiz レジスタにバイト単位でブロック・サイズを書き込みます。コントロー
ラは、それぞれサイズ blksiz ブロック単位でデータを送信します。
3. 書き込む必要があるデータに、データ・アドレスで cmdarg レジスタを書き込み
ます。
4. FIFO バッファにデータを書き込みます。FIFO バッファがフルになるまで、ホス
ト・ソフトウェアは、最高のパフォーマンスを得るには、連続のデータを書き込
む必要があります。
5.
11–52 ページの表 11–16 に記載されているパラメータで cmd レジスタを書き込み
ます。SD と MMC カードの場合、シングル・ブロック・ライトのために SD/SDIO
WRITE_BLOCK(CMD24)コマンドを使用して、マルチ・ブロック・ライトのため
に WRITE_MULTIPLE_BLOCK(CMD25)コマンドを使用します。SDIO カードには、
両方のシングル・ブロックとマルチ・ブロックの転送に IO_RW_EXTENDED コマン
ドを使用します。
cmd レジスタに書き込んだ後、他の処理したコマンドが存在しない場合、コント
ローラはコマンドの実行を開始します。コマンドをバスに送信されると、コマン
ド完了割り込みが生成されます。
6. フトウェアは、データ・エラー割り込みを確認する必要があります。それは、
rintsts レジスタの dcrc、bds、および ebe ビットのためです。必要な場合、ソフ
トウェアは SD/SDIO STOP コマンドを送信することにより、早期のデータ転送を
終了することができます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒52
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
7. ソフトウェアは、rintsts レジスタでのホストのタイムアウト条件をチェックす
る必要があります:
■
FIFO バッファのデータ要求を送信します。
■
ホストによるデータ飢餓 — コントローラはホストがデータを供給できるより
速くカードにデータを書き込みました。
どちらの場合も、ソフトウェアは FIFO バッファにデータを書き込む必要がありま
す。
転送は 2 種類があります:オープ・ンエンドと固定長。
■
オープンエンドの転送は — オープン・エンドブロック転送について、バイト・
カウントは 0 です。データ転送の終了時に、ソフトウェアは
STOP_TRANSMISSION コマンド(CMD12)を送信する必要があります。
■
固定長の転送 — バイト数がゼロ以外の値になります。このとき、バイト数が
すでに bytcnt レジスタに書き込まれる必要があります。
■
cmd レジスタの send_auto_stop ビットを 1 に設定した場合、コントローラは
STOP コマンドを発行します。指定されたバイト数の転送が終了した後、コン
トローラは STOP コマンドを送信します。AUTO_STOP コマンドの完了は、オ
Auto Command Done 割り込みで反映されます。AUTO_STOP コマンドに対する応
答は、resp1 レジスタに書き込まれます。
ソフトウェアが cmd レジスタでの send_auto_stopcmd ビットを 1 に設定して
いない場合、ソフトウェアはオープン・エンドの場合のように、STOP コマン
ドを発行する必要があります。
rintsts レジスタの dto ビットが設定されている場合、データ・コマンドが完了
しました。
表 11‒16. シングル・ブロックまたはマルチ・ブロックのための cmd レジスタ設定 ( その1 )
パラメータ
値
コメント
デフォールト
start_cmd
1
すとりコマンドがコミットされた後(BIU によって受け入れられ
る)
、このビットは自動的に 0 にリセットされます。
use_hold_reg
1 または 0
使用されているスピード・モードに基づいて値を選択します。
update_clk_regs_only
0
クロック・パラメータを更新する必要はありません。
data_expected
1
データ・コマンド。
card_number
1
1 つのカードのみ。
transfer_mode
0
ブロック転送。
send_initialization
0
値は 1 でも可能ですが、SD/SDIO GO_IDLE_STATE などのカード・
リセット・コマンド専用。
stop_abort_cmd
0
SD/SDIO STOP_TRANSMISSION などのデータ転送を中止するコマン
ドのために値が 1 でも可能です。
send_auto_stop
0 または 1
read_write
1
カードに書き込みます。
response_length
0
R2(長い ) 応答の場合、値が 1 でも可能です。
response_expect
1
応答なしのコマンドのために値が 1 でも可能です。例えば、
SD/SDIO GO_IDLE_STATE, SET_DSR, GO_INACTIVE_STATE などです。
11–30 ページの表 11–10 に応じて設定します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒53
表 11‒16. シングル・ブロックまたはマルチ・ブロックのための cmd レジスタ設定 ( その2 )
パラメータ
値
コメント
デフォールト
ユーザー選択可能
0— 直ちに CIU にコマンドを送信します。
wait_prvdata_complete
1
check_response_crc
1
cmd_index
コマンド・
インデック
ス
1— 以前のデータ転送が終了した後にコマンドを送信します。
0— コントローラが応答 CRC をチェックしてはいけません。
1— コントローラが応答 CRC をチェックする必要があります。
このパラメータをコマンド数に設定します。例えば、SD/SDIO
WRITE_BLOCK (CMD24) の場合は 24 を設定し、
WRITE_MULTIPLE_BLOCK (CMD25) の場合は 25 を設定します。
ストリーム・リードおよびライト
バイト・カウントが 0 に等しい場合、ソフトウェアは、SD/SDIO STOP コマンドを送
信する必要があります。バイト・カウントが 0 でない場合、指定されたバイト数が
転送を完了したときに、コントローラは自動的に STOP コマンドを送信します。この
AUTO_STOP コマンドの完了は Auto_command_done 割り込みによって反映されます。
AUTO_STOP コマンドに対する応答が resp1 レジスタに書き込まれます。ストリーム
転送は、1 ビットのデータ・バスを持つカードのインタフェースにのみ許可されま
す。
ストリーム・リードは、cmd レジスタでの次のビットを除いて 11–49 ページの「シン
グル・ブロック・リードまたはマルチ・ブロック・リード」に記載されるようにブ
ロック・リードと同じ手順を実行する必要があります。
■
transfer_mode = 0x1 (ストリーム転送の場合)
■
cmd_index = 20 (SD/SDIO CMD20)
ストリーム・ライトは、cmd レジスタでの次のビットを除いて 11–51 ページの「シン
グル・ブロック・ライトまたはマルチ・ブロック・ライト」に記載されるようにブ
ロック・ライトと同じ手順を実行する必要があります。
■
transfer_mode = 0x1(ストリーム転送の場合)
■
cmd_index = 11 (SD/SDIO CMD11)
パックされたコマンド
オーバーヘッドを削減するために、リード・コマンドとライト・コマンドは、バス
上の 1 つの転送で、グループ内のすべてのコマンドのデータを転送する(すべての
読み出しまたはすべての書き込みのいずれか)コマンドのグループにパックするこ
とができます。転送されるブロック数を述べるために SD/SDIO
SET_BLOCK_COUNT(CMD23) コマンドを使用してください。その後、マルチ・ブロッ
クの読み出しと書き込みをするように、シングル READ_MULTIPLE_BLOCK または
WRITE_MULTIPLE_BLOCK コマンドを発行します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒54
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
■
SET_BLOCK_COUNT— ブロック・カウントを設定する(READ_MULTIPLE_BLOCK ま
たは WRITE_MULTIPLE_BLOCK コマンドで使用されている送信したブロックの数)
■
READ_MULTIPLE_BLOCK— マルチ・ブロックのリード・コマンド
■
WRITE_MULTIPLE_BLOCK— マルチ・ブロックのライト・コマンド
パックされたコマンドは、アプリケーション・ソフトウェアによってパケットに編
成され、コントローラに透過的です。
f パックされたコマンドについて詳しくは、11–87 ページの「参考資料」の参照として、
JEDEC Standard No. 84-A441 を参照してください。
停止および中止コマンドの送信
この項では、停止および中止コマンドについて説明します。SD/SDIO
STOP_TRANSMISSION コマンドは、メモリ・カードとコントローラ間のデータ転送を
終了することができます。ABORT コマンドは SDIO カードの I/O データ転送を終了す
ることができます。
STOP_TRANSMISSION (CMD12)
データ転送が進行している間、ホストはいつでも CMD ピンに STOP_TRANSMISSION
(CMD12)コマンドを送信することができます。SD/SDIO カード・デバイスに
STOP_TRANSMISSION コマンドを送信するには、次のステップを実行します。
1. cmd レジスタの wait_prvdata_complete ビットを 0 に設定します。
2. cmd レジスタの stop_abort_cmd を 1 に設定します。これによると、CIU が停止す
ることを保証します。
STOP_TRANSMISSION コマンドは、データ転送以外のコマンドです。詳細について
は、11–47 ページの「データ以外の転送コマンド」を参照してください。
ABORT
ABORT コマンドは、SDIO カードを使用することができます。データを転送している
機能を中止するには、IO_RW_DIRECT(CMD52)を使用してカードのデバイスで card
common control register(CCCR)のアドレス 0x06 で ASX[2:0] ビットでの中止ファンク
ションの数をプログラムします。CCCR は、カード・スペース 0x0 – 0xFF のベースに位
置しています。
ABORT コマンドは、データ以外の転送コマンドです。詳細については、11–47 ページ
の「データ以外の転送コマンド」を参照してください。
SDIO カード・デバイスに ABORT コマンドを送信するには、次のステップを実行しま
す。
1. 表 11–17 に記載されている適切なコマンド引数のパラメータを含めるために
cmdarg レジスタを設定します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒55
2. cmd レジスタの次のフィールドを設定することにより、IO_RW_DIRECT コマンド
を送信します。
■
0x52(IO_RW_DIRECT)にコマンドのインデックスを設定します。
■
cmd レジスタの stop_abort_cmd ビットは、ホストがデータ転送を中止したコ
ントローラに通知するためにレジスタを 1 に設定します。
■
cmd レジスタの wait_prvdata_complete ビットを 0 に設定します。
3. rintsts レジスタでの cmd ビットが 1 に変更するまで待ちます。
4. エラーがないかどうかを確認するために応答レジスタ内の IO_RW_DIRECT コマン
ド(R5)への応答を読み出します。
f 応答値について詳しくは、11–87 ページの「参考資料」に記載されるように、Physical
Layer Simplified Specification, Version 3.01 を参照してください。
表 11‒17. SD/SDIO ABORT コマンドのための cmdarg レジスタ設定
ビット
31
内容
値
R/W flag
1
30:28
Function number
カード・デバイスでの CCCR をアクセスする場合は 0
27
RAW flag
書き込み後に読み出す必要がある場合は 1
26
Don't care
25:9
Register address
8
Don't care
7:0
Write data
0x06
中止するファンクションの番号
内部 DMA コントローラの動作
より良いパフォーマンスを得るためには、ホストとコントローラーの間でデータを
転送するために内部の DMA コントローラを使用することができます。この項では、
内部の DMA コントローラの初期化プロセス、送信シーケンス、受信順序を説明して
います。
内部 DMA コントローラの初期化
内部 DMA コントローラを初期化するには、次のステップを実行します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒56
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
1. 必要な bmod レジスタのビットを設定します。
■
■
DMA 転送中で、bmod レジスタの内部 DMA コントローラのイネーブル・ビット
(de)が 0 に設定された場合、その変更は効力がありません。ディセーブルさ
れると、新しいデータ転送コマンドにのみ有効になります。
ソフトウェア・リセットを発行すると、すぐに転送を終了します。ソフト
ウェアリセットを発行する前に、ホストが ctrl レジスタの dma_reset ビット
を 1 に設定することによって、DMA インタフェースをリセットを推奨します。
■
bmod レジスタの pbl フィールドは読み出し専用であり、fifoth レジスタの DMA
複数のトランザクション・サイズ・フィールド
(dw_dma_multiple_transaction_size)の内容を直接反映されています。
■
bmod レジスタの fb ビットは、システムの性能に合わせて適切に設定する必要
があります。
2. 次のガイドラインに従って、不要な割り込みの引き起こしをマスクする idinten
レジスタへの書き込みます。
■
Descriptor Unavailable 割り込みがアサートされると、ソフトウェアはディスク
リプタを形成し、適切に独自のビットを設定し、ディスクリプタをリフェッ
チする内部 DMA コントローラの poll demand レジスタ(pldmnd)に書き込む
必要があります。
■
転送に関連するエラーがソフトウェアに報告していますので、常に異常の割
り込みをイネーブルすることは、ソフトウェアに適しています。
3. メモリ内の送信または受信ディスクリプタ・リストのいずれかを移入します。そ
の後、内部 DMA コントローラの descriptor list base address レジスタ(dbaddr)に、
リスト内の最初のディスクリプタのベース・アドレスを書き込みます。DMA コン
トローラは、メモリからディスクリプタリストをロードします。
次の 2 つの項、「内部 DMA コントローラの送信シーケンス」および 11–57 ページ
の「内部 DMA コントローラの受信シーケンス」は、このステップについて詳し
く説明します。
内部 DMA コントローラの送信シーケンス
データを送信するために内部の DMA コントローラを使用するには、次のステップを
実行します。
1. ホストは送信用の Descriptor フィールド(DES0-DES3)を設定し、OWN ビット
(DES0[31])を 1 に設定します。また、ホストは、SD カードに書き込まれるデー
タでシステム・メモリ内のデータ・バッファをロードします。
2. ホストは、cmd レジスタに適切なライト・データ・コマンド(SD/SDIO
WRITE_BLOCK または WRITE_MULTIPLE_BLOCK)を書き込みます。内部 DMA コン
トローラは、ライト・データ転送を実行する必要があるを確認します。
3. ホストが fifoth レジスタの tx_wmark フィールドに必要な送信スレッショルドレ
ベルを設定します。
4. 内部 DMA コントローラ・エンジンは、ディスクリプタをフェッチし、OWN ビッ
トをチェックします。OWN ビットが 0 に設定されている場合、ホストはディスク
リプタを所有しています。この場合、内部の DMA コントローラはサスペンド状
態に入り、Descriptor Unable 割り込みをアサートします。次に、ホストは、ディス
クリプタ OWN ビットを 1 に設定し、pldmnd レジスタに任意の値を書き込むこと
により、DMA コントローラをリリースする必要があります。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒57
5. ホストは dbaddr レジスタにディスクリプタ・ベース・アドレスを書き込む必要
があります。
6. 内部 DMA コントローラは rintsts レジスタでの Command Done(CD)ビットが 1
に設定されるまで待機します(コマンド BIU からエラーなし)。この状態は、転
送を実行することができることを示します。
7. 内部 DMA コントローラ・エンジンは BIU から DMA インタフェース要求を待機し
ます。BIU は、小さなチャンクに各転送を分割します。各チャンクは DMA への内
部要求です。この要求は、送信スレッショルドに基づいて生成されます。
8. 内部 DMA コントローラは、システム・メモリ内のデータ・バッファから送信
データをフェッチして、カードに伝送するための準備として、FIFO バッファに
データを転送します。
9. データが複数のディスクリプタをまたがるときに 、内部 DMA コントローラは次
のディスクリプタをフェッチし、次のディスクリプタを使用して、動作を続けま
す。ディスクリプタ DES0 フィールドの Last Descriptor ビットは、データが複数の
ディスクリプタをまたがるかどうかを示します。
10. データ送信が完了すると、ステータス情報が有効な場合、TI ビットを 1 に設定す
ることにより、idsts レジスタで更新されます。また、OWN ビットは、ディスク
リプタの DES0 フィールドを更新することによって、DMA コントローラで 0 に設
定されます。
内部 DMA コントローラの受信シーケンス
データを受信するために内部の DMA コントローラを使用するには、次のステップを
実行します。
1. ホストは、受信のためのディスクリプタ・フィールド(DES0—DES3)を設定し
ます設定し自身の(DES0[31])を 1 に設定します。ホストは受信用の Descriptor
フィールド(DES0-DES3)を設定し、OWN ビット(DES0[31])を 1 に設定します。
2. ホストは BIU で cmd レジスタに読み出したデータ・コマンドを書き込みます。内
部 DMA コントローラは、リード・データ転送を実行する必要があるを確認しま
す。
3. ホストが fifoth レジスタの rx_wmark フィールドに必要な送信スレッショルドレ
ベルを設定します。
4. 内部 DMA コントローラ・エンジンがディスクリプタをフェッチし、OWN ビット
をチェックします。OWN ビットが 0 に設定されている場合、ホストはディスクリ
プタを所有しています。この場合、内部の DMA コントローラはサスペンド状態
に入り、Descriptor Unable 割り込みをアサートします。次に、ホストは、ディス
クリプタ OWN ビットを 1 に設定し、pldmnd レジスタに任意の値を書き込むこと
により、DMA コントローラを解放する必要があります。
5. ホストは dbaddr レジスタにディスクリプタ・ベース・アドレスを書き込む必要
があります。
6. 内部 DMA コントローラは rintsts レジスタでの Command Done(CD)ビットが 1
に設定されるまで待機します(コマンド BIU からエラーなし)。この状態は、転
送を実行することができることを示します。
7. 内部 DMA コントローラ・エンジンは BIU から DMA インタフェース要求を待機し
ます。BIU は、小さなチャンクに各転送を分割します。各チャンクは DMA への内
部要求です。この要求は、受信スレッショルドに基づいて生成されます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒58
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
8. 内部 DMA コントローラは、FIFO バッファからデータをフェッチし、システム・
メモリにデータを転送します。
9. データが複数のディスクリプタをまたがるとき 、内部 DMA コントローラは次の
ディスクリプタをフェッチし、次のディスクリプタを使用して、動作を続けま
す。ディスクリプタでの Last Descriptor ビットは、データが複数のディスクリプ
タをまたがるかどうかを示します。
10. データ送信が完了すると、ステータス情報が有効な場合、TI ビットを 1 に設定す
ることにより、idsts レジスタで更新されます。また、OWN ビットは、ディスク
リプタの DES0 フィールドを更新することによって、DMA コントローラで 0 に設
定されます。
SDIO カード・デバイス用のコマンド
この項では、一時的にコントローラと SDIO カード・デバイス間の転送を停止するた
めのコマンドについて説明します。
シーケンスの保留および再開
SDIO カードの場合、I/O 機能とコントローラ間のデータ転送は一時的に SUSPEND コ
マンドを使用して停止させることができます。この機能は他の機能との優先度の高
いデータ転送を実行するために必要になることがあります。所望される場合、中断
されたデータ転送が RESUME コマンドを使用して再開することができます。
SUSPEND および RESUME 動作は SDIO カードの CCCR 内(Function 0)の適切なビット
に書き込むことによって実装されています。CCCR からの読み出すために、または
CCCR に書き込むために、コントローラの IO_RW_DIRECT コマンドを使用してくださ
い。
停止
データ転送を一時停止するには、次のステップを実行します。
1. SDIO カードは SUSPEND/RESUME プロトコルをサポートしていることを確認しま
す。これは、カードの 0x08 オフセットに CCCR の SBS ビットを介して行うこと
ができます。
2. 必要な機能番号のデータ転送が処理中であるかどうかをチェックします。現在ア
クティブになっている機能番号は、CCCR の function select ビット(FSX)に反映
されます(すなわち、カードの 0x0D オフセットでビット 3:0)。
1
アドレス 0xC でのビット 0 の bus status ビット(BS)が 1 の場合、FSx ビット
で与えられた唯一のファンクション番号は有効です。
3. 転送を一時停止するには、アドレス 0xC でのビット 2 の bus release ビット(BR)
を 1 に設定します。
4. カードのオフセット 0x0C ので CCCR の BR と BS のビットは 0 に設定されるまで
ポーリングします。現在選択されているファンクションがデータバスを使用する
と、BS ビットは 1 になります。バス・リリースが完了するまで、BR ビットが 1
のままになります。BR と BS のビットが 0 の場合、選択したファンクションから
のデータ転送が一時停止されています。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒59
5. リード・データ転送時には、コントローラはカードからのデータを待機すること
ができます。データ転送がカードから読み出された場合、コントローラは
SUSPEND コマンドが正常に完了した後に通知する必要があります。次に、コント
ローラはデータ・ステート・マシンをリセットし、待機状態を終了します。これ
を達成するために、ctrl レジスタの abort read data ビット(abort_read_data)を
1 に設定します。
6. dto ビットが rintsts レジスタが 1 に設定されるまでポーリングすることにより、
データ処理が完了するまで待機します。
転送する保留バイトの数を決定するために、コントローラの転送 CIU カード・バ
イト・カウント(tcbcnt)レジスタを読み出します。合計転送サイズからこの値
を減算します。適切に転送を再開するには、この番号を使用します。
再開
データ転送を再開するには、次のステップを実行します。
1. カードが転送状態(データ転送ためにバスが余裕であることを確認する)でない
ことをチェックします。
2. カードが切断状態になっている場合、SD/SDIO SELECT/DESELECT_CARD コマンド
を使用して選択します。カード・ステータスは IO_RW_DIRECT または
IO_RW_EXTENDED コマンドに応答して取得することができます。
3. 再開されるファンクションは、データ転送の準備ができていることを確認しま
す。カードのオフセット 0x0F で CCCR に対応する RF<n> フラグを読み出すこと
で、この状態を決定します。RF<n> = 1 の場合、このファンクションは、データ転
送に進行することができます。
1
11–87 ページの「参考資料」で説明したように、RF<n> フラグについて詳
しくは、SDIO Simplified Specification Version 2.00 を参照してください。
4. 転送を再開するには、CCCR での FSX ビットで、ファンクション番号を書き込む
ために IO_RW_DIRECT コマンドを使用します(すなわち、カードのオフセット
0x0D でのビット 3:0)。IO_RW_DIRECT コマンドのためにコマンド引数を形成し、
cmdarg レジスタに書き込みます。ビット値は表 11–18 に記載されています。
表 11‒18. RESUME コマンド用のビット cmdarg 値
ビット
内容
値
31
R/W flag
1
30:28
Function number
CCCR アクセスの場合は 0
27
RAW flag
書き込み後の読み出しは 1
26
Don't care
25:9
Register address
8
Don't care
7:0
Write data
0x0D
再開するファンクション番号
5. blksiz レジスタへのブロック・サイズの値を書き込みます。データは、このブ
ロック・サイズ単位で転送されます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒60
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
6. bytcnt レジスタにバイト・カウント値を書き込みます。転送される残りのバイト
のデータの合計サイズを指定します。それは、データを処理するソフトウェアの
責任です。
転送するバイトが保留の数を決定するために、転送 CIU カード・バイト・カ
ウント・レジスタ(tcbcnt))を読み出します。転送する保留バイトの数を計
算するには、合計転送サイズからこの値を減算します。
7. ロック転送の動作と同様に cmd レジスタを書き込みます。cmd レジスタが書き込
まれている場合、コマンドが送信され、この関数は、データ転送を再開します。
詳細については、11–49 ページの「シングル・ブロック・リードまたはマルチ・
ブロック・リード」および 11–51 ページの「シングル・ブロック・ライトまたは
マルチ・ブロック・ライト」を参照してください。
8. SDIO カード・デバイスの再開データ・フラグ(DF)を読み出します。次のよう
に DF フラグを解釈します。
■
DF=1— この関数は、転送用データがあり、すぐに関数またはメモリが再開さ
れると、データ転送を開始します。
■
DF=0— この関数は、転送用のデータがありません。データ転送が読み出した
場合、コントローラは、データを待機します。データ・タイムアウト期間の
後に、データ・タイムアウト・エラーを発行します。
Read-Wait シーケンス
Read_wait は SDIO カードでのみ使用されます。これは、一時的に機能やメモリのい
ずれかから、データ転送をストールし、ホストが SDIO カード・デバイス内の任意の
関数にコマンドを送信することができます。ホストがいる限り、必要に応じて、こ
の転送を停止させることができます。コントローラはカードにこのストールの転送
を通知する機能を提供します。ストールを通知するために、次のステップを実行し
ます。
1. カードは CCCR のオフセット 0x8 でのビット 2 の SDIO カードの SRW ビットを読
み出すことで read_wait 機能をサポートしているか確認します。
2. このビットが 1 の場合、カード内のすべての関数は read_wait 機能をサポートし
ています。このビットを読み出すためのコマンドを IO_RW_DIRECT SD/SDIO を使
用します。
3. カードが read_wait 信号をサポートしている場合、ctrl レジスタの read wait
ビット(read_wait)を 1 に設定することでアサートします。
4. ctrl レジスタ 0 に read_wait ビットをリセットします。
CE-ATA データ転送コマンド
この項では、CE-ATA のデータ転送コマンドについて説明します。異なる条件で生成
された基本的な設定と割り込みについて詳しくは、11–48 ページの「データ転送コマ
ンド」を参照してください。
リセットとカード・デバイス・ディスカバリの概要
いずれの CE-ATA の動作を開始する前に、ホストは、MMC リセットと初期化ステップ
を実行する必要があります。ホストとデバイスは、カードが MMC TRAN 状態に入る
前に、MMC 転送(MMC TRAN)状態をネゴシエートする必要があります。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒61
f MMC TRAN 状態および MMC のリセットと初期化については、11–87 ページの「参考資
料」に説明されるように、JEDEC 規格番号 84-A441 をご参照ください。
ホストは、MMC TRAN の状態をネゴシエートするために既存の MMC ディスカバリの
手順に従う必要があります。通常の MMC のリセットと初期化ステップを完了する
と、ホストは RW_REG または CMD39 コマンドを使用して初期 ATA のタスク・ファイ
ルの値を照会する必要があります。
デフォルトでは、MMC のブロック・サイズは 512 バイトであり、CE-ATA カード・デ
バイス内の srcControl レジスタ・ビットで示されています。ホストは 1 KB または
4 KB の MMC ブロック・サイズの使用を交渉することができます。カードは MMC に
srcCapabilities レジスタを通してサポート可能な MMC のブロック・サイズを示し、ホ
ストはこれが MMC のブロック・サイズを交渉するためにレジスタを読み出します。
ホスト・コントローラは、カードの srcControl レジスタの 1:0 ビットに MMC のブ
ロック・サイズを書き込むと、交渉は完了です。
ATA タスク・ファイル転送の概要
ATA のタスク・ファイル・レジスタは、MMC レジスタ・スペースで 0x10h を通して
アドレス 0x00h をにマッピングされます。RW_REG コマンドは、ATA コマンドを発行
するために使用され、ATA のタスク・ファイルは、単一の RW_REG MMC コマンド
シーケンスで送信されます。
ホスト・ソフトウェア・スタックは、コントローラ内 cmdarg と cmd のレジスタを設
定する前に FIFO バッファにタスク・ファイル・イメージを作成する必要があります。
ホスト・プロセッサは cmd レジスタ・ビットを設定する前に cmdarg レジスタへのア
ドレスとバイト数を書き込みます。
RW_REG コマンドでは、CE-ATA カード・デバイスからの CCS がありません。
RW_MULTIPLE_REGISTER (RW_REG) コマンドを使用する ATA タス
ク・ファイルの転送
このコマンドは、CE-ATA カード・デバイスとコントローラ間のデータ転送を必要と
します。データ・コマンドを送信するには、コントローラがコマンド引数、合計
データ・サイズ、およびブロック・サイズを必要とします。ソフトウェアは、FIFO
バッファを介してデータを受信または送信します。
ATA のタスク・ファイル転送(読み出しまたは書き込み)を実装するには、次のス
テップを実行します。
1. bytcnt レジスタへのバイト単位のデータ・サイズを書き込みます。コントロー
ラはシングル・ブロック転送を想定しているため、bytcnt は、ブロック・サイズ
と等しくなければなりません。
2. blksiz レジスタへのバイト単位のブロック・サイズを書き込みます。
3. レジスタ・アドレスの先頭で cmdarg レジスタに書き込みます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒62
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
表 11–19 ~表 11–22 に従って、cmdarg、cmd、blksiz、および、bytcnt レジスタを設
定する必要があります。
表 11‒19. ATA タスク・ファイルの転送のための cmdarg レジスタ設定
ビット
値
コメント
31
1ま
たは
0
読み出し動作のために 0 に設定し、また書き込み動作の
ために 1 に設定さします。
30:24
0
予約済み(ビットはホストプロセッサで 0 に設定)
23:18
0
17:16
0
レジスタ・アドレス(DWORD 揃え)
15:8
0
予約済み(ビットはホスト・プロセッサによって 0 に設
定される)
7:2
16
リードまたはライトのバイト数(DWORD の整数)
1:0
0
バイト数(DWORD の整数の単位で)
リードまたはライトのためのレジスタ・アドレスの開始
(DWORD 揃え)
表 11‒20. ATA タスク・ファイルの転送のための cmd レジスタ設定
ビット
値
コメント
start_cmd
1
-
ccs_expected
0
CCS が期待されません。
read_ceata_device
0ま
たは
1
RW_BLK または RW_REG リードの場合は 1 に設定。
update_clk_regs_only
0
クロック・パラメータの更新コマンドがない。
card_num
0
-
send_initialization
0
初期化シーケンスがない。
stop_abort_cmd
0
-
send_auto_stop
0
-
transfer_mode
0
ブロック転送モード。ブロック・サイズとバイト・カ
ウントが読み出しと書き込みバイト数と一致する必要
があります。
read_write
1ま
たは
0
ライトの場合は 1、リードの場合は 0
data_expected
1
データが期待されます。
response_length
0
-
response_expect
1
-
cmd_index
コマ
ン
ド・
イン
デッ
クス
このパラメータはコマンド番号に設定します。例え
ば、SD/SDIO WRITE_BLOCK (CMD24) の場合に 24 に設
定し、WRITE_MULTIPLE_BLOCK (CMD25) の場合に 25
に設定します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒63
表 11‒20. ATA タスク・ファイルの転送のための cmd レジスタ設定
ビット
値
wait_prvdata_complete 1
1
check_response_crc
コメント
■
すぐにコマンドを送信する場合は 0
■
以前の DTO 割り込み後にコマンドを送信する場合は
1
■
応答 CRC をチェックしていない場合は 0
■
応答 CRC をチェックする場合は 1
表 11‒21. ATA タスク・ファイルの転送のための blksiz レジスタ設定
ビット
値
コメント
31:16
0
予約ビットは 0 に設定されます。
15:0 (block_size)
16
タスク全体ファイル(16、8 ビット・レジスタ)にアク
セスするためです。16 バイトのブロック・サイズです。
表 11‒22. ATA タスク・ファイルの転送のための bytcnt レジスタ設定
ビット
31:0
値
16
コメント
タスク全体ファイル(16、8 ビット・レジスタ)にアク
セスするためです。16 のバイト数は、16 に設定されたブ
ロック・サイズと使用されています。
RW_MULTIPLE_BLOCK (RW_BLK) コマンドを使用する ATA ペイロー
ドの転送
このコマンドは、CE-ATA カード・デバイスとコントローラ間のデータ転送を必要と
します。データ・コマンドを送信するには、コントローラがコマンド引数、合計
データ・サイズ、およびブロック・サイズを必要とします。ソフトウェアは、FIFO
バッファを介してデータを受信または送信します。
ATA のペイロード転送(読み出しまたは書き込み)を実装するには、次のステップを
実行します。
1. bytcnt レジスタへのバイト単位のデータ・サイズを書き込みます。
2. blksiz レジスタへのバイト単位のブロック・サイズを書き込みます。コント
ローラは、単一 / 複数のブロック転送を期待しています。
3. データ単位数を示すためにレジスタ cmdarg に書き込みます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒64
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
表 11–23 ~表 11–26 に従って、cmdarg、cmd、blksiz、および、bytcnt レジスタを設
定する必要があります。
表 11‒23. ATA ペーロードの転送のための cmdarg レジスタ設定
ビット
値
コメント
31
1 または 0
読み出し動作のために 1 に設定し、書き込み動作
のために 1 に設定します。
30:24
0
予約済み(ビットはホスト・プロセッサによって
0 に設定される)
23:16
0
予約済み(ビットはホストプロセッサで 0 に設定
される)
15:8
データ・カ
ウント
Data Count Unit [15:8]
7:0
データ・カ
ウント
Data Count Unit [7:0]
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒65
表 11‒24. ATA ペーロードの転送のための cmd レジスタ設定
ビット
値
コメント
1
-
ccs_expected
1
CCS が期待されています。割り込みが(CE-ATA
カード・デバイスでイネーブルされる場合、
RW_BLK コマンドの 1 に設定します nIEN ビッ
トは ATA コントロール・レジスタを 0 に設定さ
れている)。
read_ceata_device
0 または 1
RW_BLK または RW_REG リード・コマンドを 1
に設定します。
update_clk_regs_only
0
クロック・パラメータの更新コマンドがありま
せん。
card_num
0
-
send_initialization
0
stop_abort_cmd
0
-
send_auto_stop
0
-
transfer_mode
0
ブロック転送モードです。バイト・カウントは
4kB の整数倍でなければなりません。ブロッ
ク・サイズは、512、1K または 4k バイトです。
read_write
1 または 0
書き込みの場合は 1、読み出しの場合は 0 です。
data_expected
1
データが期待されています。
response_length
0
-
response_expect
1
-
cmd_index
コマンド・
インデック
ス
start_cmd
wait_prvdata_complete 1
check_response_crc
1
初期化シーケンスがありません。
このパラメータはコマンド番号に設定します。
例えば、SD/SDIO WRITE_BLOCK (CMD24) の場合
に 24 に設定し、WRITE_MULTIPLE_BLOCK
(CMD25) の場合に 25 に設定します。
■
すぐにコマンドを送信する場合は 0
■
以前の DTO 割り込み後にコマンドを送信する
場合は 1
■
応答 CRC をチェックしていない場合は 0
■
応答 CRC をチェックする場合は 1
表 11‒25. ATA ペーロードの転送のための blksiz レジスタ設定
ビット
2012 年 11 月
値
コメント
31:16
0
15:0 (block_size)
MMC のブロック・サイズは、ホストによって交渉
512、1024、ま
されるように、512、1024、または 4096 バイトで
たは 4096
す。
Altera Corporation
予約ビットは 0 に設定します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒66
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
表 11‒26. ATA ペーロードの転送のための bytcnt レジスタ設定
ビット
31:0
値
コメント
<n>*block_size
バイト数は、ブロックサイズの整数倍でなけれ
ばなりません。ATA メディアアクセスコマンドで
は、バイト・カウントは 4 キロバイトの倍数で
なければなりません。
(<N>* ブロックサイズ =<X>* 4 KB、<N> と <x> は
整数)
CE-ATA CCS
この項では、CCS のディセーブル、CCS のタイムアウト後のリカバリ、および I/O
リード・トランスミッション遅延 (NACIO) のタイムアウトを説明しています。
CCS のディセーブル
未処理の RW_BLK コマンドの CCS を待っている間に、ホストは CCSD のコマンドを
送信することにより、CCS をディセーブルすることができます。
■
CCSD コマンドを送信 —send_ccsd ビットがコントローラの ctrl レジスタの 1 に設
定されている場合、コントローラは、CE-ATA カード・デバイスに CCSD のコマン
ドを送信します。このビットは、応答が RW_BLK コマンドに対して受信された後
でのみ設定することができます。
■
内部 STOP コマンドを送信 —CCSD パターンを送信した後、内部で生成された
SD/SDIO STOP_TRANSMISSION(CMD12)コマンドを送信します。コントローラは
CCSD パターンを送信するように設定されているときに ctrl レジスタの
send_auto_stop_ccsd ビットが 1 に設定されている場合、コントローラは、CMD ピ
ンに内部で生成される STOP コマンドを送信します。STOP コマンドを送信した
後、コントローラは rintsts レジスタの acd ビットを 1 に設定します。
CCS のタイムアウト後のリカバリ
CCS を待っている間にタイムアウトが発生した場合、ホストは保留中の ATA コマン
ドを中止するために CCSD のコマンド、そして STOP コマンドを送信する必要があり
ます。ホストは CCSD パターンを送信した後、内部で生成される STOP コマンドを送
信するようにコントローラを設定することができます。
■
CCSD のコマンドを送信 —ctrl レジスタの send_ccsd ビットを 1 に設定します。
■
外部 STOP コマンドを送信 —CE-ATA カード・デバイスとコントローラ間のデータ転
送を終了します。STOP コマンドを送信する方法の詳細については、11–54 ページ
の「停止および中止コマンドの送信」を参照してください。
■
内部 STOP コマンドを送信 — 内部で生成される STOP コマンドを送信することをコ
ントローラに指示する ctrl レジスタの send_auto_stop_ccsd ビットを 1 に設定
します。STOP コマンドを送信した後、コントローラは rintsts レジスタの acd
ビットを 1 に設定します。send_auto_stop_ccsd ビットが send_ccsd ビットを設
定すると同時に 1 に設定する必要があります。
I/O リード・トランスミッション遅延(NACIO)タイムアウト後のリカバリ
I/O は、CE-ATA カード・デバイスにリード・トランスミッション遅延(NACIO)タイム
アウトが発生した場合、タイムアウトからリカバリするには、次のいずれかのス
テップを実行します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒67
■
CCS は、CE-ATA カード・デバイス(cmd レジスタの ccs_expected ビットが 1 に設定
されていること)から期待されている場合、11–66 ページの「CCS のタイムアウ
ト後のリカバリ」でのステップに従ってください。
■
CCS は、CE-ATA カード・デバイスから期待されていない場合、次のステップを実
行します。
a. 外部 STOP コマンドを送信します。
b. コントローラおよび CE-ATA カード・デバイス間のデータ転送を終了します。
減少した ATA コマンド・セット
CE-ATA カード・デバイスは、縮小した ATA コマンドのサブセットをサポートするこ
とが必要です。
IDENTIFY DEVICE コマンド
IDENTIFY DEVICE コマンドは、デバイス固有の情報と機能について説明するホストに
512 バイトのデータ構造体を返します。MMC のブロック・サイズが 512 バイトに設
定されている場合にのみ、ホストは IDENTIFY DEVICE コマンドを発行します。他の
MMC のブロック・サイズは不定結果を持っています。
ホストは ATA コマンドの RW_REG コマンドを発行し、データは RW_BLK コマンドを
使用して取得されます。
ホスト・コントローラは、IDENTIFY DEVICE の ATA コマンドの RW_REG コマンドの送
信中に次の設定を使用しています。
■
cmd レジスタ設定 : data_expected ビットは 0 に設定
■
cmdarg レジスタ設定 :
■
■
■
ビット [31] は 0 に設定
■
ビット [7:2] は 128 に設定
■
すべてのほかのビットは 0 に設定
タスク・ファイル設定
■
ATA タスク・ファイルのコマンド・フィールドは 0xEC に設定
■
タスク・ファイルの予約したフィールドは 0 に設定
blksiz レジスタの bytcnt レジスタおよび block_size フィールド : 16 に設定
ホスト・コントローラは、データ検索(RW_BLK コマンド)のために以下の設定を使
用しています。
■
■
2012 年 11 月
cmd レジスタ設定 :
■
ccs_expected は 1 に設定
■
data_expected は 1 に設定
cmdarg レジスタ設定 :
■
ビット [31] が 0(リード動作)に設定
■
ビット [15:0]1(データ・ユニット数 =1)に設定
■
他のすべてのビットを 0 に設定
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒68
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
■
blksiz レジスタの bytcnt レジスタおよび block_size フィールド : 512 に設定
READ DMA EXT コマンド
READ DMA EXT コマンドは、Data-In のデータ転送プロトコルを使用してカード・デバ
イスからのデータのロジカル・ブロック数を読み出します。ホストは、データ転送の
ために ATA コマンドと RW_BLK コマンドを発行する RW_REG コマンドを使用してい
ます。
WRITE DMA EXT コマンド
WRITE DMA EXT コマンドは、Data-Out データ転送プロトコルを使用して、カード・デ
バイスへのデータのロジカル・ブロック数を書き込みます。ホストは、データ転送の
ために ATA コマンドと RW_BLK コマンドを発行する RW_REG コマンドを使用してい
ます。
STANDBY IMMEDIATE コマンド
この ATA コマンドは直ちに依然として内部デバイスコンテキストを保持する最も積
極的な電力管理モードに入るようにカード・デバイスを引き起こします。このコマ
ンドにはデータ転送(RW_BLK)が期待されていません。
省電力モードを提供していないカード・デバイスの場合、STANDBY IMMEDIATE コマ
ンドが成功したステータスを示す値を返します。ホストは ATA コマンドのための
RW_REG コマンドを発行し、ステータスは、SD/SDIO CMD39 または RW_REG コマン
ドで取得されます。ATA タスク・ファイルドのステータス・フィールドにのみ成功の
ステータスが含まれ、エラー・ステータスが存在しません。
STANDBY IMMEDIATE ATA コマンドの RW_REG コマンドの送信中にホスト・コント
ローラは、次の設定を使用します。
■
cmd レジスタの設定 : data_expected ビットは 0 に設定
■
cmdarg レジスタの設定 :
■
■
■
ビット [31] は 0 に設定
■
ビット [7:2] は 4 に設定
■
0 他のすべてのビットは 0 に設定
タスク・ファイルドの設定 :
■
ATA タスク・ファイルドのコマンド・フィールドは 0xEA に設定
■
タスク・ファイルドの予約したフィールドは 0 に設定
blksiz レジスタの bytcnt レジスタおよび block_size ファイルド :16 に設定
FLUSH CACHE EXT コマンド
書き込まれたデータをバッファとキャッシュするカード・デバイスの場合、FLUSH
CACHE EXT コマンドは、バッファされたデータがカード・メディアに書き込まれる
ことが保証されます。書き込まれたデータをバッファリングしていないカードの場
合、FLUSH CACHE EXT コマンドが成功ステータスを返します。この ATA コマンドには
データ転送(RW_BLK)が期待されていません。
ホストは ATA コマンドの RW_REG コマンドを発行し、ステータスは、SD/SDIO
CMD39 または RW_REG コマンドで取得されます。ATA タスク・ファイルのステータ
ス・フィールド以外のフィールドが有効である場合、この ATA コマンドのエラー状
態が存在する場合があります。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒69
ホスト・コントローラは、STANDBY IMMEDIATE ATA コマンドの RW_REG コマンドの
送信中に次の設定を使用します。
■
cmd レジスタの設定 : data_expected ビットは 0 に設定
■
cmdarg レジスタの設定 :
■
■
■
ビット [31] は 0 に設定
■
ビット [7:2] は 4 に設定
■
0 他のすべてのビットは 0 に設定
タスク・ファイルドの設定 :
■
ATA タスク・ファイルドのコマンド・フィールドは 0xEA に設定
■
タスク・ファイルドの予約したフィールドは 0 に設定
blksiz レジスタの bytcnt レジスタおよび block_size ファイルド :16 に設定
カード・リード・スレッショルド
アプリケーションがシングルまたはマルチのブロック・リード・コマンドを実行す
る必要がある場合、アプリケーションは、card read threshold フィールド
(cardrdthreshold)で適切なカード・リード・スレッショルド・サイズで
cardthrctl を設定し、cardrdthren ビットを 1 に設定する必要があります。コントロー
ラで指定されたこの追加情報は、RX FIFO バッファに使用できるカード・コントロー
ラがリード・スレッショルドに等しいスペースがある場合のみ、リード・コマンド
を送信することを保証します。これにより、カード・クロックはデータのブロック
がカードから送信される間で停止されていないことを保証します。カード・コント
ローラがカード・クロックをイネーブルする前に、最小の RX FIFO バッファ内の一つ
のブロック・サイズのスペースがあることを保証するには、転送のブロック・サイ
ズにカード・リード・スレッショルドを設定します。
リード・カード・スレッショルドは、ラウンド・トリップ遅延が
sdmmc_clk_divided の半分より大きいときに必要とされます。
カード・リード・スレッショルドのための推奨される使用方法のガイ
ドライン
1. データ・リード・コマンドのための cmd レジスタを設定する前に、cardthrctl レ
ジスタを設定する必要があります。
2. データ転送コマンドが進行している間、cardthrctl レジスタを設定することはで
きません。
3. cardthrctl レジスタの cardrdthreshold フィールドはシングルまたはマルチ・
ブロック転送の少なくともブロック・サイズに設定する必要があります。リード
転送のブロック・サイズより大きい、またはリード転送のブロック・サイズと等
しい cardrdthreshold フィールドの設定は、カード・クロックがデータのブロッ
クの途中で停止しないことを保証します。
4. ラウンド・トリップ遅延がカード・クロック周期の半分より大きい場合、データ
のブロックの途中で停止しないことを保証するために、カード・リード・スレッ
ショルドをイネーブルし、カード・スレッショルドがガイドライン 3 に従って設
定する必要があります。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒70
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
5. cardrdthreshold フィールドが転送ブロック・サイズ未満に設定されている場
合、ホストはリード転送中に受信 FIFO バッファがオーバーフローしないことを確
認する必要があります。オーバーフローは停止するコントローラからカード・ク
ロックを引き起こす可能性があります。コントローラは、カード・クロックが
リード転送中に停止しないことを保証することができません。
1
cardthrctl レジスタの cardrdthreshold フィールド、および fifoth レジスタの
rx_wmarkと dw_dma_multiple_transaction_size フィールドが正しく設定されていな
い場合、カード・クロックはコントローラによって生成された割り込みなしで無期
限に停止します。
カード・リード・スレッショルドのプログラミング・シーケンス
SDHC や SDXC などのほとんどのカードは、カードで指定されるブロック・サイズ、
または 512 バイトに固定されるブロック・サイズをサポートしています。部分ブロッ
ク・リード(カード・デバイスの CSD レジスタに READ_BL_PARTIAL を 1 に設定す
る)をサポートする SDIO、MMC、および標準的なキャパシティ SD カードについて
は、ブロック・サイズは可変であり、アプリケーションによって選択することがで
きます。
カード・リード・スレッショルド機能を効果的に使用するには、またカード・ク
ロックがカードから読み出されるデータのブロックの途中で FIFO Full 状態の停止し
ないことを保証するために、次のステップに従います。
1. 4 バイトの倍数であるブロック・サイズを選択します。
2. カード・リード・スレッショルド機能をイネーブルします。所与の転送のための
ブロック・サイズより小さい場合、または FIFO バッファの全深さに等しい場合に
のみ、カード・リード・スレッショルドドをイネーブルすることができます。
( ブロック・サイズ / 4) ≤ 1024
3. カード・リード・スレッショルドを選択します。
■
( ブロック・サイズ / 4) ≥ 512 の場合、バイトで cardrdthreshold ≤ ( ブロック・
サイズ / 4) の cardrdthreshold を選択します。
■
( ブロック・サイズ / 4) < 512 の場合、バイトで cardrdthreshold ≤ ( ブロック・
サイズ / 4) の cardrdthreshold を選択します。
4. DMA トランザクションを構成する転送数に fifoth レジスタでの
dw_dma_multiple_transaction_size フィールドを設定します。例えば、サイズ
=1 とは 4 バイトが移動されることを意味します。指定できるサイズは、1、4、8、
16、32、64、128、および 256 の転送です。値(ブロック・サイズ /4)が均等に
分割されるように、サイズを選択します。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒71
5. – 1 サイズに fifoth レジスタの rx_wmark フィールドを設定します。
例えば、ブロック・サイズが 512 バイトである場合、
dw_dma_multiple_transaction_sizeと rx_wmarkの正当な値は、表 11–27 に記載さ
れています。
表 11‒27. ブロック・サイズ = 512 のための dw_dma_multiple_transaction_size および rx_wmark の正確の
値
ブロック・サイズ
dw_dma_multiple_transaction_s
ize
rx_wmark
512
1
0
512
4
3
512
8
7
512
16
15
512
32
31
512
64
63
512
128
127
カード・リード・スレッショルドのプログラミング例
この項では、カード・リード・スレッショルドをプログラムする方法の例を示して
います。
■
4 の倍数(FIFO 位置あたりのバイト数)、および 4096 より小さい(1024 FIFO 位置)
ブロック・サイズを選択してください。例えば、3072 バイトのブロック・サイズ
は、3072/4 = 768 FIFO の位置ですので、合法です。
■
DMA モードの場合、ブロック・サイズがサイズの倍数になるように、サイズを選
択します。例えば、サイズ = 128、ブロック・サイズ = 0。
■
rx_wmark フィールド = サイズ – 1 を設定します。例えば、rx_wmark フィールド =
128 から 1 = 127。
■
ブロック・サイズ > ½ FifoDepth のため、ブロック・サイズに cardrdthreshold
フィールドを設定します。例えば、cardrdthreshold フィールド = 3072 バイト。
図 11‒12. カード・リード・スレッショルドが 768 に設定されている FIFO バッファの内容
SIZE = 128
FIFO Locations
Read Data
to Host
256 FIFO Locations
Unfilled During One
Block Read
Data Read
from Card
Block Size = cardrdthreshold = 768
One Block of Data Filled 768 FIFO Locations
FIFO Depth = 1,024
rx_wmark = 127
FIFO Locations
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒72
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
割り込みとエラー処理
この項では、エラーを処理する割り込みを使用する方法について説明します。パ
ワーオンまたはリセットでは、割り込みが(ctrl レジスタの int_enable ビットが 0
に設定されている)ディセーブルされ、そしてすべての割り込みが(intmas レジス
タ・デフォルトは 0)マスクされます。コントローラのエラー処理は、エラーは、次
の種類が含まれています。
■
応答およびデータ・タイムアウト・エラー — 応答タイムアウトの場合、ホスト・
ソフトウェアは、コマンドを再試行できます。データ・タイムアウトの場合、コ
ントローラはカードからのデータ・スタート・ビットを受信していないため、ソ
フトウェアは再び全体のデータ転送を再試行するか、または指定されたブロック
以降から再試行できます。次に tcbcnt レジスタの内容を読み出すことによって、
ソフトウェアはにコピーされずに残っているバイト数(リード)を決定すること
ができます。
■
応答エラー — エラーは応答受信中に受信したとき 1 に設定されます。受信した応
答が無効な場合、ソフトウェアは、コマンドを再試行することができます。
■
データ・エラー — データ受信エラーが発生したときに 1 に設定します。データ受
信エラーの例としては以下に表示されます。
■
データ CRC
■
スタート・ビットが見つかりません
■
エンド・ビットが見つかりません
これらのエラーは、任意のブロックで発生することができます。エラーを受信す
ると、ソフトウェアは、SD/SDIO STOP または SEND_IF_COND コマンドを発行する
こと、また全体のデータまたは一部のデータのいずれかのためにコマンドを再試
行することができます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒73
■
ハードウェア・ロック・エラー — コントローラがソフトウェアによって発行され
たコマンドをロードできない場合、1 に設定します。ソフトウェアは、cmd レジ
スタの start_cmd ビットを 1 に設定すると、コントローラはコマンドをロードし
ようとします。コマンド・バッファがすでにコマンドが含まれている場合、この
エラーが発生し、新しいコマンドが破棄され、ソフトウェアがコマンドをリロー
ドする必要があります。
■
FIFO バッファのアンダーラン / オーバーラン・エラー —FIFO バッファがフルであ
り、ソフトウェアが FIFO バッファにデータを書き込もうとする場合、オーバーラ
ン・エラーが設定されています。逆に、FIFO バッファが空である場合、ソフト
ウェアが FIFO バッファからデータを読み出そうとする場合、アンダーラ・ンエ
ラーが設定されています。FIFO バッファ内のデータを読み込みまたは書き込みす
る前に、ソフトウェアは、status レジスタ内の FIFO buffer empty ビット
(fifo_empty)または FIFO buffer full ビット(fifo_full)を読み出す必要があり
ます。
■
ホスト・タイムアウトによるデータ飢餓 — ソフトウェアがコントローラに追いつ
くのに十分な FIFO バッファが高速なサービスがない場合、この状態が発生しま
す。この状態で、また読み出し転送が進行中の場合、ソフトウェアは、次のデー
タ受信のためにスペースを生成する FIFO バッファからのデータを読み出す必要が
あります。送信動作が進行中である場合、ソフトウェアは、コントローラがカー
ドにデータを書き込むことができるように、FIFO バッファを埋めるためにデータ
を書き込む必要があります。
■
CE-ATA エラー
■
コマンドでの CRC エラー CRC エラーがコマンドを検出した場合、CE-ATA カー
ド・デバイスは、応答を送信しなく、応答タイムアウトがコントローラから
期待されています。ATA 層は、MMC トランスポート層のエラーが発生したこ
とを通知されます。
■
ライト動作 — カード・デバイスに通知される任意の MMC 輸送層エラーは、す
る卓越した ATA コマンドを終了させる可能性があります。ERR ビットは ATA
のステータス・レジスタに設定され、適切なエラー・コードは ATA カード・
デバイスに Error Register(エラー)に送信されます。
CE-ATA カード(ATA コントロール・レジスタの nIEN ビット)のデバイス割り
込みビットが 0 に設定されている場合、CCS がホストに送信されます。
デバイス割り込みビットが 1 に設定されている場合、ホスト・コントローラ
が継続の転送を中止しない場合、カード・デバイスは、全体のデータ・ユ
ニット・カウントを完了します。
1
■
2012 年 11 月
ネガティブ CRC 状態がカード・デバイスから受信された場合、マルチ・ブ
ロックのデータ転送中に、データ・パスは rintsts レジスタの dcrc ビッ
トを 1 に設定することにより、BIU へのデータの CRC エラーを通知しま
す。データ送信は、すべてのバイトが送信されるまで継続されます。
リード動作 —MMC トランスポート層のエラーがホスト・コントローラが検出
された場合、ホストがエラー状態で ATA コマンドを完了します。ホスト・コ
ントローラはリード転送を中止には、CCSD コマンド、そして
STOP_TRANSMISSION(CMD12)コマンドを発行できます。ホストは、データ
転送を中断しなくても全体のデータ・ユニット数バイトを転送することがで
きます。
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒74
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
eMMC および MMC のブート動作
この項では、eMMC のと MMC ブート動作のためのコントローラを設定する方法につ
いて説明します。
CMD ラインを押し続けることによるブート動作
コントローラは、CMD ラインを押しながら MMC4.3、MMC4.4 からブートし、
MMC4.41 カードができます。
f このブート方法の詳細については、11–87 ページの「参考資料」で参照として、以下
の仕様を参照してください。
■
JEDEC Standard No. 84-A441
■
JEDEC Standard No. 84-A44
■
JEDEC Standard No. JESD84-A43
MMC カード・デバイスのブート動作
図 11–13 には、eMMC のカード・デバイスのブート動作を実行するステップを示し
ます。詳細なステップは、フロー・チャートに記述されています。
図 11‒13. eMMC ブート動作のフロー
Start
Step 1
Step 2 to Step 10
expect_boot_ack = 1
expect_boot_ack = 0
Step 11
No Start
Pattern
Step 11.a
Step 12
Start Pattern & No Start Pattern &
Boot Data Received Boot Data Received
Step 11.b
Step 11.c
Successfully
Received Boot
Data
No Boot Data
Received
Step 12.a
Boot Data
Received
Step 12.b
NAC Timeout
Step 11.f
Successfully
Received Boot
Data
Stop
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒75
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)に設定することができます。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒76
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
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 ビットは設定しません。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒77
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 コントローラ・モードでは:
■
2012 年 11 月
Altera Corporation
ソフトウェア・ドライバは、受信したブート・データが必要とする以上の
ディスクリプタを作成した場合、余分なディスクリプタは、コントローラ
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒78
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
によって閉じられません。それらが閉じられるまでソフトウェアがディス
クリプタを再利用することはできません。
■
ソフトウェア・ドライバは、受信したブート・データが必要とするより少
ないディスクリプタを作成する場合、コントローラは Descriptor Unavailable
割り込みを発生し、システム・メモリへのデータを転送しません。
f. NAC がデータ・ブロック転送間に違反している場合、DRTO 割り込みがアサー
トされます。開始ビットまたは終了ビットに関連付けられたエラーがある場
合に加えて、SBE または EBE 割り込みも生成されます。
eMMC のカード・デバイスのブート動作が完了です。残りのステップ(12)を実
行しないでください。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒79
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 のカード・デバイスのブート動動作が完了です。
リムーバブル MMC4.3、MMC4.4 と MMC4.41 カードのブートの動作
リムーバブル MMC4.3、MMC4.4、および MMC4.41 カードは、これらのカードが差し
込むときにブート・モードの動作をサポートすることを認識していないという点で
eMMC に関して異なります。したがって、コントローラは以下を実行する必要があ
ります。
1. 最初の MMC4.0/4.1/4.2 カードを発見するように、これらのカードを発見します。
2. カードの特性を理解します。
3. ブート動作を実行するかどうかを決定します。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒80
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
これらのカードの場合、ソフトウェア・ドライバは、次のステップを実行する必要
があります。
1.
11–41 ページの「列挙されたカード・スタック」に記載されているように、カー
ドを発見します。
2. カードの EXT_CSD レジスタを読み込み、次のフィールドを調べます。
■
BOOT_PARTITION_ENABLE
■
BOOT_SIZE_MULT
■
BOOT_INFO
3. 必要に応じて、ソフトウェアがカード内のブート情報を動作することができま
す。
f 詳細については、11–87 ページの「参考資料」に参照されるように以下の仕
様の「パーティションのブートへのアクセス」を参照してください。
■
JEDEC Standard No. 84-A441
■
JEDEC Standard No. 84-A44
■
JEDEC Standard No. JESD84-A43
4. ホスト・プロセッサが次のパワー・アップのサイクルでブート動作を実行する必
要がある場合、SWITCH_FUNC コマンドを使用して EXT_CSD レジスタの内容を動
作することができます。
5. このステップの後、ソフトウェア・ドライバは pwren レジスタに書き込むことに
よって、カードの電源を切る必要があります。
6. ここから、11–81 ページの「eMMC のカード・デバイスのための代替ブート動作」
に記載されているように、同じステップを使用します。
代替ブート動作
代替ブート動作は、そのソフトウェアがカードを起動するのではなく、カードの
CMD ラインを押しする SD/SDIO GO_IDLE_STATE コマンドを使用して、前のブート動
作とは異なります。代替ブート動作は、BOOT_INFO レジスタのビット 0 が 1 に設定
されている場合にのみ実行できます。BOOT_INFO は EXT_CSD レジスタ内のオフセッ
ト 228 に位置しています。
f 代替ブート動作の詳細については、11–87 ページの「参考資料」で参照されるように、
以下の仕様を参照してください
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒81
■
JEDEC Standard No. 84-A441
■
JEDEC Standard No. 84-A44
■
JEDEC Standard No. JESD84-A43
eMMC のカード・デバイスのための代替ブート動作
図 11–14 に、eMMC カード・デバイスの代替のブート動作を実行するために必要な
ステップのシーケンスを示します。詳細なステップは、フローチャートに記述され
ています。
図 11‒14. eMMC の代替ブート動作のフロー
Start
Step 1
Step 2 to Step 12
expect_boot_ack = 1
expect_boot_ack = 0
Step 13
No Start
Pattern
Step 15
Start Pattern & No Start Pattern &
Boot Data Received Boot Data Received
Step 14.a
Step 14.b
Step 14.e
Successfully
Received Boot
Data (14.d)
No Boot Data
Received
Step 16.a
Boot Data
Received
Step 16.b
NAC Timeout
Step 14.h
Successfully
Received Boot
Data (16.d)
Stop
1. ソフトウェア・ドライバは、次のことを確認します。
■
eMMC のカード・デバイスが代替ブート動作(BOOT_INFO ビットは eMMC の
カードに 1 に設定されている)をサポートしていること。
■
カード・デバイスでの BOOT_SIZE_MULT と BOOT_BUS_WIDTH 値は、ブート・プ
ロセス中に使用すること。
2. ソフトウェアには、次のビットを設定します。
2012 年 11 月
■
intmask レジスタで適切なビットを 0 にリセットすることによって、割り込み
のマスクを設定します。
■
ctrlレジスタの int_enableビットを 1 に設定します。ctrlレジスタの他のビッ
トは 0 に設定しなければなりません。
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒82
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
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 パターンがカード・デバイスから期待されていない場合
(expect_boot_ack を 0 に設定される場合)、ステップ 15 にジャンプします。
13. Command Done 割り込みを待ちます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒83
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. カードから正常にブート・データ転送の終了時に、以下の割り込みが生成さ
れます。
■
2012 年 11 月
Altera Corporation
rintsts レジスタでの cmd ビットと dto ビット
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒84
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
■
内部 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 割り込みを待ちます。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラのプログラミング・モード
11‒85
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 のカード・デバイスのための代替ブート動作が完了します。
MMC4.3 カードの代替ブート動作
リムーバブル MMC4.3 カードは、これらのカードが動作のブーツ・モードをサポー
トしているかどうかを認識していないという点で、eMMC のに関して異なります。
2012 年 11 月
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒86
第 11 章 : SD/MMC コントローラ
SD/MMC コントローラ・アドレス・マップとレジスタ定義
1. 初めての MMC4.0/4.1/4.2 カードを発見するように、これらのカードを発見しま
す。
2. カードの特性を理解します。
3. ブート動作を実行するかどうかを決定します。
これらのカードについては、ソフトウェア・ドライバは、次のステップを実行する
必要があります。
1.
11–41 ページの「列挙されたカード・スタック」に記載されているように、カー
ドを発見します。
2. MMC カード・デバイスの EXT_CSD レジスタを読み出し、次のフィールドを調べ
ます。
■
BOOT_PARTITION_ENABLE
■
BOOT_SIZE_MULT
■
BOOT_INFO
f 詳細については、11–87 ページの「参考資料」で参照されるように、JEDEC
Standard No. JESD84-A43 での「ブート・パーティションへのアクセス」を
参照してください。
3. ホスト・プロセッサは、次のパワー・アップ・サイクルでブート動作を実行する
必要がある場合、SWITCH_FUNC コマンドを使用して、MMC カード・デバイスで
EXT_CSD レジスタの内容を動作することができます。
4. このステップの後、ソフトウェア・ドライバは pwren レジスタに書き込むことに
よって、カードの電源を切る必要があります。
5. ここからは、11–81 ページの「eMMC のカード・デバイスのための代替ブート動
作」と同じステップを使用します。
1
それが中止シナリオ中に生成されている場合は EBE を無視します。
Boot acknowledge エラーを発生する場合、ブーツ・アクノリッジは割り込
みタイムアウトを受信します。
1
内部 DMA コントローラ・モードにおいて、アプリケーションは data done 割
り込みの代わりにディスクリプタ・クローズ割り込みに依存する必要があ
ります。
SD/MMC コントローラ・アドレス・マップとレジスタ定義
f アドレス・マップとレジスタの定義は、このハンドブック・ボリウムを伴う
hps.html ファイルに存在します。ファイルを開くためのリンクをクリックしてくだ
さい。
モジュールの説明とベース・アドレスを表示するために、次のリンクをスクロール
しクリックします。
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
2012 年 11 月
Altera Corporation
第 11 章 : SD/MMC コントローラ
参考資料
■
11‒87
sdmmc
その後、レジスタおよびフィールド説明を表示するまでスクロールしてレジスタ名
をクリックします。レジスタ・アドレスは、各モジュール・インスタンスのベース・
アドレスへの相対的なオフセットです。
f すべてのモジュールのベース・アドレスは Cyclone V デバイス・ハンドブック Vol 3 の
「Introduction to the Hard Processor System」の章に記載されています。
参考資料
f 次の業界仕様は、SD/MMC コントローラによって実装される規格やプロトコルに関す
る詳細な情報を提供します。
以下の仕様は、JEDEC のウェブサイト(www.jedec.org)で入手できます。
■
JEDEC Standard No. 84-A441—Embedded MultiMediaCard (e•MMC) e•MMC/Card Product
Standard, High Capacity, including Reliable Write, Boot, Sleep Modes, Dual Data Rate,
Multiple Partitions Supports, Security Enhancement, Background Operation and High
Priority Interrupt (MMCA, 4.41)
■
JEDEC Standard No. 84-A44—Embedded MultiMediaCard (e•MMC) e•MMC/Card Product
Standard, High Capacity, including Reliable Write, Boot, Sleep Modes, Dual Data Rate,
Multiple Partitions Supports and Security Enhancement (MMCA, 4.4)
■
JEDEC Standard No. JESD84-A43—Embedded MultiMediaCard (eMMC) eMMC/Card
Product Standard, High Capacity, including Reliable Write, Boot, and Sleep Modes (MMCA,
4.3)
以下の仕様は、JEDEC のウェブサイト((www.sdcard.org)で入手できます。
■
Physical Layer Simplified Specification, Version 3.01—SD Specifications Part 1 Physical
Layer Simplified Specification Version 3.01
■
SDIO Simplified Specification Version 2.00—SD Specifications Part E1 SDIO Simplified
Specification Version 2.00
改訂履歴
表 11–28 に、本資料の改訂履歴を示します。
表 11‒28. 改訂履歴
バー
ジョン
日付
2012 年 11 月
2012 年 1 月
2012 年 11 月
1.1
1.0
変更内容
■
プログラミング・モデルの章を追加。
■
プログラミング情報を再編。
■
ECC に関する情報を追加。
■
ピンのリストを追加。
■
クロックの章を更新。
初版。
Altera Corporation
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
11‒88
Cyclone V デバイス・ハンドブック
Volume 3: ハード・プロセッサ・システムのテクニカル・リファランす・マニュアル
第 11 章 : SD/MMC コントローラ
改訂履歴
2012 年 11 月
Altera Corporation