当前位置:   article > 正文

基于FPGA的Micro SD卡控制器(SD模式实现)_sdio接口fpga实现代码

sdio接口fpga实现代码

在上一篇文章 基于FPGA的Micro SD卡控制器(SD模式驱动) 大致介绍了做这个项目的一些辛酸故事。

 

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

 

 1 

先来看看 Micro SD 卡的引脚:

 

【Micro SD 引脚】

 

【Micro SD 卡座原理图

 

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

 

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

 

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

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

 

  2  

 

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

【SD 卡的识别流程】

 

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

 

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

 

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

 

 

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

 

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

 

  3  

 

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

 

SD 模式的命令格式如下:

 

命令总共由 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为例,可以看看命令格式到底是怎么样的。

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

 

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

 

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

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

 

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

 

 

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

 

 

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

 

 

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

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

 

  4  

 

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

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

 

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

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

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

 

咱们现在基本上已经把 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 的一些代码才顺利的调通。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/163049
推荐阅读
相关标签
  

闽ICP备14008679号