Stm32f4甚のフル機胜のSDHCメモリカヌドドラむバヌパヌト1

この蚘事の目的は䜕ですか



すべおの゚ンベダヌは、遅かれ早かれ、プロゞェクトのROMマむクロコントロヌラヌが䞍足するずいう問題に盎面したす。 たあ、さお、単玔なCNCマシンの制埡システムを開発する必芁がありたす。制埡プログラムは、デバむス自䜓たたはデヌタ収集システム、たずえば実隓のセンサヌから保存されたす。マむクロコントロヌラは、元々そのような情報の配列を栌玍するように蚭蚈されおいないこずは明らかです。



EEPROMチップの賌入ず接続から、石のハヌドりェアUSBホストぞの暙準USBフラッシュドラむブの接続もしあればに至るたで、このケヌスには倚くの゜リュヌションがありたす。 さお、手䜜りのプロゞェクトの堎合、最適なオプションは最も叀兞的なSDメモリカヌドです。 これらはさたざたなタむプで、デヌタの初期化ず送信のメカニズムが異なり、さたざたなむンタヌフェヌスを介しおホストに接続されたすそのうち3぀だけですが、埌で詳しく説明したす。 さらに、倚くの最新のマむクロコントロヌラヌには、これらのむンタヌフェむスのハヌドりェアモゞュヌルが搭茉されおおり、開発者の䜜業は、それらを構成し、プロトコルに埓っおカヌドに必芁なコマンドを送信するこずだけです。 たあ、メモリカヌドには、すべおの段階で単玔に賌入するずいう楜しい特性もありたす。



セキュアデゞタルSDカヌドに぀いお



りィキペディアを曞き換えたせん。ここでは、SDメモリカヌドの基本情報ず皮類、およびそれらの特性に぀いお説明したす。

セキュアデゞタルフォヌマット -䞻にポヌタブルデバむスで䜿甚される䞀般的なおそらく最も人気のあるフラッシュメモリフォヌマット。 そのような各カヌドの䞭には、実際には、フラッシュメモリチップメモリコアず、8぀のレゞスタを持぀倖郚䞖界ず接続するコントロヌラがありたす。 埌者のタスクは、倖郚むンタヌフェむスのハヌドりェア実装、カヌドに関する情報のサポヌトタむプ、容量、速床クラスはただ他の特性の束です、電力制埡、そしおもちろん、マむクロメモリ自䜓の管理アドレス指定、読み取り、曞き蟌み、クリヌニング、玄80の制埡コマンドの線成です







SDフォヌマットは、MMCカヌドに基づいお、Panasonic、SanDisk、Toshibaによっお蚭立されたした。 これらの䌁業は埌にSDカヌド協䌚を蚭立したした。SDカヌド協䌚は珟圚、SDテクノロゞヌを開発および掚進しおいたす。 むンタヌフェむス、プロトコル、コマンド、カヌドレゞスタを詳现に説明するメむンドキュメントは、 Physical Layer Simplified Specification Copyright 2001-2006 SD GroupPanasonic、SanDisk、ToshibaおよびSD Card Associationです。 すべおのRDセンタヌが将来のデバむスのハヌドりェアず゜フトりェアを開発するずきに䜿甚するのは、この情報です。 ファむル自䜓はむンタヌネットのパブリックドメむンに安党に配眮されおおり、ダりンロヌドするのに問題はありたせん。 したがっお、このドキュメントに埓っお、次のタむプのメモリカヌドが存圚したす。

• SDカヌドたたはSDSCSecure Digital Standard Capacity-第䞀䞖代のメモリカヌド。 ボリュヌムの制限は2 GBです。 アドレス指定されたスペヌスの最小サむズは1バむトです。

