※ ChatGPTを利用し、要約された質問です(原文:SDカードの初期化について)
SDカードの初期化について
このQ&Aのポイント
SDカード初期化の問題についての質問です。Cortex-M3のマイコンのSPIを使用してSDカードのデータを読むファームを作成していますが、初期化時に問題が発生しています。
マイコンのUARTでデバイスのサイズを表示させているのですが、512MBと2GBのSDカードのサイズが正しく表示されません。また、初期化ルーチンを変更した際にACMD41のレスポンスが異常で0x05が返ってきます。
初期化時のクロックと電源に問題はなく、ACMD41のレスポンスが正しい0x00ではなく0x05が返ってくる原因を教えていただきたいです。
CPU Cortex-M3のマイコンのSPIでSDカードのデータを読むファームを
作成しています。
SDカードの初期化について教えて下さい。
CMD0→CMD1という初期化をするとデータはキッチリ読めます。
ただ、デバイスサイズのリードが少し変です。
UARTでデバイスのサイズを表示させているのですが、
128MB,512MB,1GB,2GBの4種のSDカードで試してみたところ
128BMと1GBはちゃんとサイズ通りなんですが、512MBと2GBのサイズが
変です。(512MB→123MB 2GB→495MBと意味不明なサイズを読みます)
CSDを表示させて計算してもやはり変です。
そこで、とりあえず上記は置いてSDHCにも対応したいということで
初期化ルーチンを変更しました。
ウェブ上で検索して下記のような初期化を組んでみました。
CMD0→CMD8→CMD58→CMD55→ACMD41→・・・
というような流れのものですが、
CMD55まではレスポンスも問題なく返ってきますが、
ACMD41のレスポンスが異常です。
0x00が返ってくるのが正解みたいですが、なぜか0x05が返ってきます。
何回繰り返しても変わりません。
考えられる原因をご教授いただけるとありがたいです。
ちなみに初期化時のクロックは394kHz
電源も波形で確認しましたが問題ありません。
よろしくお願いします。
お礼
ありがとうございます。 初期化できました!!! 参考にしたURLをよくみたら ACMD41のレスポンスで0x01が返ってきたら CMD55送信から繰り返す、と書いてました。 ほんとに助かりました。 ただ、初期化できましたが、SDHCを挿すと エラーで返ってきます > < あとは地道にデバッグするしかなさそうです。 とりあえず先に進めるのでほんとに助かりました。
補足
ありがとうございます。 ACMD41のレスポンスを判定し、0x00以外なら再度ACMD41を再送 というのはやっています。 それを50,000回繰り返してもレスポンスは0x05のままです。 ちなみに、デバッガで追いかけて気付いたのですが、 最初の1回目のレスポンスが0x01で2回目以降が全て0x05で返ってきます。 『0x00になるまでCMD55とACMD41を繰り返す』 ってのはやってないので(ACMD41のみの再送をひたすら繰り返してました) これはちょっと期待できそうな・・・ CMD55とACMD41ってセットみたいなもん?みたいですもんね。 試してみます。