SDカード紹介

下からの時間厳守の原子FPGA開発ガイド、良かったと思ったので引っ越しました。

1.SDカードの紹介

SDカードの完全な英語名はセキュアデジタルカード、つまりセキュアデジタルカード(セキュアデジタルカードとも呼ばれます)であり、MMC(マルチメディアカード)に基づいて開発され、2つの主要な機能があります:より高いセキュリティとより高速な読み取りと書き込み速度。SDカードとMMCカードの長さと幅はどちらも32mmx 24mmです。違いは、SDカードの厚さが2.1mmであるのに対し、MMCカードの厚さは1.4mmです。SDカードは大容量に対応するMMCカード。一方、SDカードはMMCカードよりも接点ピンが多く、側面に書き込み禁止スイッチが付いています。SDカードとMMCカードは上位互換性を維持します。つまり、MMCカードには新しいSDデバイスからアクセスでき、互換性はアプリケーションソフトウェアによって異なりますが、SDカードにはMMCデバイスからアクセスできません。SDカードとMMCカードはカードのラベルで区別できます。下の写真では、写真の左側に「MultiMediaCard」の文字が付いているものがMMCカードで、「SD」の文字が付いているものが写真の右側はSDカードです。

ここに画像の説明を挿入します
上の右の写真のSDカードは実際にはSDHCカードです。SDカードは、ストレージ容量の観点から、SDカード、SDHCカード(セキュアデジタル大容量、大容量セキュアデジタルカード)、SDXCカード(SDXCカード)の3つのレベルに分けられます。 SD拡張容量、容量が拡張された安全なメモリカード)。SDカードはMMCカードをベースに開発され、FAT12 / FAT16ファイルシステムを使用し、SDカードはSD1.0プロトコル仕様を採用しており、SDカードの最大ストレージ容量は2GB、SDHCカードは大容量ストレージSDカードです。 、SDHCカードはFAT32ファイルシステムを使用し、SD2.0プロトコル仕様を採用しています。SDHCカードのストレージ容量は2GBから32GBの範囲です。SDXCカードは新たに提案された規格であり、SDカードで使用されるFATファイルシステムとは異なります。 SDHCカードSDXCカードは、exFATファイルシステム、つまり拡張FATファイルシステムを使用します。SDXCカードはSD3.0プロトコル仕様を採用しており、SDXCカードのストレージ容量は32GBから2TB(2048GB)の範囲であり、一般的にミッドエンドからハイエンドの一眼レフカメラや高解像度ビデオカメラに使用されます。

プロトコル仕様が異なるSDカードは、速度レベルが異なります。SD1.0プロトコル仕様(現在はあまり使用されていません)では、「X」はさまざまな速度レベルを示すために使用されます。SD2.0プロトコル仕様では、SpeedClassはさまざまな速度レベルを示すために使用されます。SD3.0プロトコル仕様はUHSを使用します(超高速)は、さまざまな速度レベルを意味します。SD2.0仕様では、SDカードの速度グレードは通常のカード(Class2、Class4、Class6)と高速カード(Class10)に分けられ、SD3.0仕様ではSDカードの速度グレードがUHS速度グレードに分けられます。 1と3。さまざまなレベルの読み取りおよび書き込み速度とアプリケーションを次の図に示します。
ここに画像の説明を挿入します
SDカードには合計9つのピンラインがあり、SDIOモードまたはSPIモードで動作します。SDIOモードでは、CLK、CMD、DAT [3:0] 6信号ラインに共有されます。SPIモードでは、CS(SDIO_DAT [3])、CLK(SDIO_CLK)、MISO(SDIO_DAT [0])、MOSI(SDIO_CMD)に共有されます。 )4本の信号線。SDカードインターフェイスの定義と各ピン機能の説明を図39.1.3に示します。