• SDHCカヌドSecure Digital High Capacity-倧容量のメモリカヌド最倧32 GB。 最初のタむプずは倧きな違いがありたす。぀たり、アドレッシングは512バむトのブロックで発生し、この䞖界の誰もこの倀を倉曎できたせん。 蚀い換えれば、たずえば71バむトの情報最小パケットサむズ、512バむトを取埗しお曞き蟌むこずはできたせん。 これがなぜそうなのか、特に消化したせんでしたが、これはコントロヌラヌの32ビットアドレス空間によるものであり、メモリカヌドは通垞1぀たたは別のファむルシステム甚にフォヌマットされおいるため、 。 SDHCカヌドには初期化プロセスもありたす。これに぀いおは埌で説明したす。

• SDXC Secure Digital eXtended Capacity-拡匵された容量のメモリカヌド-理論的には最倧2TBのメモリ。 アドレス指定も512バむトです。 したがっお、32ビットのスペヌスで刀明したす2 ^ 32* 512 = 2 Tb。



カヌドの䞖代ごずに仕様があり、同時に、新しい䞖代の各ドキュメントには叀いカヌドに関する情報が蚘茉されおいたす。぀たり、補品が曎新されるたびに「倪っおしたいたす」。 そのため、最新バヌゞョンの物理局簡易化仕様をダりンロヌドしお、すべおの䞖代のカヌドで䜜業するために必芁なものをすべお芋぀けおください。 たた、メモリカヌドは、デヌタの読み取り/曞き蟌みの速床に応じおいく぀かのクラスに分類されたす。 たあ、あらゆる皮類のミニ、microSD、microSDXCなどに぀いおは -これはちょうど別のケヌスサむズずピン配列です-暙準サむズのカヌドず内郚の違いはありたせん。



そしお今、それは重芁ですカヌドの皮類、容量、メヌカヌ、ケヌスの皮類、賌入した色、店舗に関係なく、すべおのセキュリティデゞタルカヌドは倖界ず同じ盞互䜜甚むンタヌフェヌスを持っおいたす。 コマンド、初期化メカニズムは異なりたすが、むンタヌフェヌスは同じです。 これにより、SDずSDHCの䞡方のメモリカヌドをカメラに接続できたす。 さお、カヌドの蚀語、あるいはもう3぀ SDずUHS-II アクティブスピヌカヌず「すべおのノヌカットドッグマむクロコントロヌラヌが珟圚知っおいるナニバヌサルマむクロプロセッサヌ通信の蚀語」 -SPIに぀いお議論するずきが来たした。



メモリカヌドむンタヌフェヌス



前述のように、セキュリティデゞタルカヌドには、SD、UHS-II、およびSPIの3぀の倖郚むンタヌフェむスがありたす。 前者は、ホストずデヌタを亀換するための「ネむティブ」チャネルであり、その結果、フル機胜、フルスピヌドの盞互䜜甚の実装を可胜にしたす。 SPIは倚くのコマンドをサポヌトせず、最倧のデヌタ亀換速床を提䟛したせんが、すべおのマむクロコントロヌラヌ最新モデルず叀いモデルの䞡方に搭茉されおいるため、問題のないすべおのものにカヌドを接続できたす。 これを行う方法に関する蚘事はたくさんありたす。 しかし、マむクロプロセッサ技術の開発により、石の生産の技術的プロセスにおけるナノメヌトルの枛少により、SDカヌドずの通信手段ずしおのSPIむンタヌフェヌスは次第に消滅しおいたす。 確かに、MKがSDプロトコルのハヌドりェア実装をサポヌトしおいる堎合、機胜性の䜎い代替手段に連絡したすか Fateから、このプロゞェクトのためにSTMicroelectronicsからSTm32f4ストヌンが送られたした。このモゞュヌルには、カヌドのむンタヌフェむスずプロトコルの䞡方を実装する呚蟺モゞュヌルSDIOセキュリティデゞタル入力出力がありたす。



では、SDプロトコルずは䜕ですか 3぀の重芁な抂念がありたす。

• コマンド -カヌドコントロヌラヌによっお認識され、1぀たたは別のアクションを呌び出すビットシヌケンス。

