SDHC控制器代码移植日记四(SD_DATA_SERIAL_HOST)
0赞5. SD_DATA_SERIAL_HOST模块
5.1 接口连接图
图8
5.2 接口定义与说明
//系统信号
input sd_clk; //时钟信号
input rst; //复位信号
//与SD_FIFO_TX_FILLER模块接口
input [31:0] data_in; //FIFO输入的数据
output reg rd; //FIFO读使能
//与SD_FIFO_RX_FILLER模块接口
output reg [`SD_BUS_W-1:0] data_out; //输出数据到FIFO
output reg we; //FIFO写使能
//SD卡物理层DAT接口
output reg DAT_oe_o; //SD卡DAT总线数据方向控制
output reg[`SD_BUS_W-1:0] DAT_dat_o; //SD卡DAT总线数据输出
input [`SD_BUS_W-1:0] DAT_dat_i; //SD卡DAT总线数据输入
//连接到SD_CMD_SERIAL_HOST模块
input [1:0] start_dat; //启动数据传输:01--启动块读;10--启动块写;11--停止
//与SD_DATA_MASTER模块接口
input ack_transfer; //transm_complete的响应
output reg busy_n; //数据总线忙标志,低电平有效
output reg transm_complete; //传输完成标志位
output reg crc_ok; //CRC校验和OK
5.3 模块功能描述
该模块是FPGA与SD卡物理数据管脚的接口控制模块。外部接口由时钟信号clk和双向数据信号DAT组成。数据信号包括DAT_oe_o,DAT_dat_o和DAT_dat_i三个信号,输出前需要再做一些简单的处理。
该模块实现以下两个功能:
1、同步读、写数据请求;
2、为发送数据添加CRC-16校验和,并检查接收命令的CRC-16是否正确。
data_in信号来自Tx_FIFO,data_out是需要送往Rx_FIFO的数据。we和rd信号用于控制FIFO的读写。busy_n信号在该 模块状态机处于idle时置高,否则拉低表示处于忙状态。当一次传输(块读或块写操作)完成,该模块置位transm_complete,在此期间 crc_ok和busy_n信号保持不变,直到接收ack_transfer有效,然后拉低transm_complete。
5.4 状态机工作图
图9