私はLPC1766SPI周辺機器を搭載したSDカードインターフェースをしばらく使っていましたが、今はどこでも答えが見つからないという問題があります。SDHC SPI書き込みの問題
問題は、SDHCカードが書き込みおよび読み取りコマンドに期待通りに応答していないことです。
ChanのフローチャートとNXPアプリケーションノートに基づいた初期化では、すべてうまく動作します。私はカードのバージョンを区別することができ、OCR、CID、CSDを読んでサイズを決定することができます。
この手順の後、私は1秒ごとに1つのブロックを書き始め、それを読み戻してデータの整合性をチェックします。カードでは、最初の書き込みコマンドを送信できますが、2番目のコマンドではカードはCMD24にも応答しません(0x00または0x01)。 SanDisk 4 4カードの場合、結果は異なりますが、すべてのコマンドはカードによって応答されますが、データを読み取るときはゼロになります(ゼロを書き込んでいないと確信しています)。 SDSCカードを使用すると、すべて正常に動作します。
私は、SDHCがブロックアドレスであり、バイトアドレスではなく、SDHC用のCCS付きACMD41を送信する必要があることを知っています。私はまた、クロックの周波数が問題ではないことを知っています(私はちょうどCRCチェックをオンにし、すべてのカードがコマンドとデータを受け入れているので、400 KHzを開始してから20 MHzを使用して書き込み/読み取りします)。 CRCの計算を停止すると、すべてのカードがコマンドとデータを拒否します。
Chanの[FatFs](http://elm-chan.org/fsw/ff/00index_e.html)を使用して、私は2Gbより大きいカードで成功しました。私はいつも働いていたカードはv2.0 SDHCではなく2048バイトブロックのSDバージョン1.01 SDSCカードであると仮定してきました。私はより高い能力を必要としなかったので、私はそれをさらに調べていません。 – Clifford
私はChanのコードを少し修正したので、powerUpsなしでSanDiskカードを正しく初期化できることを覚えています。使用したSDカードコードを表示できますか? – jeb
FIFOを使用している場合、原因がSPIドライバでもありますが、TX-Fifoを完全に満たすときにRX-Fifoがオーバーフローする可能性があることに注意してください。有効に17バイトを送信できます – jeb