• response-コマンドに察するカヌドコントロヌラヌの応答。 これには、䞀般情報カヌドステヌタス、さたざたな内郚モゞュヌルの珟圚のステヌタスなどず、実際にはホストが期埅する情報コマンドでカヌド識別子を芁求した-応答で受信したの䞡方を含めるこずができたす。

• デヌタ -たあ、コメントはありたせん。



しかし、プロトコルのロゞックを芋る前に、むンタヌフェむスの物理に目を向けたす非垞に抂芁。





ピン4-電源カヌド。

ピン3、6-接地;

ピン5-クロック信号。

ピン2-コマンドず応答の行。

ピン1、7、8、9-4ビットデヌタバスのラむン。



カヌドずの間のすべおの送信は、 CLKラむンで送信されるクロック信号ず厳密に同期したビットシヌケンスです。 掚奚される呚波数は、カヌドの仕様に蚘茉されおおり、タむプず速床クラスに応じお異なる意味を持ちたす。 どのカヌドでも、初期化は非垞に䜎いデヌタ転送ず比范しお頻床でのみ行われるこずに泚意しおください。 デヌタバスは1ビット D0のみが動䜜たたは4ビットで 、初期化䞭に蚭定されたす。 ホスト偎のSDカヌドの堎合、デヌタずコマンドラむンはプッシュプルで 、 4.5〜10 kOhmの抵抗を介しお電源にプルアップする必芁がありたす。 クロックバスも電源にプルする必芁がありたす。



さお、今プロトコルに


ホストカヌド情報を亀換するには、いく぀かのオプションがありたす。



1デヌタのないチヌム。

すべおのチヌムは応答を芁求するず芁求しないに分けられたす。







図からわかるように、応答を必芁ずしないコマンドホストを送信する必芁がある堎合は、送信するだけです。 ただし、チヌムが特定の回答、ヘルメットを暗瀺しおいる堎合、回答を埅ちたす。 ホスト偎ずカヌド偎の䞡方で、ほがすべおのコマンドず応答がチェックサムによっおチェックされたす。 さお、コマンドの圢匏を芋おください







フレヌムは48ビットで構成されたす。 最初は開始ビットで、垞にれロです。 次に、デヌタがホストからカヌドに送信されるず蚀い、匕数付きのコマンドを送信したす。 はい、はい、コマンドはむンデックスず匕数で構成されたす。 コマンドの埌、巡回冗長怜査CRCアルゎリズムによっお蚈算された7ビットチェックサムを送信し、ストップビットの送信を完了する必芁がありたす。 コマンドには、 CMD基本コマンドずACMDアプリケヌション固有コマンドの2぀のタむプがありたす 。 圌らは議論の有無にかかわらず、応答を持぀こずができ、持たないこずができたす。 合蚈で玄80のチヌムがあり私は確信しおいなかったかもしれたせんが、おそらくそれ以䞊、各チヌムは仕様で詳现に説明されおいたす。 カヌドの䞻芁な䜜業初期化、読み取り、曞き蟌みに必芁ないく぀かにのみ焊点を圓おたす。 コマンドむンデックスは、CMDたたはACMD文字の埌に来る数字です。 必芁に応じお、コマンド匕数の6ビットず32ビットが割り圓おられたす。



ACMDに぀いおの重芁な説明 むンデックスのスペヌスはCMDコマンドのむンデックスず亀差するため、コントロヌラヌはコマンドをアプリケヌション固有のずおりに取り、 CMD55を前に付ける必芁がありたす



応答必芁な堎合も5぀のタむプがあるずいう理由だけで、トピック党䜓です。



• R1通垞の応答コマンド -長さ48ビット。 おそらく最も人気のある応答。



開始ビット、転送方向ビットカヌドからホストぞ、応答の生成を促したコマンドのむンデックスの6ビット、カヌドのステヌタス、そしおもちろん、ストップビット付きのチェックサムが含たれおいたす。 このタむプの応答のすべおの情報は32ビットのカヌド状態分野によっお運ばれたす 。 仕様では、このステヌタスの各ビットの意味カヌドがビゞヌ/フリヌ、ロック/ロック解陀、デヌタ転送マシンの珟圚の状態、1぀たたは別のアクションの準備などを慎重か぀慎重に説明しおいたす。



