0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么通过FPGA采取SD模式实现Micro SD卡的驱动

FPGA研究院 来源:开源骚客 2023-09-19 11:48 次阅读

在这篇文章,进入正题,说一说怎么通过FPGA采取SD模式来实现Micro SD 卡的驱动,也就是怎么去读写 Micro SD 卡。

1 先来看看 Micro SD 卡的引脚:

d7fa1ab0-5694-11ee-939d-92fbcf53809c.jpg

【Micro SD 引脚】

d810461e-5694-11ee-939d-92fbcf53809c.jpg

【Micro SD 卡座原理图】

除开电源相关引脚,其他可用的管脚都连接到了 FPGA 上。

对于这些引脚的介绍,先看下 SD 协议手册上对于 SD 总线的引脚描述:

d81f8bb0-5694-11ee-939d-92fbcf53809c.jpg

这个表格上的引脚描述是给的 SD 卡的引脚信息,与Micro SD 卡的引脚序号是不一样的,大家要辩证对待,主要是参考下 Micro SD 卡各引脚的介绍。

从表格中的引脚信息也可以看出,Micro SD 卡是兼容 SPI 操作模式的。

2 在正式操作 Micro SD 卡之前,需要对其进行初始化。初始化的操作可以参考下面两个流程图。

d83a2d6c-5694-11ee-939d-92fbcf53809c.jpg

【SD 卡的识别流程】

这个图告诉咱们可以通过 CMD0 + CS置0 进入 SPI 模式。

d86098c6-5694-11ee-939d-92fbcf53809c.jpg

【SD 模式下的初始化和识别流程】

初始化完成了,咱们就需要看到另外一个图了。

d876d406-5694-11ee-939d-92fbcf53809c.jpg

在初始化流程中,执行 CMD3 之后就实现了从 card identification mode data transfer mode 的跨越。

进入到 data transfer mode ,就可以对 SD 卡进行数据传输了,也就是读写操作。

3 根据上面的三个流程图,自己再看看手册,找找相关的指令怎么实现,其实就可以正常的操作 SD 卡了。说完上边的三个流程图,其实这篇文章也可以结束了。不过,这种说一半藏一半,完全不是我的风格。我们再继续说一说流程图中的这些指令如何实现。

SD 模式的命令格式如下:

d88176fe-5694-11ee-939d-92fbcf53809c.jpg

命令总共由 48 bit 组成,start bit 总是为0,表示命令的开始,最后一个bit,也就是 end bit 总是为 1 。这种方式倒是和 IIC 的 SDA 数据线有点类似。当主机没有发送命令时,可以将 CMD 这根管脚拉高,你要是不小心把 CMD 这根线拉低了,那 Micro SD 卡有可能就会当成是一个命令的开始。

transmitter bit:为 1 ,表示这是从主机到 SD 卡的命令,表示命令方向。

CONTENT:这是命令的内容了,包含命令索引和命令参数

CRC:有7个bit,也就是用的CRC7。

以CMD8为例,可以看看命令格式到底是怎么样的。

d88dc3c8-5694-11ee-939d-92fbcf53809c.jpg

具体的命令参数,还需要根据很多情况进行设定。

命令索引和参数都确定好之后,剩下的就是怎么来搞定 CRC 7 ?

对于 CRC 7 ,咱们就直接贴代码吧。

d89c08f2-5694-11ee-939d-92fbcf53809c.jpg

这些值都确定好之后,再通过 CMD 这个管脚串行的发送出去就可以了!

对于有写命令,会收到 Micro SD 卡的响应。而对于不同的操作指令,也会有不同的响应。

d8b95ff6-5694-11ee-939d-92fbcf53809c.jpg

而不同的响应,与之对应的就是在 CMD 线上收到 Micro SD 卡发送的不同数据。

d8db7f50-5694-11ee-939d-92fbcf53809c.jpg

d8eeb0c0-5694-11ee-939d-92fbcf53809c.jpg

有些指令前面有字母 A,如下图所示:

d8ff6280-5694-11ee-939d-92fbcf53809c.jpg

那这些指令与没有带字母 “A” 的指令有什么区别呢?

ACMD6 为例,它要先执行 CMD55 ,之后再执行类似于 CMD6 指令,就是说ACMD6 是由两个指令组合在一起的。

4 说完指令,接下来再说一说怎么写数据,怎么读数据。

d91b6c28-5694-11ee-939d-92fbcf53809c.jpg

写数据和读数据都是这样的数据包格式,start bit总是为0,end bit 总是为 1 。

在执行完写指令之后,相应的在DAT 数据线上构造这样的数据包格式就行。

在执行完读指令之后,相应的在DAT 数据线上就会接收到这样的数据包格式。

稍复杂一点的,也就是如何构造 CRC,数据包使用的是 CRC 16。

d92a78ee-5694-11ee-939d-92fbcf53809c.jpg

5 咱们现在基本上已经把 Micro SD 卡的操作流程都已经说完了。接下来说一说我在这个项目中从初始化到读写数据的命令执行流程是怎么样的。

CMD0 -> CMD8 -> ACMD41 -> CMD2 -> CMD3 -> CMD 7 -> ACMD6 -> CMD25 (WRITE_MULTIPLE_BLOCK ) / CMD17 (READ_SINGLE_BLOCK)-> CMD12。

好了,这篇文章写到就结束了。

