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

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

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

はじめに

SDカードのSPIモード通信の読み書き詳細の
「CMD24(WRITE_BLOCK)による書き込み」
について。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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カードのSPIモード通信の読み書き詳細

フクさん
フクさん

じゃ、今回は
「CMD24(WRITE_BLOCK)による書き込み」
について。

  • CMD24(WRITE_BLOCK)による書き込み ← これ
  • ACMD23(SET_WR_BLK_ERASE_COUNT)による消去ブロック数指定
  • CMD25(WRITE_MULTIPLE_BLOCK)による書き込み
  • Start Block/data Response/STOP_TRAN tokenの発行
  • CMD17(READ_SINGLE_BLOCK)による読み出し
  • CMD18(READ_MULTIPLE_BLOCK)による読み出し
  • CMD12(STOP_TRANSMISSION)による停止

CMD24(WRITE_BLOCK)のリクエスト

太郎くん
太郎くん

まずはCMD24(WRITE_BLOCK)のリクエストパラメータだね。

フクさん
フクさん

パラメータとしては32bitの”data address”が入るだけ。

太郎くん
太郎くん

その”data address”は何を指すの?

フクさん
フクさん

名前のまんまで、書き込みたいアドレスを指定する。
ちなみに、ソフトウェアで使用するROM/RAMのアドレスは1byte単位であることがほとんどだけど、
SDカードはBlock Length単位になる。
まぁ512byte単位と思っておけば良いかな。

太郎くん
太郎くん

ということは
512 × 0xffffffff = 2,199,023,255,040
までの範囲でアクセスできるってことか。

フクさん
フクさん

そうそう。
SDHCの上限である2TBはここからきている。

太郎くん
太郎くん

そういえば、そういう上限があったねー!

CMD24(WRITE_BLOCK)のレスポンス

太郎くん
太郎くん

次はCMD24(WRITE_BLOCK)のレスポンスかな?

フクさん
フクさん

CMD24(WRITE_BLOCK)のレスポンスはR1フォーマットになる。

SDカードSPIモードR1フォーマット
太郎くん
太郎くん

これを見てエラーハンドリングをすればOKって感じだね。

太郎くん
太郎くん

うーん、これだけならすごくシンプルなんだけどねー。

フクさん
フクさん

そうね。
Single Blockだけなら恐ろしくシンプル。

太郎くん
太郎くん

まぁ効率面も必要だからシンプルなだけじゃどうにもならないんだろうねー。

まとめ

フクさん
フクさん

まとめだよ。

  • CMD24(WRITE_BLOCK)による書き込みについて説明。
  • CMD24(WRITE_BLOCK)のリクエストパラメータは32bitのdata addressが付く。
    • 1block512byteとすると2TBが上限。
  • CMD24(WRITE_BLOCK)のレスポンスはR1フォーマット。

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

コメント

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