• R1b -R1応答の堎合ず同じ圢匏で、デヌタラむンで別のビゞヌフラグのみを送信したす。



• R2CID、CSDレゞスタ-136ビットの応答により、カヌドコントロヌラのCIDおよびCSDレゞスタの内容がホストに送信されたす。



ここで、すべおの有甚な情報は、 CIDの内容CMD2たたはCMD10コマンドぞの応答の堎合たたはCSDレゞスタの内容CMD9コマンドを送信する堎合が配眮される127ビットフィヌルドに含たれおいたす。 それでは、特別なチヌムが圌らのために発明されたのはどのような皮類のレゞスタヌであり、そのような長い応答でもありたすか

CIDカヌド識別デヌタ -名前が瀺すように、カヌドに関するすべおの識別情報シリアル番号、補造元、補造日などが含たれたす。 CSDカヌド固有のデヌタ -カヌドに関するすべおの技術情報メモリサむズ、読み取り/曞き蟌みブロックのサむズ、最倧速床特性、さたざたなモヌドでの電流消費の最倧特性など。 モバむルたたはカメラのホストが挿入されたカヌドに関するすべおの情報を取埗するために䜿甚するのは、この情報です。



•R3-48ビット長、ACMD41コマンドぞの応答ずしお来お、カヌドレゞスタのOCR動䜜条件レゞスタの内容に関する情報を運びたす。



ACMD41-カヌド初期化コマンド。 送信埌、この応答を埅぀必芁がありたす。この応答は、初期化プロセスが正垞に完了したこずを瀺し、 OCRレゞスタの内容䜿甚可胜な電圧範囲、メモリカヌドのタむプ、 ビゞヌフラグを報告したす。



• R6公開されたRCA応答 -RCA盞察カヌドアドレスカヌドずいく぀かのステヌタスビットが含たれたす。



バスには、耇数のカヌドを単䞀のホストに接続するこずが含たれたす。 したがっお、バス䞊のカヌド自身の䜏所などの抂念は非垞に重芁です。 これはRCAレゞスタの内容です。



• R7カヌドむンタヌフェむス条件 -CMD8コマンドぞの48ビット応答。



カヌドは特定の電圧で動䜜し、それ以䞊でもそれ以䞋でもありたせん。 初期化の前に、 怜蚌する必芁がありたす これに぀いおは埌で説明したす。 応答ずしお、カヌドは電圧自䜓より正確には、この範囲に察応する倀ず特定のチェックパタヌンこれに぀いおは埌で詳しく説明したすを送信したす。



2デヌタ。

思い出させおくださいずっず前に蚀われたした...、コマンドの送信ずカヌドからのフィヌドバックの受信を怜蚎したした。 今こそ、実際にデヌタを送信する方法を考え出すずきです。 繰り返したすが、これは512バむトのブロックで行われたす SDHCカヌドの堎合-カヌドのアドレス空間党䜓が512バむトのセルに分割されたす 。 デヌタを送信する前に、カヌドコントロヌラヌにデヌタが送信されようずしおいるこずを通知する特別なコマンドが垞に先行する必芁がありたす。 そしお、私が蚀ったように、それらは1ビットたたは4ビットのバスで行きたす。 カヌドからホストにデヌタを送信する圢匏読み取りを芋おみたしょう。







2぀のデヌタ転送モヌドが可胜です。1぀のブロックブロック読み取り操䜜ず䞀床に耇数のブロック耇数のブロック読み取り操䜜。 いずれの堎合でも、転送の開始ず完了は特別なコマンドで発生したす。応答に泚意しおください。







逆の手順蚘録も同様の方法で実行され、パケット間には必ずビゞヌなパケットのみが存圚し、カヌドが次のブロックを受け入れる準備ができおいないこずを通知したすデヌタはただフラッシュカヌドに曞き蟌たれおいたせん。



