• 正文
  • 相关推荐
申请入驻 产业图谱

【黑金云课堂】FPGA技术教程FPGA基础:SD卡读写实验

10小时前
122
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、实验概述

本实验基于纯 FPGA 板卡,通过 SPI 接口驱动 SD 卡,实现底层硬件与存储介质的直接交互。SD 卡作为嵌入式系统的核心存储介质,内部集成了 NAND Flash 控制器,可简化主机对存储介质的管理。本实验是音频播放、图片读取、系统日志等高级功能的基础。

核心目标

理解FPGA与SD卡的SPI硬件连接

掌握SD 2.0协议SPI模式规范

运用Verilog HDL构建SD卡SPI控制器驱动

实现SD卡指定扇区的读写操作与数据校验

二、SD卡硬件接口与SPI通信

SD卡分类

分类方式 类型
尺寸 SD卡Micro SD(TF)卡
速度等级 Class 2/4/6/10 UHS-1 U1/U3
容量 SD(≤2GB)、SDHC(≤32GB)、SDXC(≤2TB)

SPI 通信信号定义

信号 功能
SD_CLK (SCLK) FPGA提供的SPI时钟信号
SD_CD_N (CS) 片选信号,低电平有效
SD_CMD (MOSI) 主发从收数据线
SD_DAT0 (MISO) 主收从发数据线
VDD & GND 3.3V供电与信号地

硬件关键特性

FPGA IO 口外接 10K 上拉电阻至 3.3V,抑制信号噪声

采用 4 线制 SPI 通信,简化硬件布线复杂度

SPI 协议优势

硬件仅需4线连接,成本低

无复杂帧格式,便于FPGA状态机实现

通信速率可通过SCLK频率灵活适配

三、SD 2.0协议深度解析

命令响应机制

SD卡协议为命令/响应(Command/Response) 协议

所有操作由主机主动发起,从机被动响应 命令格式(48位/6字节)

字段 位数 说明
起始位 1b 固定为0
传输位 1b 固定为1
命令索引 6b 具体命令编号
参数 32b 命令参数(如地址)
CRC7 7b 校验码
结束位 1b 固定为1

代码要点:命令索引需与0x40进行“或”操作,设置正确的起始与传输位。

R1响应格式(1字节)

Bit 0:空闲状态标志(1=空闲,0=就绪)

Bit 1-7:7个错误标志位

核心判断:上电初始为0x01(空闲),初始化成功变为0x00(就绪)

SD卡初始化流程(SD 2.0)

步骤 操作 说明
1 上电延时 至少等待74个SCLK周期,确保内部电路稳定
2 片选拉低 CS置低,开启通信链路
3 发送CMD0 复位命令,预期R1=0x01
4 发送CMD8 检测电压范围,区分SD 2.0及以上版本
5 循环CMD55+ACMD41 持续发送直到R1=0x00,标志初始化完成
6 发送CMD16 设置块长度为512字节
7 片选拉高 结束初始化,进入就绪状态

单块读操作(CMD17)

步骤 操作
1 发送CMD17 + 扇区地址
2 等待R1响应=0x00
3 检测数据令牌0xFE
4 读取512字节数据
5 接收2字节CRC校验值(可忽略)

单块写操作(CMD24)

步骤 操作
1 发送CMD24 + 目标扇区地址
2 等待R1=0x00,发送数据令牌0xFE
3 发送512字节数据
4 发送2字节CRC校验值
5 等待数据响应令牌(0x05成功/0x0B失败)
6 等待内部忙信号结束(MISO恢复高电平

四、FPGA 程序设计与实现

模块架构(三层设计)

模块 功能定位
sd_card_sec_read_write 顶层控制模块,负责初始化、状态机管理、读写请求响应
sd_card_cmd 命令与数据交互核心层,构建命令、解析响应、控制读写时序
spi_master 底层物理驱动,实现SPI单字节全双工收发

双速时钟策略

阶段 频率 说明
初始化阶段 ~100kHz 确保上电复位与协议协商稳定可靠
数据传输阶段 25MHz 最大化数据吞吐效率

状态机设计

初始化状态机:CMD0 → CMD8 → CMD55+ACMD41循环 → CMD16

读写状态机:S_WAIT_READ_WRITE状态监听指令,分支处理CMD17(读)/CMD24(写) spi_master核心逻辑

检测wr_req写请求信号有效

状态机启动

在8个SPI时钟周期内完成全双工收发:逐位发送data_in至MOSI,同时从MISO采样拼接为data_out

五、实验结果与验证

逻辑分析仪波形验证要点

观测信号 验证内容
SCLK 验证初始化低频(100kHz)与数据传输高频(25MHz)的动态切换
CS 确保命令发送和数据传输全程保持低电平有效
MOSI 抓取CMD0、CMD8、ACMD41等命令波形,校验48位帧格式
MISO 分析R1响应从0x01→0x00的状态跳变

数据传输完整性校验

比对MOSI与MISO总线上的实际数据比特流

验证发送与接收数据的一致性

六、核心数据汇总

项目 说明
通信模式 SPI四线制(CS、SCLK、MOSI、MISO)
命令长度 48位(6字节)
初始化指令 CMD0、CMD8、CMD55、ACMD41、CMD16
就绪标志 R1响应=0x00
读/写指令 CMD17 / CMD24
数据块长度 512字节(默认)
数据起始令牌 0xFE
时钟策略 初始化100kHz / 传输25MHz

总结:本实验系统性地完成了从SD卡协议理解、硬件接口设计到FPGA逻辑代码实现的全流程,通过模块化设计(顶层控制+命令交互+SPI物理层)和双速时钟策略,实现了稳定可靠的SD卡扇区读写功能,为更复杂的嵌入式存储应用奠定了坚实基础。

💡 完整视频讲解可前往 ALINX 视频号进行直播回看

更多细节欢迎关注我们黑金云课堂全年免费直播课, 黑金云课堂六月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列 内容定位
Verilog开发 硬件描述语言基础、逻辑设计、仿真调试
Vitis开发 Zynq软硬件协同、外设驱动、网络协议
Linux开发 嵌入式Linux系统移植、驱动编写、应用开发

 

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

芯驿电子自 2012 年成立以来,旗下 AUMO 与 ALINX 两大品牌,在智能车载与 FPGA 行业解决方案领域持续深耕。 ALINX 聚焦 FPGA 解决方案高端产品市场,并积极参与 FPGA 国产化应用发展。至今已推出 100 多款 FPGA SoM 模组和配套板卡,基本完成对 AMD FPGA 产品、紫光同创 FPGA 产品的全系列覆盖,产品远销海外 40 多个国家。 AUMO 专注智能车载,为自动驾驶技术开发破题。至今已推出车载仿真测试系统、视频数据采集、视频数据旁路采集分流、视频数据注入、车载摄像头、车载后视镜等产品线,满足车企和汽车产业链的车载产品开发需求。

微信公众号