特权同学

SDHC控制器代码移植日记四(SD_DATA_SERIAL_HOST)

0
阅读(1782) 评论(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