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
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593199
  • 原理图
    +关注

    关注

    1268

    文章

    6180

    浏览量

    225683
  • Micro
    +关注

    关注

    2

    文章

    229

    浏览量

    34586
  • SD卡
    +关注

    关注

    2

    文章

    530

    浏览量

    63015
  • 引脚
    +关注

    关注

    16

    文章

    1044

    浏览量

    48959

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

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

收藏 人收藏

    评论

    相关推荐

    sdtf进入spi模式

    GPIO口控制MOS管对其进行供电。检测电路也使用GPIO口实现通过读GPIO口数据,检查是否写保护和完全插入。具体内容可以参考周立功的说明书,百度文库里边有下面我们讲讲
    发表于 01-16 11:35

    关于SD驱动

    `发个自己sd测试的例子,采用SDIO+DMA驱动,在nt35310显示屏上显示,如果sd布局合理可4bits模式,不行就1bit,我是外
    发表于 08-04 19:26

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

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

    求基于FPGASD驱动单元设计代码

    小弟学生party,求基于FPGASD驱动单元设计代码,不胜感激,感激涕零!!!
    发表于 03-06 17:51

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

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

    【NXP LPC54110试用体验】SD文件读写

    即为SPI模式访问SD的标准驱动,可以直接应用到LPC5411x开发环境中。SD
    发表于 10-27 18:04

    FPGA实现SD的图片读取

    怎么用fpga实现sd中的图片进行读取,送到SDRAM中。求大神指教
    发表于 04-11 10:39

    FPGA如何与SD结合

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

    如何准备Micro-SD并添加位文件

    嗨,是否有应用说明介绍如何准备Micro-SD并添加位文件?我在哪里可以找到“xilinx.sys”文件? Micro-SD需要此文件。谢谢
    发表于 05-22 10:34

    基于SPI模式SD驱动和FatFS的移植

    本文实现了基于STM32F107VC的金牛开发板的基于SPI模式SD驱动和FatFS的移植,以及利用minini库对ini配置信息文件进
    发表于 08-05 07:16

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

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

    基于FPGASD的数据读写实现SD NAND FLASH)

    范围,最后 1 个字节为检查模式。6、FPGA实现SD NAND读写接下来编写FPGA的Verilog代码
    发表于 12-16 17:18

    DSP+FPGA+FATFS+SD

    项目背景,在DSP上挂Fatfs文件系统,而SD是挂在FPGA上的,DSP需要通过FPGASD
    发表于 11-14 09:30

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

    SPI模式SD驱动的设计与实现 SD卡以其优越的性能在嵌入式设备上得到广泛的应用。介绍在 S1C33L05 处理器上利用 SPI总线进
    发表于 02-11 08:50 240次下载

    SD nand 与 SD卡的SPI模式驱动

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