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のパラメタ取り込み部が怪しい気がするなぁ…
ご奮闘の内容は興味深く拝見しています。
返信削除ところで、もともとのままでVS1053bからI2Sの出力は出ていますか?
いちおー、I2Sは出てるみたいですね、雑音(かすかな音)が聴こえました。USB-AUDIO基板でBuffaloIIにI2S送った時のような感じでした。
返信削除SDは…単純な話かとおもったら、各社各様にやってるみたいで…これにちゃんと対応できてるコンシューマな世界は凄いなぁ、と…
某カメラメーカーにお仕事でお付き合いをしてる時に、「SD対応が一番クレーム多いんですよ」と言われてたのが今更ながらによくわかります。メーカー毎にこんなに方言があるとわ…