ここに画像の説明を挿入します
市場に出回っている標準のSDカードに加えて、SanDisk(SanDisk)によって発明され、主に携帯電話で使用される非常に小さなフラッシュメモリカードであるMicroSDカード(以前はTFカードと呼ばれていました)もあります。MicroSDカードはアダプター(アダプター)を挿入することでSDカードに変換でき、操作手順はSDカードと同じです。MicroSDカードインターフェースの定義と各ピン機能の説明を図39.1.4に示します。
ここに画像の説明を挿入します
標準のSDカードバージョン2.0では、動作クロック周波数は50Mhzに達する可能性があります。SDIOモードでは4ビットのデータ幅を採用し、理論的には200Mbps(50Mx4bit)の伝送速度に達する可能性があります。SPIモードでは1ビットのデータを採用します。幅、理論的には50Mbpsの伝送速度に達することができます。そのため、SDIOモードでのSDカードの転送速度が速くなり、操作シーケンスが複雑になります。SDカードを使用して音楽ファイルや画像を読み取る場合、SPIモードでの伝送速度はニーズを満たすことができたため、この章ではSDカードのSPIモードを使用してSDカードの読み取りと書き込みをテストします。

2.SDカードコマンドとデータを返す

SDカードは、通常の読み取りおよび書き込み操作の前に初期化する必要があります。SDカードの初期化プロセスは、SDにコマンドを書き込んで、期待される動作モードで動作させることです。SDカードを読み書きするときは、最初に書き込みコマンドと読み取りコマンドを送信する必要があるため、SDカードのコマンド形式はSDカードを学習するための重要なコンテンツです。SDカードのコマンドフォーマットは6バイトで構成されています。データを送信するときは、上位ビットが最初になります。SDカードの書き込みコマンドフォーマットを次の図に示します。
ここに画像の説明を挿入します
バイト1:コマンドワードの最初のバイトはコマンドです。番号(CMD0、CMD1など))、形式は「01xxxxxx」です。コマンド番号の最上位ビットは常に0であり、これはコマンド番号の開始ビットです。2番目に上位のビットは常に1であり、これはコマンド番号の送信ビットです。下位6ビットは特定のコマンド番号です( CMD55として、8'd55 = 8'b0011_0111、コマンド番号は0 1 1 1 0 1 1 1 = 0x77)です。

Byte2〜Byte5:コマンドパラメータ。一部のコマンドパラメータは予約ビットであり、パラメータの内容は定義されていません。予約ビットは0に設定する必要があります。

Byte6:最初の7ビットはCRC(巡回冗長検査)チェックビットで、最後のビットはストップビット0です。SDカードは、SPIモードではデフォルトでCRCチェックをオンにせず、SDIOモードではCRCチェックをオンにします。つまり、SPIモードでは、CRCチェックビットを送信する必要がありますが、SDカードはCRCチェックビットを読み取るときに自動的にそれを無視するため、すべてのチェックビットを1に設定できます。SDカードはSDIOモードでデフォルトで電源がオンになっていることに注意してください。SDカードからCMD0を返す応答コマンドを受信したら、チップセレクトCSをプルダウンしてSPIモードに入ります。そのため、CMD0コマンドを送信する場合、SDカードはSDIOモードであり、CRCチェックをオンにする必要があります。さらに、CMD8のCRCチェックは常に有効であり、CRCチェックも有効にする必要があります。これらの2つのコマンドを除いて、他のコマンドのCRCをチェックする必要はありません。

SDカードコマンドは、標準コマンド(CMD0など)とアプリケーション関連コマンド(ACMD41など)に分けられます。ACMDコマンドは特殊コマンドであり、送信方法は標準コマンドと同じですが、アプリケーション関連コマンドを送信する前に、CMD55コマンドを送信して、次のコマンドがアプリケーション関連であることをSDカードに通知する必要があります。標準コマンドではなく、コマンド。コマンドを送信した後、SDカードは応答情報を返します。異なるCMDコマンドには異なるタイプの戻り値があります。一般的に使用される戻り値はR1タイプ、R3タイプ、およびR7タイプです(R7タイプはCMD8コマンド専用です) 。SDカードの一般的に使用されるコマンドを次の表に示します(表39.1.2)。

ここに画像の説明を挿入します
ここに画像の説明を挿入します
SDカードの戻り値の型R1のデータ形式を次の図に示します。
ここに画像の説明を挿入します
上図からわかるように、SDカードの戻り値の型R1形式は合計1バイトを返し、最上位ビットは0に固定され、他のビットはそれぞれ対応状態のフラグを表し、上位レベルが有効です。

