Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

TfCtrl

TF カードブロック入出力コントローラ v2 (docs/tfcard.md「プロトコル仕様」)

リセット後に自動で初期化シーケンス (CMD0 → CMD8 → CMD55/ACMD41 ポーリング → CMD58) を実行し,完了後は要求 IF (valid/ready + LBA + write) で CMD17 単発リード / CMD24 単発ライトを受け付ける. 512 バイトを stream_if でやりとりし,CRC16 を検査 (リード) または 付与 (ライト) して完了時にエラー種別を報告する.

  • 発行コマンドは CMD0/CMD8/CMD55/ACMD41/CMD58/CMD17/CMD24 のみ. erase 系・マルチブロック系は FSM 上存在しない
  • ライトは「トークン 0xFE → 512 バイト → CRC16 → データ応答 → ビジー解除待ち」 の順に進む.データ応答は下位 5 bit で判定する (00101 = 受理,01011 = CRC 不一致,01101 = 書き込みエラー)
  • バッファレス: データバイトは 1 バイトごとに stream の handshake を待ち, その間 SCK を停止する (SPI はマスタペースのため合法).BSRAM 面バッファは 不要 (docs/tfcard.md「インタフェース」)
  • CCS=0 (バイトアドレッシング旧世代) は初期化時に unsupported として拒否する
  • CRC 不一致はデータストリーム後の完了報告で通知する (リトライは利用側判断)

初期化失敗時は o_init_done が立たず o_init_err に種別が残る (復帰はリセット).

Parameters


InitDivider u32 初期化クロック分周比 (337.5 kHz)
FastDivider u32 データ転送クロック分周比 (13.5 MHz)
PowerUpBytes u32 電源投入クロック供給のバイト数 (74 クロック以上 → 10 バイト = 80 クロック)
NcrMaxBytes u32 R1 応答待ちの上限バイト数 (NCR)
Acmd41MaxPolls u32 ACMD41 ポーリング上限回数 (337.5 kHz で約 1.2 s 相当)
TokenMaxBytes u32 データトークン待ちの上限バイト数 (13.5 MHz で約 155 ms 相当)
WriteBusyMaxBytes u32 CMD24 書き込み busy 待ちの上限 (13.5 MHz で約 267 ms 相当)

Ports


i_clk input clock クロック (27 MHz)
i_rst input reset リセット
i_req_valid input logic ブロック入出力要求
i_req_lba input logic<32> 論理ブロックアドレス
i_req_write input logic 1 でブロックライト (CMD24)
o_req_ready output logic 要求受付可能
o_init_done output logic 初期化完了
o_init_err output TfTypes Error 初期化エラー (失敗時に latch)
o_done output logic ブロック入出力完了 (1 サイクルパルス)
o_err output TfTypes Error 完了時のエラー種別 (o_done で有効)
data modport stream_if source リードデータ (512 バイト/ブロック)
i_wr_valid input logic ライトデータ有効
i_wr_data input logic<8> ライトデータ
o_wr_ready output logic ライトデータ受付 (1 サイクル)
o_sclk output logic TF SCK
o_mosi output logic TF MOSI
o_cs_n output logic TF CS#
i_miso input logic TF MISO