SDメモリヌカヌドの初期化



たあ、私たち、埋め蟌み、人々はすべおが初期化される必芁があるずいう事実に慣れおいるので、SDカヌドはこの壮倧なルヌルの䟋倖ではありたせん。 サポヌトされおいる電圧を確認し、アドレスを割り圓お、䞀般に、このカヌドで䜜業できるこずを確認する必芁がありたす。 仕様から匕き出された初期化アルゎリズムを芋お、ブロックごずに順番に調べお、目的の目的で䜿甚する前にデバむスで䜕をする必芁があるかを理解したしょう。







重芁 初期化は䜎速で実行されたす カヌドシュレッド呚波数は400 kHz以䞋です!!!



重芁 電源が䟛絊された埌、急いでコマンドを䜿甚しおカヌドをロヌドし、電圧を萜ち着かせ、250ミリ秒埅機したす1぀のバスに接続されおいるカヌドの数、デヌタラむンの幅、および電源のパラメヌタヌに応じお、少し長くかかる堎合がありたす。 電圧が必芁なレベルに達するずすぐに、すべおの浮遊容量などが充電されたした。 など、初期化プロセスを䜜成できたす。 そしお、すべおのカヌドをれロにし、それらをアむドル状態に移行するこずから始たりたす。



•ヘルメットCMD0 、匕数なしで泚意を払い、応答に䜕も期埅しないでください。 その結果、回線䞊のすべおのカヌドがアむドル状態になりたす。



•ストレスを怜蚌する必芁があるず蚀ったこずを芚えおいたすか そう どの電圧で動䜜するかをカヌドに䌝え、それに関するすべおの情報を聞く必芁がありたす。 ビット118がホスト電圧を瀺し、ビット70- パタヌンをチェックする-anyの匕数を持぀CMD8ヘルメット。仕様では10101010を送信するこずを掚奚しおいたす。 電圧ビットは、衚に埓っお蚭定されたす。







たあ、すべおが非垞に明確であり、䜎電圧範囲からはほど遠い。 Stm32f4は2.7〜3.6 Vの範囲の電圧のみを生成するため、匕数の8番目のビットに1を蚭定したす。 合蚈、匕数110101010のチヌムがありたす。 送信したした。 私たちはすべおがうたくいったこずを確認し、私たちは答えを埅っおいたす。それは私たちを長い間そうさせないでしょう。 仕様では、このコマンドに察する答えはR7タむプであるこずがわかりたした 。

それを埅たなければ、さらなるACMD41チヌムが 、私たちがだたされた方法を正確に決定したす-圌らは暙準容量のバヌゞョン1.Xカヌドをスリップしたか、たったくSDカヌドをスリップしたせんでした。 確かに、私たちが䜕か間違ったこずをしおいる可胜性がありたす。 しかし、悲しいこずに぀いおは話さないで、フラッシュドラむブがただ応答しおいるずしたす。 すべおが電圧でうたくいけば、カヌドは幞せです、私たちは幞せです、答えには匕数で送ったすべお、぀たり110101010が含たれたす。 これは有効な応答ず呌ばれたす 。 もしそうなら、我々は次のステップに進みたす。



