2

MMC/SD カードに関する多くの情報を見て、これを読み取るためのライブラリを作成しようとしました ( Procyon AVRlibを変更します)。

しかし、ここでいくつか問題があります。私は元のコードを変更せず、ここで試しました。私の問題は、SD カードの初期化に関するものです。256 MB と 1 GB の 2 つがあります。

CMD0、CMD55、ACMD41、CMD1 の順に init コマンドを送信します。

しかし、256 MB の SD カードは、各コマンドに対して 0x01 応答しか返しません。CMD1 を何度も送信すると、256 MB の SD カードは常に 0x01 のみを返し、0x00 を返すことはありません。

1 GB SD はもっとクレイジーです... CMD0 は 0x01 で戻ります。いいのですが、CMD55 コマンドは 0x05 で応答します。それ以外の場合は 0xC1 で応答し、次のインタラクションで 0x5F とともに 0xF0 で応答することもあります...

インターネットの周りには情報と例がありますが、少し混乱しています。ここで私のプロジェクトでは、1 GB カードを使用する必要があり、SD アダプター付きの microSD カードを使用しようとしています (これは問題ではないと思います)。

この問題を解決するにはどうすればよいですか?

PS: 私の問題は Stack Overflow の質問Initializing SD card in SPI issuesの問題に似ていますが、解決策は私の問題を解決しませんでした。1 GB SD カードは 0x01 しか返さない... :cry:

4

4 に答える 4

2

なぜ CMD1 が必要なのですか? そして、その下にある「CMD1 は、カードを再初期化した後に使用する場合にのみ、薄い (1.4 mm) 標準サイズの SD メモリ カードに対して有効なコマンドです (パワーオン リセット後ではありません)」というメモを読みましたか?

1GBカードについて、頭に浮かぶアイデア:

  • すべてのコマンド (コマンドの送信、応答の取得) の後、CS をハイにする前に 8 つのダミー バイトを送信しますか?
  • 返された値が奇妙に思えます (0x05 にはビジー ビットが設定されていないため、WTF?)、ハードウェアに問題があるのでしょうか?
  • カードは別の方法で機能しますか?
于 2010-08-16T10:47:52.213 に答える
1

ただし、一部のメーカーのカードではこの解決策が機能しない場合があります。このようなカードの場合、プロシージャ/ライブラリを編集する必要がある場合があります。これが、1 GB カードの動作が異なる理由である可能性があります。カードの製造元が異なる可能性があります。特定のカードの SPI モードは、商用機器ではそれほど一般的ではない可能性があり、そのため、一部のカード メーカーによって仕様がさらに逸脱している可能性があります。

コマンドとクロックを少し変更すると、それらの手順が正しいことをより制御し、自信を持つことができます。少しずつ進歩するためには、しっかりとした土台が必要なので、これは便利です。400 kHz 未満の 80 クロックが 1 つのカードでは重要でしたが、別のカードでは 2 MHz 以上で実行できることがわかりました。

両方のカードで信頼できるコマンドを 1 つずつ進めるようにしてください。

于 2011-05-16T22:54:45.917 に答える
1

ここでは、SPI を介した MMC/SD の使用について簡単に説明します。関連するFAT ファイル システム ライブラリも使用しましたが、うまく機能します。

于 2011-05-17T18:50:13.067 に答える
1

多分これは少し役に立ちます: SD 仕様パート 1 物理層簡略化された仕様

于 2010-08-04T18:36:58.487 に答える