2011年10月04日

SDカード読み出し部の設計(3)

 SDの読み出しの続き。

7)物理セクタ0の読み出して、オフセット値を読み出す。
7−1)CMD17 を送信する。
 → CMD17 は、ブロック読み出しのコマンドで、"0x51" "0x00" "0x00" "0x00" "0x00" "0x00"
   "0x51" に続く4バイトは、読み出しアドレスになります。物理セクタ0(=アドレス0)なので、ALL0を指定。

7−2)SD_DI にデータが来るのを待つ(0xFF 以外の値)。
 → CMD17 に対するレスポンスは、R1
   R1 が 0x00 以外の場合はエラー処理。

7−3)SD_DI にデータが来るのを待つ(0xFF 以外の値)。
 → R1 を受信したちょっと後に、データが送信されてくる。

   受信したデータを先頭からD[0]、D[1]、・・・、とすると

   D[0]     :0xFE(先頭の目印)、もしくはエラーがあった場合に、エラートークン
   D[1]〜D[512] :読み出しデータ
   D[513]、D[514]:CRCデータ(CRC-16)

   エラートークンは、次の通り。

   bit7-5:0固定
   bit4 :カードがロックされている
   bit3 :範囲外
   bit2 :ECC 訂正が出来なかった
   bit1 :カードコントローラのエラー
   bit0 :1固定


   CRCのチェックをしてもいいのだが、面倒なのでチェックしないことにする。

   オフセット値は、D[454]〜D[457] の32ビットで、D[457] が最上位。

7−4)データ受信後、SD_CS ="L" 、SD_DO ="H"、のままで、1バイト分クロックを送信する。
 → これでCMD17 が終了。

 データの読み出し手順に関しては、アドレスの変更のみなので、以下は省略。


8)論理セクタ0の読み出す。
8−1)論理セクタの位置を計算する。
 → (セクタ番号+オフセット値)×512 が物理アドレスらしい。



posted by えすび at 22:24| Comment(0) | FPGA化:SDカード | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。