【STM32】SDIO—SDカードの読み書き01

stm32f103 に基づいてSTM32 を操作し
、死角をゼロにする - F103 ガイド

導入

1. SD カードには合計 8 つのレジスタがあり、SD カード情報の設定または表示に使用されます。
ここに画像の説明を挿入します

2. STM32 のように SD カードのレジスタにアクセスすることはできませんが、命令SDIO ではアクセスを利用して 64 個のコマンドが定義されています。SDカードはコマンドを受信すると、コマンドの要求に応じてSDカードの内部レジスタを変更し、プログラム制御では送信するだけで组合命令SDカードの制御、読み出し、書き込みを実現します。

バス

ここに画像の説明を挿入します
1. SD カードは通常、SDIO と SPI の 2 つのインターフェイスをサポートします。また、STM32F42x シリーズ コントローラの SDIO は SPI 通信モードをサポートしていないため、SPI 通信が必要な場合は SPI ペリフェラルのみを使用できます。

2. SD カードは、通信に 3、1、1、4 ピンを含む 9 ピン インターフェイスを使用电源线ます时钟线命令线数据线

CLK: SDIO ホストによって生成される、つまり STM32 コントローラによって出力されるクロック ライン;
CMD: SDIO ホストが SD カードを制御するコマンドを送信するコマンド制御ライン コマンドが SD カードに応答を提供する必要がある場合 (応答) )、SD カードもこのラインを通じて送信されます 応答情報;
D0-3: データ ライン、読み取りおよび書き込みデータを送信します; SD カードは D0 を Low にしてビジー状態を示すことができます;
VDD、VSS1、VSS2: 電源および接地信号。

SD カードの操作プロセスでは、データの同期に異なる周波数の 2 つのクロックが使用されます。1 つはカード識別段階のクロック周波数 FOD (最大 400kHz) で、もう 1 つはデータ送信モードのクロック周波数 FPP です。デフォルトは です。関連するレジスタで設定すると、SDIO は高速モードで動作し、データ送信モードの最大周波数は 50MHz になります。

バスプロトコル

SDIO がホスト コントローラーから SD カードに送信されるか、SD カードがホスト コントローラーに送信されるかに関係なく、CLK クロック ラインの立ち上がりエッジでのみ有効です。

SD バス通信はコマンドとデータ転送に基づいています。通信はスタートビット("0")で構成され、ストップビット("1")で終了します。SD 通信では通常、ホストが SD 通信を送信し、必要に応じて命令(Command)スレーブ デバイスがデータ送信に参加します。接收到命令后作出响应(Response)

SD データは(Black)、データ ブロック長が通常 512 バイトの形式で送信され、データはホストからカードへ、またはカードからホストへ送信されます。

STM32 コントローラは使用单线または4 线送信を制御できます。

ここに画像の説明を挿入します

コマンドと応答

SD カードの完全な操作プロセスは、ホスト (マイコンなど) が「コマンド」を開始し、SD カードはコマンドの内容に基づいて応答情報とデータを送信するかどうかを決定します。この操作を終了するには、ホストも読み取り/書き込みデータ停止コマンドを送信する必要があります。これは、ホストがコマンド コマンドを開始した後、SD カードには、コマンドの意味に応じて応答やデータなどが存在しない可能性があることを意味します。指示。
ここに画像の説明を挿入します

コマンド形式


ここに画像の説明を挿入します
SDコマンドのフォーマットは 48 ビット固定で、CMD ラインを介して連続的に送信されます (データラインは関与しません)
起始位和终止位。ストップ ビット、データ ビットは 1 つだけ含まれており、スタート ビットは 0、ストップ ビットは 1 です。
传输标志: 送信方向を区別するために使用され、このビットが 1 の場合はコマンド、ホストから SD カードへの送信、このビットが 0 の場合はレスポンス、ホストから SD カードへの送信を示します。 SD カードをホストに接続します。コマンドの主な内容は、コマンド、アドレス情報/パラメータ、CRC チェックの 3 つの部分で構成されます。
命令号: 固定の 6 ビットを占有するため、合計 64 個のコマンド (コード名: CMD0 ~ CMD63) が存在します。各コマンドには特定の目的があります。一部のコマンドは SD カードの操作には適しておらず、MMC カードまたは SD I でのみ使用されます。 /O カード。 .
地址/参数: 各コマンドには、コマンド付加内容として 32 ビットのアドレス情報/パラメータが含まれます。たとえば、ブロードキャストコマンドにはアドレス情報がなく、この 32 ビットはパラメータの指定に使用され、アドレッシングコマンドの 32 ビットはアドレスの指定に使用されます。対象のSDカードの
CRC7 校验: 7 ビット長のチェックビットは、コマンド送信内容の正当性を検証するために使用されますが、外部からの干渉が発生し、送信データの各ビットの状態が変化すると、キャリブレーションエラーが発生し、コマンドが正常に動作しなくなる可能性があります。送信は失敗し、SD カードはコマンドを実行しません。

つまり、clk の立ち上がりエッジで、一定のルールに従って CMD コマンドを送信することで、SD カードを識別できるコマンドを送信することができます。

周辺機器SDIO

STM32 コントローラーには SDIO があり、SDIO アダプターと AHB インターフェイスの 2 つの部分で構成されます。
SDIO アダプタは SDIO ホスト機能を提供し、SD クロックを提供し、コマンドを送信し、データ送信を実行できます。AHB インターフェイスは、SDIO アダプタ レジスタにアクセスするためにコントローラによって使用され、割り込みと DMA 要求信号を生成できます。

SDIO は 2 つの部分で構成され、2 つのクロック信号を使用します


SDIO は 2 つのクロック信号を使用します。1 つは SDIO アダプター クロック (SDIOCLK=HCLK=72MHz)、もう 1 つは AHB バス クロックを 2 で分周したもの (HCLK/2、通常は 36MHz) です。アダプタレジスタとFIFOはAHBバス側のクロック(HCLK/2)を使用し、コントロールユニット、コマンドチャネル、データチャネルはSDIOアダプタ側のクロック(SDIOCLK)を使用します。

SDIOデータFIFOレジスタ(SDIO_FIFO)

データ FIFO レジスタには受信 FIFO と送信 FIFO が含まれており、これらは 32 個の連続したアドレスにある 32 個のレジスタのセットで構成されます。

CPU は FIFO を使用して複数のオペランドを読み書きできます。たとえば、SD カードからデータを読み取りたい場合は SDIO_FIFO レジスタを読み取る必要があり、SD カードにデータを書き込みたい場合は SDIO_FIFO レジスタに書き込む必要があります。

SDIO は、これら 32 個のアドレスを 16 個のグループに分割し、そのうちの半分が送受信されます。読み取りまたは書き込みを行うたびに、最大で送信 FIFO のサイズの半分を読み取るか、受信 FIFO に書き込むことができます (8 ワード (32 バイト))。ここで、SDIO_FIFO を操作する (読み取りまたは書き込みのどちらでも) ことを特に思い出してください。 4 バイトにアラインされたメモリ上で操作する必要があります。そうしないとエラーが発生します。

おすすめ

転載: blog.csdn.net/apythonlearner/article/details/132983713