SDカードの戻り値の型R3のデータ形式を次の図に示します。
ここに画像の説明を挿入します
上図からわかるように、SDカードの戻り値の型R3形式は合計5バイトを返します。返される最初のバイトは前述のR1の内容であり、残りのバイトはOCR(操作条件レジスタ)レジスタです。 。

SDカードの戻り値の型R7のデータ形式を次の図に示します。
ここに画像の説明を挿入します
上の図からわかるように、SDカードの戻り値の型R7形式は合計5バイトを返します。返される最初のバイトは上記のR1の内容であり、残りのバイトにはSDカードの動作電圧情報とチェックバイトが含まれます。その中で、電圧範囲は比較的重要なパラメータであり、その具体的な内容は次のとおりです
ここに画像の説明を挿入します
。SDカードの通常の読み取りおよび書き込み操作の前に、SDカードを初期化して期待される動作モードで動作させる必要があります。SDカードのバージョン1.0プロトコルとバージョン2.0プロトコルの初期化プロセスに違いがあります。CMD8コマンドをサポートしているのはSD2.0バージョンプロトコルのSDカードのみであるため、このコマンドに応答するSDカードはSD2.0バージョンプロトコルカード、それ以外の場合はSDカードまたはSD1.0バージョンプロトコルのMMCカードです。CMD8が応答しない場合は、CMD55 + ACMD41コマンドを送信できます。0が返された場合は、SD1.0プロトコルバージョンカードが正常に初期化され、エラーが返された場合はMMCカードと判断されます。MMCカードを判別した後、引き続きCMD1コマンドをカードに送信します。0が返された場合はMMCカードが正常に初期化され、それ以外の場合はエラーカード。

3.SDカードの初期化

市販されているSDカードのほとんどはSD2.0バージョンプロトコルを採用しているため、SD2.0バージョンプロトコルの初期化プロセスのみを紹介します。下記のSDカードはすべてSD2.0バージョンプロトコルに基づくSDHCカードを表しています。詳細な初期化手順は次のとおりです。