• 110101010を埅機したしたが、盎接初期化-ACMD41コマンドの時間が来たした。 ここで重芁な点を思い出しおください。コマンドが単玔ではなく、ACMDであるこずをカヌドに䌝えるために、たずCMD55を送信したす 。 匕数では、このコマンドの察象ずなるカヌドのアドレスを指定する必芁がありたす。 しかし、停止したす。アドレスがない限り、私たちは圌を知りたせん。 䜕もわかりたせんが、埌で...しかし、今のずころはれロずヘルメットを曞きたす。 タむプR1の応答を受け取った埌、カヌドがACMDを受け入れる準備ができおいるこずを確認したす。ヘルメット41のむンデックスが䜜成された埌でのみです。 このコマンドには匕数があり、 30ビット目の堎所で1を指定したす。これは、ホストがSDHCカヌドをサポヌトし、ホスト電圧が230ビットであるこずを瀺したすOCRレゞスタの内容を参照。 答えはR3タむプを埅っおいたす。 ここでは、カヌドレゞスタビゞヌフラグのOCRの内容を䌝送する応答パケットの31番目のビットの代わりに1を取埗するこずが重芁です。 これは、カヌドが初期化プロセスを完了したこずを瀺したす。 このプロセスには長い時間がかかるマむクロコントロヌラヌのクロックサむクルよりもはるかに長いずいう事実を考慮するず、busyフラグを削陀しお応答を埗るたで、ACMD41を1サむクルで送信する必芁がありたす。 これが発生するずすぐに、チェックは30ビット長になり、1ビットであれば、SDHCたたはSDXC倧容量カヌドがあり、それ以倖の堎合は暙準容量のSDカヌドがありたす。 埅っお、埅っお、bisiフラグがハングしおハングした堎合、䞊蚘の堎合のように、䞍適切なカヌドかほずんどの堎合カントです。



•次のヘルメットCMD2-匕数なしで回答R2を確認したす。 この堎合、 CIDレゞスタの内容に関する情報を保持し、補造元ID、カヌドのシリアル番号、その他の情報を枛算できたす。



•最埌に、最埌のステップはカヌドのアドレスを取埗するこずです RCA-盞察

䜏所 。 既に述べたように、耇数のカヌドを1぀のバスに接続できるため、それぞれに固有のロヌカルアドレスが必芁です。 CMD3ヘルメットを送信するず、 R6のような回答が埗られたす。 䞋䜍16ビットにはカヌドのステヌタスが含たれ、䞊䜍ビットには新しいRCAアドレスが含たれたす。 今埌、カヌドにアクセスするには、名前、぀たりRCAアドレスで圌女に電話する必芁がありたす。



•オプションのアむテム。 デフォルトでは、カヌドは1ビットのデヌタバスで動䜜したすが、これはもちろん4ビットのデヌタバスよりも䜎速です。 最倧のパフォヌマンスを達成したい堎合-もちろん、以前のCMD55を備えたACMD6ヘルメット。 ただし、最初に、RCAを匕数ずしおCMD7コマンドを䜿甚しお、カヌドをTransfer State状態 以䞋を参照にする必芁がありたす。 匕数ACMD6では 、最初のビットの代わりに、 1を曞き蟌みたす4ビットモヌドを有効にする堎合は0 、無効にする堎合は0を曞き蟌みたす。 回答R1は、成功した操䜜を瀺したす。



SDHCカヌドの初期化の䟋


この䟋では、Stm32F4の呚蟺に曞き蟌たれたmakeshiftコマンド送信機胜を䜿甚しおいたす。

char SDIO_send_command(char index, unsigned int arg, char resp_type, unsigned int *resp);
      
      





•むンデックス-チヌムむンデックス。

•argは匕数です。

•resp type-応答タむプ0-応答なし、1-短い48ビット応答、2-長い136ビット応答;

•resp-応答配列短い応答の堎合、情報は配列の最初の芁玠によっお運ばれ、長い応答の堎合-4芁玠。

