• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SDカードの初期化について)

SDカードの初期化について

このQ&Aのポイント
  • SDカード初期化の問題についての質問です。Cortex-M3のマイコンのSPIを使用してSDカードのデータを読むファームを作成していますが、初期化時に問題が発生しています。
  • マイコンのUARTでデバイスのサイズを表示させているのですが、512MBと2GBのSDカードのサイズが正しく表示されません。また、初期化ルーチンを変更した際にACMD41のレスポンスが異常で0x05が返ってきます。
  • 初期化時のクロックと電源に問題はなく、ACMD41のレスポンスが正しい0x00ではなく0x05が返ってくる原因を教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#159916
noname#159916
回答No.4

ANo.1,2 です。 コマンドとレスポンスの表は2つあり、ACMD41 のレスポンスは 一方は R1 、他方は R3 となっていました。 No.1補足欄のURL先の記事ではレスポンスは1バイトなので、 多分 R1 をチェックしてるのだろうと思いました。 回答 No.1 では R1 の Bit0 は、 "In Idle State"とだけ触れましたが、 あの図の手前の bit 説明文に "・In idle state—The card is in idle state and running initializing process." とあります。 イニシャライズ中は"1"、イニシャライズ完了すると"0"になるようなので、これを待つ、 ということかと思われます。 また、これを待つ際に何をするかというと、 SDカードに関するWebページはたくさんありましたが、 "ACMD41 を繰り返し書き込む"とか "0x00になるまでCMD55 と ACMD41 の両方を書き込む"とか 内容が多少違うのが気になります。

man_u
質問者

お礼

ありがとうございます。 初期化できました!!! 参考にしたURLをよくみたら ACMD41のレスポンスで0x01が返ってきたら CMD55送信から繰り返す、と書いてました。 ほんとに助かりました。 ただ、初期化できましたが、SDHCを挿すと エラーで返ってきます > < あとは地道にデバッグするしかなさそうです。 とりあえず先に進めるのでほんとに助かりました。

man_u
質問者

補足

ありがとうございます。 ACMD41のレスポンスを判定し、0x00以外なら再度ACMD41を再送 というのはやっています。 それを50,000回繰り返してもレスポンスは0x05のままです。 ちなみに、デバッガで追いかけて気付いたのですが、 最初の1回目のレスポンスが0x01で2回目以降が全て0x05で返ってきます。 『0x00になるまでCMD55とACMD41を繰り返す』 ってのはやってないので(ACMD41のみの再送をひたすら繰り返してました) これはちょっと期待できそうな・・・ CMD55とACMD41ってセットみたいなもん?みたいですもんね。 試してみます。

その他の回答 (4)

  • goma1109
  • ベストアンサー率0% (0/2)
回答No.5

ANo4を書いたgoma1109です。 >コマンドとレスポンスの表は2つあり、ACMD41 のレスポンスは >一方は R1 、他方は R3 となっていました。 すいません。 SPIモードのことを失念していました。 SPIモードではR1,バスモードではR3ですね。 >"ACMD41 を繰り返し書き込む"とか >?"0x00になるまでCMD55 と ACMD41 の両方を書き込む"とか ACMDxxの”A”は2バイトコマンドの意味で、CMD55を先に発行するということを暗に含んでいるので、同じことを言っているような気がします。 また、SDカードによっては、時間待ちの長さだけではなく、必ずACMD41が2回必要なものがあったことを思い出しました。

man_u
質問者

お礼

ありがとうございます。 "A"は2バイトコマンドの意味・・・でした^ ^ ACMD41が必ず2回必要なものもあるんですね!? メーカーによる差異でなんですかね? こちらも色々試してみます。 助かりました。

man_u
質問者

補足

ありがとうございます。 CMD55→レスポンス判定→ACMD41→レスポンス判定→ACMD41→レス→ACMD41→レス・・・ を繰り返していました。 CMD55→レス→ACMD41→レス→CMD55→レス→ACMD41→レス・・・ というふうにするというとですよね。 ACMDの"A"は2バイトの意味・・・ なんか闇が開けたような気がします! 数秒も待たないとダメなときもあるんですか!? よくわかりませんが、メーカーによる違い、容量による違い・・・ 同じSDカードでも細かなとこで色々ありそうですね。

  • goma1109
  • ベストアンサー率0% (0/2)
回答No.3

はずしているかもしれませんが。 1.ACMD41のレスポンスのタイプはR3なので、レスポンスの長さは48ビットのはずですが。 2.ACMD41のargumentは正しく与えられていますか? 3.正確なところは忘れましたが、メーカーによってはACMD41に対して、Busyではなくなるまで、秒単位の時間がかかったような記憶があります。 

noname#159916
noname#159916
回答No.2

ACMD41コマンドのレスポンスとして R1 を読む、との事で R1 の bit アサインを確認すると、 レスポンスが 0x05 という事は コマンドエラーも含んでるようです、 発行したコマンドbitパターンのどこかに異常があるかも? 参考URL 先にもあった 0x01 であれば「イニシャライズ中」 ということで合点がいきますが。 とても全体を把握しきれないので、 見方を間違ってたらすみません。

man_u
質問者

補足

ありがとうございます。 そういえばレスポンスのビット調べたら何のエラーか 書いてたな・・・ というのを昨日風呂に入ってる時に思い出しましたf^_^;; コマンドエラーなんですね。 もう少し調べてみます。

noname#159916
noname#159916
回答No.1

詳しくないですが。 ACMD41 はBUSYチェックが必要なようですが大丈夫ですか? SD ACMD41 レスポンス で検索すると関係ありそうな記事が見付かるかも。 http://www.google.co.jp/search?hl=ja&q=SD+ACMD41+%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9+&lr=&aq=f&aqi=&aql=&oq=&gs_rfai= ヒット例 http://www.cqpub.co.jp/hanbai/books/49/49981/49981_7syo.pdf

man_u
質問者

補足

ありがとうございます。 下記のURLを参考にしています。 http://bitcraft.web.fc2.com/embedded/sdcard/sh7144spi.html 『SDHCを含むSDカードの初期化』 というところです。 『SD ACMD41 レスポンス』で検索はしているのですが・・・

関連するQ&A