Fat32Reader
FAT32 リーダ v2 (docs/tfcard.md「FAT32 リーダ仕様」)
TfCtrl (v1) のブロックリードを下位に使い,8.3 名で指定されたファイルを ルートディレクトリから探して内容を stream_if で送出する.リード専用.
- MBR パーティション 1 (タイプ 0Bh/0Ch) と,スーパーフロッピー形式 (セクタ 0 が JMP + BytsPerSec=512 の BPB) の両方に対応
- 8.3 名 11 バイト照合.要求名の
'?'(3Fh) は任意 1 文字に一致 - LFN (属性 0Fh)・削除済み (E5h)・ボリュームラベル・サブディレクトリはスキップ, 先頭バイト 00h で列挙終端
- オフセット起点はクラスタチェーン追跡とセクタ内バイト破棄で実現し, 範囲外セクタの CMD17 は発行しない
- FAT 参照はクラスタ遷移毎に該当 FAT セクタを 1 ブロックリードする (キャッシュなし)
- マウント (MBR/BPB 解釈) は初回要求時に行い,以降の要求で再利用する
注意: 下位 TfCtrl の初期化失敗時は要求が受理されない (ブロック要求が 受け付けられないため停止する).利用側は TfCtrl の o_init_err を確認すること.
Ports
| i_clk | input | clock | クロック |
|---|---|---|---|
| i_rst | input | reset | リセット |
| i_req_valid | input | logic | ファイル読み出し要求 |
| i_req_name | input | logic<88> | 8.3 名 11 バイト ([87:80] が先頭文字,'?'=任意) |
| i_req_offset | input | logic<32> | 開始バイトオフセット |
| i_req_len | input | logic<32> | 読み出しバイト数 (ファイル末尾で打ち切り) |
| o_req_ready | output | logic | 要求受付可能 |
| o_done | output | logic | 完了 (1 サイクルパルス) |
| o_err | output | TfTypes FsError | 完了時のエラー種別 |
| o_file_size | output | logic<32> | 発見したファイルのサイズ (found 以降有効) |
| data | modport | stream_if source | ファイル内容 (要求範囲のみ) |
| o_blk_valid | output | logic | ブロックリード要求 |
| o_blk_lba | output | logic<32> | 要求 LBA |
| i_blk_ready | input | logic | 要求受付可能 |
| i_blk_done | input | logic | ブロック完了 (1 サイクルパルス) |
| i_blk_err | input | TfTypes Error | ブロック完了時のエラー種別 |
| blk | modport | stream_if sink | ブロックデータ (512 バイト/ブロック) |