FPGA——SD卡控制器2

本文详细介绍了在SPI模式下如何控制SD卡,包括初始化步骤、写数据和读数据的过程。首先,介绍SPI接口的基本概念,然后通过发送CMD0进入IDLE状态,并通过CMD8查询SD卡版本。在接收到正确的响应后,继续执行CMD55和ACMD41命令以完成SD卡的初始化。最后,简要提到了SD卡的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SPI模式下SD卡控制器

SPI模式

SPI:串行外围设备接口,是一种高速、全双工、同步的数据总线。在芯片管脚上只占有4根线。
在这里插入图片描述

SD卡 初始化

1.初始化供电电压:上电后,经过至少74个clk
2.发送CMD0:进入IDLE状态
3.等待sd卡返回响应(R1):sd卡响应后,判断响应数据。
如果返回信号为8’h01,在接收返回信息期间sd_cs=0,此时sd卡进入SPI模式,进行下一步;
否则回到第2步,等待返回响应时间不能太长(T= 100ms),超过该时间,返回初始状态
4.发送CMD8:查询sd卡版本,只有sd2.0版本的卡(SDHC卡)才支持此命令
5. 等待sd卡返回响应(R7):sd卡响应后,判断响应数据。
如果返回信号为4’b0001,说明此卡为sd2.0版本,进行下一步; 否则,重新执行第4步。
6. 发送CMD55:告诉sd卡下一次发送的命令是应用相关命令
7. 等待sd卡返回响应(R1),sd卡响应后ÿ

FPGA读写SDVerilog设计逻辑Quartus工程源码文件,FPGA型号Cyclone4E系列中的EP4CE10F17C8,Quartus版本18.0。 module top_sd_rw( input sys_clk , //系统时钟 input sys_rst_n , //系统复位,低平有效 //SD接口 input sd_miso , //SDSPI串行输入数据信号 output sd_clk , //SDSPI时钟信号 output sd_cs , //SDSPI片选信号 output sd_mosi , //SDSPI串行输出数据信号 //LED output [3:0] led //LED灯 ); //wire define wire clk_ref ; wire clk_ref_180deg ; wire rst_n ; wire locked ; wire wr_start_en ; //开始写SD数据信号 wire [31:0] wr_sec_addr ; //写数据扇区地址 wire [15:0] wr_data ; //写数据 wire rd_start_en ; //开始写SD数据信号 wire [31:0] rd_sec_addr ; //读数据扇区地址 wire error_flag ; //SD读写错误的标志 wire wr_busy ; //写数据忙信号 wire wr_req ; //写数据请求信号 wire rd_busy ; //读忙信号 wire rd_val_en ; //数据读取有效使能信号 wire [15:0] rd_val_data ; //读数据 wire sd_init_done ; //SD初始化完成信号 //***************************************************** //** main code //***************************************************** assign rst_n = sys_rst_n & locked; //锁相环 pll_clk u_pll_clk( .areset (1'b0 ), .inclk0 (sys_clk ), .c0 (clk_ref ), .c1 (clk_ref_180deg), .locked (locked ) ); //产生SD测试数据 data_gen u_data_gen( .clk (clk_ref), .rst_n (rst_n), .sd_init_done (sd_init_done), .wr_busy (wr_busy), .wr_req (wr_req), .wr_start_en (wr_start_en), .wr_sec_addr (wr_sec_addr), .wr_data (wr_data), .rd_val_en (rd_val_en), .rd_val_da
FPGA 读写SD音乐播放例程Verilog逻辑源码Quartus工程文件+文档说明,,FPGA型号Cyclone4E系列中的EP4CE6F17C8,Quartus版本17.1。 实验简介 在其他实验中我们已经完成了 SD 读写和音频模块的录音播放,本实验通过搜索 SD 中 WAV 音乐文件,然后送到音频模块播放,完成一个简单音乐播放器的功能。 2 实验原理 本实验一个关键是在没有文件系统的情况下,搜索 SD 每个扇区的内容,匹配出 WAV 文件, 这里有一个假设:假设每一个文件都是从一个扇区第一个字节开始而且文件是连续存储的,经过 大量实验,发现 FAT32 文件格式中的文件确实如此。 2.1 WAV 文件格式 大部分的文件都有文件头,WAV 也丌例外,我们通过分析 SD 一个扇区的前几个字节,判 断这个文件是否为 WAV 文件。 WAV 文件作为多媒体中使用的声波文件格式之一,它是以 RIFF 格式为标准的。RIFF 是英文 Resource Interchange File Format 的缩写,每个 WAV 文件的头四个字节便是“RIFF”,所以本实验 就简单的以每个扇区的前 4 个字节是否为“RIFF”判断该文件是否为 WAV 文件,紧接着 4 个字节 表示文件的大小,这样我们就可以确定要读取的数据量。WAV 文件头大小是 88 字节,在播放时 要把前 88 个字节的文件头去掉。 module top( input clk, input rst_n, input key1, input wm8731_bclk, //audio bit clock input wm8731_daclrc, //DAC sample rate left right clock output wm8731_dacdat, //DAC audio data output input wm8731_adclrc, //ADC sample rate left right clock input wm8731_adcdat, //ADC audio data input inout wm8731_scl, //I2C clock inout wm8731_sda, //I2C data output sd_ncs, //SD card chip select (SPI mode) output sd_dclk, //SD card clock output sd_mosi, //SD card controller data output input sd_miso, //SD card controller data input output [5:0] seg_sel, output [7:0] seg_data ); wire[9:0] lut_index; wire[31:0] lut_data; wire[3:0] state_code; wire[6:0] seg_data_0; //I2C master controller i2c_config i2c_config_m0( .rst (~rst_n ), .clk (clk ),
### FPGA实现SD通过SDIO接口进行读写控制 #### 配置SDIO控制器 为了使FPGA能成功与SD通信,在SDIO模式下,需先配置好SDIO控制器。这涉及到设置合适的时序参数以及选择恰当的传输模式来确保数据可以无误地在两者间传递[^2]。 #### 初始化过程 初始化阶段主要包含发送CMD0命令给SD使其进入准备状态;随后利用CMD8判断片版本并完成初步交流建立。对于高容量SDXC/SDHC设备,则要额外执行ACMD41指令直到返回值表明已准备好接受更多操作为止。 #### 数据路径搭建 构建用于实际数据交换的数据通路至关重要。SDIO模式支持多比特位宽的同时传送机制(如四线),极大提高了吞吐量至至少50 Mbps甚至更高水平。具体来说,`sdclk`, `sdcmd`, 及双向使用的`sddat[n]`线路共同构成了完整的物理层连接结构[^4]。 ```verilog // Verilog伪代码片段展示部分逻辑功能定义 module sdio_controller ( input wire clk, rst_n, output reg [3:0] sddat_out, input wire [3:0] sddat_in, ... ); always @(posedge clk or negedge rst_n) begin if (!rst_n) // Reset state machine and registers here... else case (state) INIT_CMD0 : /* Send CMD0 to reset the card */ ; SEND_CMD8 : /* Send CMD8 for interface condition check */; ACMD_LOOP : /* Loop sending ACMD41 until ready */; DATA_XFER : /* Manage data transfer using multiple bits on SDDAT lines */; default : /* Handle other states as necessary */ endcase end ``` #### 测试验证 一旦上述硬件描述语言(HDL)编码完毕并通过仿真工具测试之后,应当下载程序到目标开发板上去做进一步的实际运行检验。确认所有预期的功能都能正常运作,并达到宣称的速度性能指标——即不低于50 Mbps的有效带宽表现[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值