SignalTapIIでデバッグしていましたが、サンプリング数の関係でキャプチャできるレンジが限られコマンド/レスポンス後のデータリード開始までキャプチャすることができません。
これもあり、送受信はできているのにリードデータが出てこないように見えて、その解析に時間がかかってしまいました。
SDCLKを20MHzとしていましたが、これでは速すぎるのかと5.5MHzに落としてみましたが変わらずで何が何やら...
そこで、以前購入して未使用のままであった、ロジアナ Zeroplusを持ち出して解析し、ようやく原因がわかりました。
1つ目は最初使用していたSDカード(Silicon Power MicoroSD 2GB)の場合、'0'ばかりを出力していたこと(何故kかは未解析、単に最初の512Byteのwaveデータがall'0'の可能性も)。これは他のSDカードに変更するとデータが変化するようになりました。
2つ目は、データの読出しを4096クロック目でクロックを停止してしまっていたことで、CRC16を含め4112クロックは必要であったため、リードデータの読出しが完了せぬまま次のサイクルに進んでしまっていたこと。
3つ目は、コマンドのCRC7演算回路のリセット条件を誤っていて、リセットがかからず前回CRC演算値のまま演算を再開していたこと。
以上を対策して一応連続動作をするようになりました。
コマンド(CMD17)・レスポンスの送受信波形(SignalTapII)
Transcend SDHC 8GB SD_CLK 5.5MHz Sampling Clock 25MHz Total Access Time 1020μs(T-B) Data Read Access Time 732μs(A-B) |
コマンド(CMD17)・レスポンス・Readデータの送受信波形(Zeloplus)
コマンド(CMD17)・レスポンス・Readデータ処理を全ハード化した場合のアクセス時間は、上図のとおり5.5MHzクロック時で焼く1000μsとなります。データ転送時間自体は740μsで、SD_CLKの周波数を上げれば比例的に短縮されるはずですが、コマンドを出力してからReadDataが出てくるまで250μsかかっています。これは、SD_CLKを速くしてもあまり変わらないのではないかと推測します。
SDメモリカードプレイヤー機能の実装10の表にあるように24bit/192kHzでサイクルタイム444μsが必要ですから、SD_CLKを20MHzにすれば24bit/192kHzまでは少なくとも達成できそうです。
Transcend SDHC 8GB SD_CLK 5.5MHz Sampling Clock 1MHz Access Cycle Time 3880μs(A-D) Soft処理時間 2874μs(C-D) Data Read Access Time 740μs(B-C) |
コマンド・レスポンス・データリードハード化時のCMD17リード処理周期(Zeloplus)
Transcend SDHC 8GB SD_CLK ソフト生成 Sampling Clock 50kHz Access Cycle Time 215ms(A-D) Soft処理時間 45ms(C-D) Data Read Access Time 157ms(B-C) |
全ソフト処理(ハードアシストなし時)のCMD17リード処理周期(Zeloplus)
上の2つは、ハード化時とハードアシストなしの全ソフト処理時のアクセス周期になります。ぱっと見は、大きく違わないように見えるかもしれませんが、ロジアナのサンプリング周波数が、1MHzと50kHzで20倍違います。
215msから4ms程度まで短縮できています。全ソフト処理の場合、SDカードから読み取ったデータをさらにmemcopyで転送していますのでソフト処理時間も余計にかかっています。
Silicon Power MicroSD 2GB SD_CLK 5.5MHz Sampling Clock 10MHz Total Access Time 1380μs(T-B) Data Read Access Time 724μs(A-B) |
コマンド(CMD17)・レスポンス・Readデータの送受信波形 Silicon Power MicroSD 2GB
Transcend MiniSD 2GB SD_CLK 5.5MHz Sampling Clock 25MHz Total Access Time 1075μs(T-B) Data Read Access Time 732μs(A-B) |
コマンド(CMD17)・レスポンス・Readデータの送受信波形 Transcend MiniSD 2GB
最後の2つは、別のSDカードのアクセス波形です。
上側は、リードデータがall'0'となっていたSilicon Power MicroSD 2GBで、リードデータが出るまでが、8GSDHCに対し300μs以上遅いことがわかります。Transcend MiniSD 2GBのほうはあまり大きな差はありません。
ちなみにZeloplusには、SD2.0/SDIOのプロトコルをサポートしているので、ラッキーと思ったのですが、残念ならが上位機種のみしか使えなかった orz
0 件のコメント:
コメントを投稿