【FileSystem】車載外部ストレージ その49【SD読み書きSDモード①】

【FileSystem】車載外部ストレージ その49【SD読み書きSDモード①】 車載外部ストレージ

バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-external-storage-backnumber/

はじめに

SDカードのSDモード通信の読み書きの話。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

SDカードのSDモード通信の読み書き

太郎くん
太郎くん

今回からSDモードでの読み書きだけど、
基本的には一緒なのかな?

フクさん
フクさん

そうだねー。
ぶっちゃけると流れは一緒なんだよねー。

太郎くん
太郎くん

違いだけいうとどうなるの?

フクさん
フクさん

まずtokenが無いね。
SPIモードの時は
Start Block/data Response/STOP_TRAN token
があったと思うけど、
SDモードの時はない。

フクさん
フクさん

あとは、Transfer State(tran)に遷移してないと読み書きできないんで、
CMD13(SEND_STATUS/SEND_TASK_STATUS)でCARD_STATUSを読み出して、Transfer State(tran)に居ることを確認するくらいかな。

大雑把に読み書き説明

太郎くん
太郎くん

だったら、CMD13に特化した説明で終了ってのでもOK?

フクさん
フクさん

そうだね。
SDモードでR1フォーマットのデータ長がSPIと異なるとかはあるが、
SDモードに於いてのR1フォーマットは以前やってるし。

太郎くん
太郎くん

たしかにここでやった。

太郎くん
太郎くん

SDモードでのR1フォーマットはこれだね。

Bit position4746[45:40][39:8][7:1]0
Width(bit)1163271
Value‘0’‘0’xxx‘1’
Descriptionstart bittransmission bitcommand indexcard statusCRC7end bit
フクさん
フクさん

というわけで、改めてSDモードの話をするってのも似たような話になる。
まぁ復習も兼ねて手順を書いておこう。
Multi Block Writeにちょっと差分があるかな。

Single Block Writeの場合

①CMD24(WRITE_BLOCK)による書き込み

Multi Block Writeの場合

①ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定
②CMD25(WRITE_MULTIPLE_BLOCK)による書き込み
③CMD12(STOP_TRANSMISSION)による停止 ← STOP_TRAN tokenの代わりにCMD12を発行

Single Block Readの場合

①CMD17(READ_SINGLE_BLOCK)による読み出し

Multi Block Readの場合

①CMD18(READ_MULTIPLE_BLOCK)による読み出し
②CMD12(STOP_TRANSMISSION)による停止

太郎くん
太郎くん

リクエストパラメータとかも一緒なのかな?

フクさん
フクさん

いっしょだね。

太郎くん
太郎くん

じゃー解決だ!

CMD13(SEND_STATUS/SEND_TASK_STATUS)にまつわる話

フクさん
フクさん

おおよその流れが解決したところで大きな差分である、
CMD13(SEND_STATUS/SEND_TASK_STATUS)特化で話してしまおう。
実際、CMD13(SEND_STATUS/SEND_TASK_STATUS)の説明に伴って、特殊なコマンドの説明もすることになるだろうし、それなりの話にはなると思う。

太郎くん
太郎くん

(まじか・・・。シンプルに終わらせようとしていたところに、なぜこのフクロウは話をややこしい方へ持っていくんだ・・・。)

フクさん
フクさん

というわけで
次回はCMD13(SEND_STATUS/SEND_TASK_STATUS)の話で。

まとめ

フクさん
フクさん

まとめだよ。

  • SDモードの読み書きはSPIモードの手順とほぼ一緒。
    • 差分はtokenが無い点。
    • STOP_TRAN tokenの代わりにCMD12(STOP_TRANSMISSION)を発行する。
  • SDモードの読み書きの場合、Transfer State(tran)が重要なのでCMD13(SEND_STATUS/SEND_TASK_STATUS)で状態確認を行う。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました