しばらくの間、 LPC1766 SPIペリフェラルを使用して SD カード インターフェイスを作成しようとしましたが、現在、どこにも答えが見つからないという問題に行き詰まっています。
問題は、SDHC カードが書き込みコマンドと読み取りコマンドに期待どおりに応答しないことです。
Chan のフローチャートと NXP アプリケーション ノートに基づいた初期化では、すべて正常に動作します。カードのバージョンを区別し、OCR、CID、CSD を読み取り、それらのサイズを判断できます。
そのステップの後、1 秒ごとに単一のブロックを書き始め、それを読み戻してデータの整合性をチェックします。Kingston SDHC 4 GB クラス 4 カードでは、最初の書き込みコマンドを送信できますが、2 番目のコマンドでは、カードは CMD24 に (0x00 または 0x01) 応答しません。SanDisk 4 GB クラス 4 カードの場合、結果は異なります。カードはすべてのコマンドに応答しますが、データを読み戻すとゼロしか返されません (ゼロを書き込んでいないことは確かです)。SDSC カードを使用すると、すべて正常に動作します。
SDHC はバイト アドレスではなくブロック アドレスであり、SDHC の場合は CCS をオンにして ACMD41 を送信する必要があることを認識しています。CRC チェックをオンにしたばかりで、すべてのカードがコマンドとデータを受け入れているため、クロック周波数が問題ではないこともわかっています (開始に 400 KHz を使用し、次に書き込み/読み取りに 20 MHz を使用)。CRC の計算を停止すると、すべてのカードがコマンドとデータを拒否します。