1. SDカードの電源がオンになった後、ホストFPGAは最初に少なくとも74の同期クロックをスレーブSDカードに送信します。電源オンの同期期間中、チップセレクトCSピンとMOSIピンはハイである必要があります(コマンドまたはデータの送信、それ以外の時間はすべて高レベルです。

2.チップセレクトのCSピンをプルダウンし、コマンドCMD0(0x40)を送信してSDカードをリセットし、コマンドの送信後にSDカードが応答データを返すのを待ちます。

3. SDカードが応答データを返した後、最初に8クロックサイクル待ってから、チップセレクトのCS信号をプルアップします。このとき、返された応答データを判断します。戻りデータがリセット完了信号0x01の場合、チップセレクトCSは戻り情報の受信中にローになり、この時点でSDカードはSPIモードに入り、次のステップを開始します。戻り値が別の値の場合、2番目のステップ再度実行されます。ステップ;

4.チップセレクトのCSピンをプルダウンし、コマンドCMD8(0x48)を送信して、SDカードのバージョン番号を照会します。このコマンドをサポートしているのはSD2.0バージョンカードのみです。コマンドが送信されたら、SDカードを待ちます。応答データを返すため。

5. SDカードが応答データを返した後、最初に8クロックサイクル待ってから、チップセレクトのCS信号をプルアップします。このとき、返された応答データを判断します。返される電圧範囲が4'b0001、つまり2.7V〜3.6Vの場合、SDカードがバージョン2.0であることを意味します。次の手順に進みます。それ以外の場合は、手順4に戻ります。

6.チップセレクトのCSピンをプルダウンし、コマンドCMD55(0x77)を送信して、次に送信されるコマンドがアプリケーション関連のコマンドであることをSDカードに通知します。コマンドが送信されたら、SDカードが応答データ;

7. SDカードが応答データを返した後、最初に8クロックサイクル待ってから、チップセレクトのCS信号をプルアップします。このとき、返された応答データを判断します。返されたデータがアイドル信号0x01の場合は、次の手順に進みます。それ以外の場合は、手順6を再実行します。

8.チップセレクトのCSピンをプルダウンし、コマンドACMD41(0x69)を送信して、SDカードが初期化されているかどうかを照会し、コマンドの送信後にSDカードが応答データを返すのを待ちます。

9. SDカードが応答データを返した後、最初に8クロックサイクル待ってから、チップセレクトのCS信号をプルアップします。このとき、返された応答データを判断します。返されたデータが0x00の場合、この時点で初期化は完了しています。それ以外の場合は、手順6を再度実行してください。

SDカードの電源投入およびリセットコマンドのシーケンスを次の図に示します。
ここに画像の説明を挿入します

4、SDカードの読み取りおよび書き込み操作

この時点で、SDカードはリセットおよび初期化操作を完了し、SPIモードで読み取りおよび書き込み操作を開始します。なお、SDカードの初期化時は、SPI_CLKのクロック周波数が400KHzを超えることはできません。初期化が完了すると、SPI_CLKのクロック周波数がSDカードの最大クロック周波数に切り替わります。現在、市場に出回っている多くのSDカードは、より速いクロック周波数での初期化をサポートしていますが、より多くのSDカードと互換性を持たせるために、SDカードの初期化時にクロック周波数が400KHzを超えることはできません。

SDカードの読み取りと書き込みのデータ量は512バイトの整数倍である必要があります。つまり、SDカードの読み取りと書き込み操作の最小データ量は512バイトです。コマンドCMD16を使用して、1回の読み取りおよび書き込み操作のデータ長を構成できるため、毎回読み取りおよび書き込みされるデータの量は(n * 512)バイト(n≥1)になります。このSDカードの読み取りおよび書き込み操作では、 SDカードのデフォルト構成、つまり、1回の読み取りおよび書き込み操作のデータ量は512バイトです。

SDカードの初期化後、SDカードの読み取りと書き込みが可能です。SDカードの読み取りと書き込みのテストでは、最初にSDカードにデータを書き込み、次にSDカードからデータを読み取り、データの正確性を確認します。SDカードの書き込み操作のタイミングチャートを下図に示します。

ここに画像の説明を挿入します
SDカードの書き込み操作プロセスは次のとおりです。

1.チップセレクトのCSピンをプルダウンし、コマンドCMD24(0x58)を送信して単一のデータブロックを読み取り、コマンドの送信後にSDカードが応答データを返すのを待ちます。

2. SDカードが正しい応答データ0x00を返した後、データヘッダー0xfeを送信する前に少なくとも8クロックサイクル待機します。

3.データヘッダー0xfeを送信した後、512バイトのデータの送信を開始します。

4.データ送信が完了したら、2バイトのCRCチェックデータを送信します。SPIモードではデータに対してCRCチェックが実行されないため、2バイトの0xffを直接送信するだけです。

5.検証データが送信されたら、SDカードが応答するのを待ちます。

6. SDカードが応答データを返すと、書き込みビジー状態(MISOピンがLow)になります。つまり、現時点では他の操作は許可されていません。MISOピンがハイであることが検出されると、SDカードはこの時点で書き込みビジー状態を終了します。

7. CSピンをHighにプルし、8クロックサイクル待ってから他の操作を許可します。

SDカードの読み取り操作のタイミングチャートを次の図に示します。
ここに画像の説明を挿入します
SDカードの読み取り操作プロセスは次のとおりです。

1.チップセレクトのCSピンをプルダウンし、コマンドCMD17(0x51)を送信して単一のデータブロックを読み取り、コマンドの送信後にSDカードが応答データを返すのを待ちます。

2. SDカードが正しい応答データ0x00を返したら、SDカードから返されたデータヘッダー0xfeを分析する準備をします。

3.データヘッダー0xfeを解析した後、SDカードから返された512バイトのデータを受信します。

4.データ分析が完了すると、CRCチェック値の次の2バイトが受信されます。SPIモードではデータに対してCRCチェックが実行されないため、これらの2バイトは直接無視できます。

5.検証データを受信した後、8クロックサイクル待ちます。

6.チップセレクトのCSピンを引き上げ、8クロックサイクル待ってから他の操作を実行できるようにします。

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/113195336