3

現在、SDSC v1 カードのみをサポートする組み込みシステムに取り組んでいます。2 GB 未満のカードを見つけるのがますます難しくなってきているので、SDHC カードのサポートを追加しようとしています。カードとの通信は、SPI バスを介して行われます。

したがって、カードを初期化するために私が行っていることは次のとおりです。

  • CMD0 を送信します。カードが 0x1 を返す
  • CMD8 + 0x1AA を送信します。カードは 0x1 と 0x1AA を返します
  • ACMD41 を送信します。カードは 0x0 を返します。

その後、MBRを読み取り、 0x30 LBAに FAT16 パーティションがあることがわかりました。ただし、そのアドレス (0x30*512) からセクターを読み取ると、0x01 0x09 の繰り返しが返されます...

  • ACMD41 を送信するとき、コマンド ID 0x69 を送信しています。それが正しいか?または、CMD55 を送信してから CMD1 を送信する必要がありますか?
  • 1は、ACMD41 を送信した後に CMD58 と、場合によっては CMD16 を送信する必要があることを示しています。それは必要ですか?それらを行わなくても、有効な MBR を読み取ることができました。

1. http://elm-chan.org/docs/mmc/mmc_e.html

4

1 に答える 1

2

「ACMD」コマンドはすべて、関連するコマンドが続く CMD55 を必要とします。

たとえば、コマンド ACMD41 の場合:

SD_command(55, 0, 0, 0, 0, 0xFF);
n= SD_command(41, SD2<<6 , 0, 0, 0, 0xFF);

最初の引数に 0b01000000 を OR することを忘れないでください。実際のコマンドは 55 ではなく、55|0b01000000( 0b01110111, decimal 119) です。SD_command 関数自体で行います。

SD カードへの接続は非常に面倒なので、あきらめないでください。幸運を!

于 2011-09-28T23:32:13.567 に答える