2010-09-12

KINGMAX MicroSD の罠

Arduino+Music Shield で KINGMAX の microSD 2GB を読ませようとしたら、うまくいかない…
他のSDでは平気なのに…

ソースコードを読んで、どこで止まってるか見てると…

MMC初期化の際にSPIに0xFFをたたき込んで、Hにした後に
MMCコマンドで0x41,0,0,0,16(SEND_OP_COND?)をたたき込み
0x95(なんだろこれ?)を撃ちこんで→CMD0用のCRCデータで、他ではダミーということらしい。
SPIが0xFFから変化するのを待つ

ってとこで止まってるのを確認。

SPDRの値が変化するか、100待つって感じだが…よくよくみてみると…

i=100;
do {
xxxxx
i--;
}while((i--)&&(xxxx)) ;

となっていて、かならず奇数値のみがwhileでチェックされる…で、iがunsignedなので、iの条件では決して脱出できないわけだ…これかなバグは…

===追記===
しかし、やっぱりMMCの初期化がうまくいってない様子。他メーカー品だと関係ないので、個別になんかやってんのかなぁ…

===追記===

どうやら…

通常のmicroSDだと
初期化(CMD0)後にCMD1を発行すると、1→1→0とかなって初期化完了で使えるようになるんですが

KINGMAXのmicroSDだと
初期化(CMD0)後にCMD1を発行しても、ずーっと0xffのまま。
レスポンスは先頭1ビットが0になるはずなんですが、レスポンスすら帰ってきていないという現実。
ACMD41ぢゃないとダメなのかなぁ?

===追記===

試しに、0xFFを送って帰り値を確認しているところで0x80を送って、帰り値を調べてみたところ

0xFF->0xFF->0xFE->0x03 を繰り返していることが判明。

0xFEの意味がよーわからんが、もしかして1ビットずれてる?

で 0xFF->0xFF->0x05 となっている、つまりACMD41をコマンドで送ってこい、といっている、のかな?


===追記の追記===
Music Sheildのコードは色々弄るには面倒だったので、全面書き換え(笑)
その過程で、反面。cmd8 発行したら、うまく動く1GBのmicroSDはまるっきり反応なし(0xFFのみ)だったのに対し、KINGMAXのは0x01が返答されてきています。SDHC対応のコードが必要になりそ…


===追記の追記===
SDHC用とSD用の設定をまぜこぜにして、どっち挿しても初期化成功するところまでは到達…
でも、次のコマンドでレスポンス0x00出てから、読み出しかけてもデータが読めない…なんぢゃそりゃ…

===ここまできた===
CMD58で読みだしてみたら、両方とも 0x80 0xff 0x80 0x00 ってことで…どっちもSDと…でも KINGMAX の方は、SDHC的な初期化しか効かないといふ…なんぢゃそりゃー…ちかれた…

===ついで===
SDHC16GBのカードもこりゃいけるかしら、ってんで突っ込んでみたら…
ACMD41突っ込むと、0x77の方は一回0x01が出たものの、0x69リトライになって、再度0x77いってももう0x01が出ない…
別のカードは、毎回0x01が返ってくるみたいだったが…ここらは物によって変える必要があるのかしら?

===罠は続くよ===
デバッグコードのおかげでwaitが発生してたおかげで正常に初期化でてたくさい…デバッグコードを取り除いた途端…まぁ、ループ回数を適時増やすなりdelay入れるなりすればいいんですが、面倒なので、デバッグコードを戻しておく…

とおもったら、今度はFLACの再生が途切れ途切れに…セクターかブロック読み出しか、その付近の問題だとは思いますが…他には手を入れてない筈なんだが…いらんもの削ったかしら…
確かにコードサイズは拡大しているので、そのせいでメモリ上へのマッピングが、って話はあるかもしれんが…

ともあれ、KINGMAXでも、そのほかでも、とりあえず突っ込めば音は出るようになったので、そこそこ進歩…あとは、普通に鳴るように調整しなおせば…かな…SDのパラメタ取り込み部が怪しい気がするなぁ…

2 件のコメント:

bunpei さんのコメント...

ご奮闘の内容は興味深く拝見しています。
ところで、もともとのままでVS1053bからI2Sの出力は出ていますか?

Hiyohiyo さんのコメント...

いちおー、I2Sは出てるみたいですね、雑音(かすかな音)が聴こえました。USB-AUDIO基板でBuffaloIIにI2S送った時のような感じでした。

SDは…単純な話かとおもったら、各社各様にやってるみたいで…これにちゃんと対応できてるコンシューマな世界は凄いなぁ、と…
某カメラメーカーにお仕事でお付き合いをしてる時に、「SD対応が一番クレーム多いんですよ」と言われてたのが今更ながらによくわかります。メーカー毎にこんなに方言があるとわ…