Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2695246
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: 嵌入式

2015-01-27 14:04:10


MMC命令总共40多个,分为Class0 ~ Class7共8类,Class0的所有卡必须支持的。其它类的有些命令可不必支持。SPI模式的命令是MMC模式命令的子集,但只少了几个而已。驱动程序通过发送CMD1、CMD41命令区分MMC卡和SD卡,如果发送CMD1返回成功则说明为MMC卡,否则发送CMD41命令,如成功则为SD卡。
       命令虽多,但常用的只有几个。CMD1(仅MMC)、CMD2、CMD3、CMD9、CMD10、CMD12、CMD17、CMD18、CMD24、 CMD25、CMD41(仅SD)。在本章中讲述命令时以SPI模式为例,先列出MMC命令、再讲命令处理流程、再讲流程中涉及的概念command、 response、Data Tokens。

(1)命令全览

(2)命令处理流程,以CMD17、CMD24为例加以说明。

读数据命令(CMD17)的流程如下图所示:

读数据命令(CMD17)出错时的流程如下图所示:

写数据命令(CMD24)的流程如下图所示:

(3)command的格式如下所示:

        如果ASIC没有带SD/MMC Controler,直接用SPI或GPIO与MMC/SD通信,则command中的各位全由驱动程序加填进去,对于OMAP与S3C2410这些带 SD/MMC Controler的ASIC,一般地,驱动程序只需向对应的寄存器中写command index即可。

(4)Reponse的类型及格式。response分为四种类型,分别为R1, R1b, R2, R3。大多数command的response为R1或R1b 格式。
      R1类型的格式如下:

R1b 类型的格式与R1基本相同,不过R1b可尾随多个字节,尾随的字节为0表示卡处于Busy状态,为非0表示卡处于Ready状态。

       CMD13命令(读卡状态)的response为R2, R2类型的格式如下:

      CMD58命令(读OCR)的response为R3, R3类型的格式如下:

(5) Data Tokens的格式。数据的读写命令发出后,数据通过Data Tokens发送和接收,所有数据MSB先发送,Data Tokens的长度为4 ~ 2051字节,格式如下:
(a) 第1个字节:


(b) 2 – 2049字节:用户数据
(c) 最后两个字节:16位CRC
(6)Data Error Token的数据格式。假如读操作失败,或卡不能提供所需数据,卡将会发送D Data Error Token代替Data Token。Data Error Token格式如下:

(7)data response的数据格式。数据被写入MMC Card后,卡会向host 发关data response, data response为1字节长,格式如下所示:The meaning of the status bits is defined as follows:


‘010’ - Data accepted.
‘101’ - Data rejected due to a CRC error.

(8)关于RCA

      在SD卡的初始化中,需要对SD卡进行RCA地址分配。RCA(Relative Card Address)相对卡地址,用于在多SD卡中标识某卡,从000开始分配。卡只有收到RCA才可以读写。

      其中的RCA在协议中解释: The writable 16-bit relative card address register carries the card address that is published by the card during the card identification. This address is used for the addressed host-card communication after the card identification procedure. The default value of the RCA register is 0x0000. The value 0x0000 is reserved to set all cards into the Stand-by State with CMD7.

 (9)SD卡的CMD55与ACMD41

       cmd55的作用就是通知sd卡,它的下一条命令是acmd命令,也就是应用程序特定的命令。而acmd41命令的含义是把板子支持的sd卡设定信息发送给sd卡,比如支持的电压,卡的类型等等,这条命令的response里面会包含sd卡的ocr信息。这可以参考sd卡的标准。也就是说,这个逻辑的目的是把板子目前支持的sd卡信息发送给sd卡,另外要求sd卡把它的ocr返回给host端。如果因为板子的供电问题导致SD卡供电不足而没有返回正确的 response,那么SD初始化失败。

阅读(760) | 评论(0) | 转发(0) |
0

上一篇:数据结构算法演示

下一篇:SDIO DRIVER

给主人留下些什么吧!~~