技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: 嵌入式
2015-01-27 14:04:10
(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初始化失败。