•コマンドは、操䜜が成功しおコマンドを送信しお応答を受信した堎合は0を返し、それ以倖の堎合ぱラヌコヌドを返したす。



 char SDHC_card_initialization(unsigned int *RCA) { char result; unsigned int RESP[4]; result = SDIO_send_command(0, 0, 0, RESP); // CMD0,    if (result != 0) return result; //   result = SDIO_send_command(8, 0x1AA, 1, RESP); // CMD8   110101010 if ( (result != 0) || (RESP[0] != 0x1AA) ) return 4; //   while( !(RESP[0]&(1<<31) ) ) //,      { result = SDIO_send_command(55, 0, 1, RESP); // CMD55,  , ,    ACMD if (result != 0) return result; result = SDIO_send_command(0x29, 0x40020000, 1, RESP); // ACMD41 if (result != 0) return result; } result = SDIO_send_command(2, 0, 3, RESP); // CMD2      if (result != 0) return result; result = SDIO_send_command(3, 0, 1, RESP); // CMD3   RCA  if (result != 0) return result; SDIO->CLKCR = (0x02<<0)|(1<<11)|(1<<8)|(1<<14); //  (  2 - ) *RCA = ( RESP[0] & (0xFFFF0000) ); //    RCA result = SDIO_send_command(7, *RCA, 1, RESP); //   if (result != 0) return result; result = SDIO_send_command(55, *RCA, 1, RESP); // CMD55,  , ,    ACMD if (result != 0) return result; result = SDIO_send_command(6, 0x02, 1, RESP); // ACMD6 c  0x02,  4-  if (result != 0) return result; if (RESP[0] != 0x920) return 1; else return 0; //,         return 0; }
      
      





コヌドを実行し、答えがれロであるこずを確認し、初期化を完了したす。 すべお、メモリを操䜜し、情報を読み曞きできたす。



デヌタ亀換



ここでは、党員がSDメモリカヌドの状態図デヌタ転送モヌドを操䜜したす。



このモヌドには6぀のカヌドステヌタスがあり、 R1応答で129ビットでそれらを認識できたす。 仕様に目を向ける。



• スタンバむ状態stby -アむドル状態の代わりに初期化埌に蚭定されたす。

• 転送状態tran -デヌタ転送モヌド。

• 受信デヌタ状態rcv -ホストからのデヌタパケットを埅機しおいたす。

• プログラミング状態prg -受信したバヌストをフラッシュに蚘録したす。

• デヌタ状態デヌタの送信-ホストにデヌタのパケットを送信したす。

• 切断状態dis -CMD7コマンドで別のカヌドを遞択するために䜿甚されたす。



カヌドぞのデヌタの曞き蟌み


したがっお、初期化に成功するず、 tranの状態になりたす。いずれにしおも、そうでなければなりたせん。 図を芋おください。rcv状態に切り替えるには、曞き蟌みたい512バむトセルのアドレスずずもにCMD24コマンドを送信する必芁がありたす。 送信したした。 カヌドはデヌタスタンバむモヌドになりたした。 次に、512バむトすべおを転送するか、CMD12コマンドを送信する送信を停止するたで、デヌタバスに情報をスロヌし始めたす。 行為が完了するず、カヌド自䜓はprg状態に移行し、デヌタが曞き蟌たれるたでしばらくそこに留たりたす。 私たちは埅っおいたす...どのくらい正確に埅っおいたすか そしお、ステヌタスtranがR1応答で返されるたで、匕数にカヌドのアドレスを含むCMD13サむクルで圌女を送信したす。 これが最終的に発生したら、CMD24を再床送信しお、デヌタの別のパケットを送信できたす。 さらに、耇数のブロックを䞀床に蚘録するモヌドCMD25および仕様のその他のモヌド詳现もありたす。



デヌタの読み取り


逆の手順を実行するには、たず、カヌドがtranにあるこずを確認したす。 匕数にRCAアドレスを持぀CMD17ヘルメット。 すべおがうたくいけば、カヌドはデヌタ状態に移行し、デヌタラむンで512バむトブロックの情報を発行し始めたす。 この時点でのホストのタスクは、回線を泚意深く聞いおデヌタを読み取るこずです。 パッケヌゞが終了するずすぐに、カヌド自䜓がtranステヌタスに移行したす。 䞀床に耇数のブロックで読み曞きが可胜であるず蚀う必芁はないず思いたす。



初期化ルヌチンずは異なり、Stm32f4マむクロコントロヌラヌのSDIOモゞュヌルのハヌドりェアにあたりにも関連しおいるため、この蚘事ではリヌダヌ/ラむタヌプログラムのリストを提䟛したせん。これは蚘事の第2郚のトピックです。



参照

1 SD_Physical_Layer_Spec 2.0

2 SD_Physical_Layer_Spec 4.1

3STM32F4 CortexM4リファレンスマニュアル



All Articles