SDCard の不調

開発をしている機材で動作がおかしいメモリーカードがたまにあります. 公開当初はこちらの実装が悪いので修正というのが多かったのですが、最近2例メモリーカードの方が悪いというのがありましたので掲載いたします.

注意

記載での使用モードは SPI mode での確認です. 各カードは1枚ずつの確認のため同じ型番のものがすべて該当するかは不明です.

CMD12 の規格違反, AUSDX64GUICL10-RA1

CMD12 (STOP_TRANSMISSION) は CMD18 (READ_MULTIPLE_BLOCK) 発行後に停止するコマンドです. このコマンドの後に R1b response がくるはずですが、このカードはそれがきません. R1b response を無視すれば意図通りには動くのですが本当のエラーの時の対処ができないので無視の処理はいれてありません.

異様に遅い data packet, SP064GBSTXBU1V20BS

CMD18 発行後、 data packet 単位にデータがきて、 data packet の区切りには待ち時間がいくつかあります.その時間や読み捨てるデータのために CDDA 再生には fifo をもうけてあります. そしてこのカードは CDDA 再生途中に fifo が空になりました.
調べたところ特定のセクタで次の data packet がくるのに 50 ms もかかりました. fifo の深さを 16 倍にすればこの遅さに耐えられますがいままでこのような不具合はみたことがなくカードの不備と判断いたしました.

これは seek 時間ではなく単なるシーケンシャルアクセスです. よくアクセス速度にかかれる UHS-1 とか CLASS 10 とかは SPI mode なので関係ないです. それと比べてとても遅いであろう MMC でもこのようなことは起きませんでした. もちろん CDDA 再生としては MMC でも十分に早くこのような問題はありません.