我自己写的这个项目的完整代码,毕竟这是人家花了钱的,是绝对不会公开的,所以大家也不用在微信里边私聊我要代码了哈!

但是可以附上一套源码给大家参考,这套代码是 Lattice 给出的 关于 SD 卡控制器的 IP Core。当时 Kevin 也是参考了这个 IP Core 的一些代码才顺利的调通。

d9406d52-5694-11ee-939d-92fbcf53809c.jpg

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602964
  • 原理图
    +关注

    关注

    1296

    文章

    6338

    浏览量

    233752
  • Micro
    +关注

    关注

    2

    文章

    262

    浏览量

    34831
  • SD卡
    +关注

    关注

    2

    文章

    564

    浏览量

    63884
  • 引脚
    +关注

    关注

    16

    文章

    1193

    浏览量

    50409

原文标题:基于FPGA的Micro SD卡控制器(SD模式实现)

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【OK210试用体验】sd驱动实现

    微控制器都可以通过spi或模拟spi接口来读写sd。由于S5PV210具有sd主机控制器,并且支持s
    发表于 08-05 20:55

    K***28如何实现Micro SD的读写

    我最近在使用一块主芯片为K***28的板子,板子上带有Micro SD的端口,我想请教各位资深大神,如何实现K***28对Micro SD
    发表于 03-13 22:31

    FPGA如何与SD结合

    Micro-SD有8个引脚,其中电源引脚为4与6。随后需要3至6个引脚与FPGA相连,用到的引脚数取决于你使用什么模式。以下是SPI模式
    发表于 08-01 05:00

    STM32是怎样通过SDIO模式实现SD的读写

    我们的意识中,可能大家以为SD长这样不过这只是SD的一种,这种属于SD-Micro,是一种
    发表于 02-23 06:33

    基于S3C2410的SD MMC驱动实现

    设计了一个基于S3C2410 片内SDI 的SD/MMC 驱动,该驱动支持MMC SD
    发表于 01-06 15:41 53次下载

    SPI模式SD驱动的设计与实现

    SPI模式SD驱动的设计与实现 SD以其优越
    发表于 02-11 08:50 240次下载

    什么是micro sd?什么是TF? 什么是SD

    什么是micro sd ? miniSD是在数码相机,PDA等所用的Flash Memory Card(中文名:快闪存储)基础上发展
    发表于 04-27 18:41 1.9w次阅读

    基于SDFPGA配置

    基于SDFPGA配置,本文给出了对Virtex FPGA 进行配置的情 况,该方案也可以适用于Spartan 系列FPGA
    发表于 12-13 10:02 6288次阅读
    基于<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的<b class='flag-5'>FPGA</b>配置

    基于ReWorks嵌入式系统在SD模式实现SD驱动程序的设计

    、高性能、安全性好等特点的多功能存储。由于SD通过9针的硬件接口与专门的驱动器接口相连接,不需要外接电源维持记忆信息,而且作为一体化固体介质,没有任何移动部件,所以不用担心机械移动
    的头像 发表于 03-09 08:04 1957次阅读
    基于ReWorks嵌入式系统在<b class='flag-5'>SD</b><b class='flag-5'>模式</b>下<b class='flag-5'>实现</b><b class='flag-5'>SD</b><b class='flag-5'>卡</b><b class='flag-5'>驱动</b>程序的设计

    SD端子定义,sd card pin description

    SD端子定义,sd card pin description 关键字:SD端子定义
    的头像 发表于 09-20 18:53 2540次阅读

    微雪电子Micro SD 存储模块简介

    Micro SD存储模块 支持插入TI 支持SDIO及SPI接口 接口规格为PIN间距2.54mm排针 型号 Micro
    的头像 发表于 11-12 16:41 2923次阅读
    微雪电子<b class='flag-5'>Micro</b> <b class='flag-5'>SD</b><b class='flag-5'>卡</b> 存储模块简介

    HAL库 CubeMX STM32通过SDIO模式实现SD的读写

    我们的意识中,可能大家以为SD长这样不过这只是SD的一种,这种属于SD-Micro,是一种
    发表于 12-29 19:46 13次下载
    HAL库 CubeMX STM32<b class='flag-5'>通过</b>SDIO<b class='flag-5'>模式</b><b class='flag-5'>实现</b>对<b class='flag-5'>SD</b><b class='flag-5'>卡</b>的读写

    SD nand 与 SD的SPI模式驱动

    文章目录SDnand与SD的SPI模式驱动1.概述2.SPI接口模式SD接口
    的头像 发表于 05-10 17:45 1414次阅读
    <b class='flag-5'>SD</b> nand 与 <b class='flag-5'>SD</b><b class='flag-5'>卡</b>的SPI<b class='flag-5'>模式</b><b class='flag-5'>驱动</b>

    什么是Micro SD适配器?

    Micro SD适配器是一种小型设备,它允许Micro SD(也称为TF或TransFlas
    的头像 发表于 06-12 11:19 2097次阅读
    什么是<b class='flag-5'>Micro</b> <b class='flag-5'>SD</b>适配器?

    如何在Micro SD上设置写保护?

    我们了解客户对Micro SD写保护的疑问。在这篇文章中,拓优星辰将详细解释如何在Micro SD
    的头像 发表于 07-11 16:37 1732次阅读
    如何在<b class='flag-5'>Micro</b> <b class='flag-5'>SD</b><b class='flag-5'>卡</b>上设置写保护?