02 SD卡命令

命令类型

Host发送给SD卡的命令分为两大类共计四个小类。

命令格式

所有的命令有固定48Bit编码长度,需要传输时间1.92us@25MHz和0.96us@50MHz

比特位

47

46

[45:40]

[39:8]

[7:1]

0

位宽

1

1

6

32

7

1

0

1

X

X

X

1

描述

开始位

传输端位

命令索引

参数位

CRC位

结束位

一个命令总是开始于起始位(总为0),跟随用于指示传输方向的Bit(Host=1)。下面6Bit是命令索引,这个值被解释为一个二进制编码数字(在0到63)。一些命令需要一个参数(例如,地址),它由32Bit编码。上表中的‘X’值表示这个变量值取决于命令。左右命令用一个CRC保护。每个命令编码字由一个结束位终止(总为1)

响应类型

所有的响应是通过CMD信号线发送。响应传输总是开始于响应编码字对应的Bit串的左Bit。编码字长度取决于响应类型。

响应总是开始于一个起始位(总为0),跟随用于指示传输方向的Bit(卡=0)。下表中‘X’表示的值是一个变量输入。除了类型R3(R3的CRC全部为1)外,所有的响应都用CRC保护。每一个响应编码字用结束位来结束(总为1)。

SD卡有5个类型的响应。SDIO卡支持另外名叫R4和R5的响应类型(对应于SDIO命令CMD5和CMD52)。

响应的格式定义如下:

R1(正常响应命令)

编码长度是48Bit。Bit45:40表示要响应的命令索引,此值用二进制编码数值解释(在0到63之间)。卡的状态用32Bit编码。注意,如果涉及有向卡传输数据,那么在每块数据传输后,Data信号线上可能出现Busy信号。

比特位

47

46

[45:40]

[39:8]

[7:1]

0

位宽

1

1

6

32

7

1

0

0

X

X

X

1

描述

开始位

传输端位

命令索引

参数位

CRC位

结束位

R1b

R1b相同于R1,带有一个可选Busy信号在数据线上(DAT0)。基于先于接受命令之前的状态,卡可能在接受这些命令后变成Busy。Host应该Check响应的Busy。

R2(CID,CSD寄存器)

编码长度是136Bit。CID寄存器的内容作为命令CMD2和CMD10的响应发送。CSD寄存器的内容作为CMD9的响应发送。只有CID和CSD的[127-1]Bit传输,这两个寄存器的保留Bit[0]用响应的结束位代替。

比特位

135

134

[133:128]

[127:1]

0

位宽

1

1

6

127

1

0

0

111111

X

1

描述

开始位

传输端位

保留

CID或CSD寄存器内容

CRC位

结束位

R3(OCR寄存器)

编码长度是48Bit。OCR寄存器的内容作为ACMD41的响应发送。

比特位

47

46

[45:40]

[39:8]

[7:1]

0

位宽

1

1

6

32

7

1

0

0

111111

X

1111111

1

描述

开始位

传输端位

保留

OCR寄存器

保留

结束位

R6(发布RCA响应)

编码长度是48Bit。Bit45:40表示要响应的命令索引——一般为‘000011’(结合状态位的Bit5,表示=CMD3)。参数域的高16MSB用于发布RCA数据。

比特位

47

46

[45:40]

[39:8]

[7:1]

0

位宽

1

1

6

16

16

7

1

0

0

X

X

X

X

1

描述

开始位

传输端位

命令索引

RCA地址

卡片状态[[1]]

CRC

结束位

   

R7(卡接口条件)

编码长度是48Bit。通过CMD8的响应发送卡支持的电压信息。Bit19-16用于表示卡支持的电压范围。接受供电电压的卡返回R7响应。在响应中,卡返回命令参数的电压范围和Check方案。

比特位

47

46

[45:40]

[39:20]

[19:16]

[15:8]

[7:1]

0

位宽

1

1

6

20

4

8

7

1

0

0

001000

00000h

X

X

X

1

描述

开始位

传输端位

命令索引

保留

电压支持

回显[[2]]

CRC

结束位

命令类别

SD卡命令集共分为11类(Class0~Class11),每张SD卡支持命令不尽相同,但在其中Class 0 2 4 5 8 是每张SD卡强制支持的。对于SDHC和SDXC卡而言,Class 7除CMD40命令外,也是强制支持的。其他集合是可选的。支持卡命令类别(CCC)作为参数编在SCD寄存器中,以提供给Host如果访问卡的信息。

以下按Class类别分别介绍CMD命令(转下页):

CMD索引

命令类型

携带参数

返回类型

简写

命令描述

基础命令(Class 0)

CMD0

bc

[31:0]填充位

-

GO_IDLE_STATE

复位所有卡至idle状态

CMD1

保留

CMD2

bcr

[31:0]填充位

R2

ALL_SEND_CID

通知所有卡通过CMD线返回CID值

CMD3

bcr

[31:0]填充位

R6

SEND_RELATIVE_ADDR

通知所有卡发布新的RCA

CMD4

bc

[31:16]DSR

[15:0]填充位

-

SET_DSR

编程所有卡的DSR

CMD5

保留给I/O卡使用(参阅SDIO规范)

CMD7

ac

[31:16]RCA

[15:0]填充位

R1b

SELECT/DESELECT_CARD

选择/取消选择RCA地址卡

CMD8

bcr

[31:12]保留位

[11:8]支持电压(VHS)

[7:0]确认方案

R7

SEND_IF_COND

发送SD卡接口条件、支持电压信息,询问卡是否支持

CMD9

ac

[31:16]RCA

[15:0]填充位

R2

SEND_CSD

选定卡通过CMD线发送CSD内容

CMD10

ac

[31:16]RCA

[15:0]填充位

R2

SEND_CID

选定卡通过CMD线发送CSD内容

CMD11

ac

[31:0]保留位(全0)

R1

VOLTAGE_SWITCH

切换至1.8V电压总线模式

CMD12

ac

[31:0]填充位

R1b

TRANSMISSION

强制卡停止传输

CMD13

ac

[31:16]RCA

[15:0]填充位

R1

SEND_STATUS

选定卡通过CMD线发送状态寄存器内容

CMD14

保留

CMD15

ac

[31:16]RCA

[15:0]填充位

-

GO_INACTIVE_STATE

选定卡进入“inactive” 状态

面向块的读取命令(Class 2)

CMD16

ac

[31:0]块长度

R1

SET_BLOCKLEN

对于标准SD卡,设置块长度。

对于SDHC,设置该值无效,固定为512

CMD17

adtc

[31:0]数据地址[[3]]

R1

READ_SINGLE_BLOCK

对于标准卡,读取其单块长度。

对于SDHC,固定返回512字节

CMD18

adtc

[31:0]数据地址[3]

R1

READ_MULTIPLE_BLOCK 

连续读取SD卡数据块,直至被CMD12中断,块长度同CMD17

CMD19

adtc

[31:0]保留位(全0)

R1

SEND_TUNING_PATTERN 

为SDR50和SDR104发送64位协调模式

CMD20

ac

[31:28]速度集合控制

[27:0]保留(全0)

R1b

SPEED_CLASS_CONTROL

速度集控制命令

CMD21

保留

CMD22

保留

CMD23

ac

[31:0]记块数

R1

SET_BLOCK_COUNT

为CMD18和CMD25指定块计数

面向块的写命令(Class 4)

CMD16

同上

CMD20

CMD23

CMD24

adtc

[31:0]数据地址[3]

R1

WRITE_BLOCK 

对于标准SD卡,写入SET_BLOCK_LEN长度

对于SDHC,写入512字节

CMD25

adtc

[31:0]数据地址[3]

R1

WRIT_MULTIPLE_BLOCK 

连续写入SD卡数据块,直至被CMD12中断,块长度同CMD17

CMD26

保留给制造商

CMD27

adtc

[31:0]填充位

R1

PROGRAM_CSD

对CSD寄存器可编程位进行编程

擦除命令(Class 5)

CMD32

ac

[31:0]数据地址[3]

R1

ERASE_WR_BLK_START 

设置擦除的起始块地址

CMD33

ac

[31:0]数据地址[3]

R1

ERASE_WR_BLK_END 

设置擦除的结束块地址

CMD38

ac

[31:0]填充位

R1b

ERASE

擦除选定块

CMD39

保留

CMD41

保留

面向块的写保护命令(Class 6)

CMD28

ac

[31:0]数据地址

R1b

SET_WRITE_PROT 

若卡具有写保护功能,该命令将设置地址组的写保护位

CMD29

ac

[31:0]数据地址

R1b

CLR_WRITE_PROT 

若卡具有写保护功能,该命令将清除地址组的写保护位

CMD30

adtc

[31:0]写保护数据地址

R1

SEND_WRITE_PROT

若卡具有写保护功能,该命令告知SD卡发送写保护位状态

CMD31

保留

锁卡(Class 7)

CMD16

同上

CMD40

adtc

保留给安全规范

CMD42

adtc

[31:0]保留位(全0)

R1

LOCK_UNLOCK

设置/重置密码,加锁/解锁卡

CMD43-49

保留

CMD51

保留

程序特殊命令(Class 8)

CMD55

ac

[31:16]RCA

[15:0]填充位

R1

APP_CMD

向卡指示下一个命令是特定于应用程序的命令,而不是标准命令

CMD56

adtc

[31:1]填充位

[0]读/写

R1

GEN_CMD

用于将数据块传输到卡或从卡中获取数据块,用于通用/特定应用程序命令。

在标准容量SD存储卡的情况下,数据块的大小应由SET_BLOCK_LEN命令设置。

在大容量SD存储卡的情况下。数据块的大小被固定为512字节。

主机设置RD/RW=1用于从卡读取数据,设置为0用于向卡写入数据。

CMD58-59

保留

CMD60-63

保留给制造商

I/O 模式控制(Class 9)

CMD52-54

用于SDIO的命令

SD存储卡使用/保留的特定应用程序命令(发送ACMD命令前需先发送CMD55)

ACMD6

ac

[31:2]填充位

[1:0]总线宽度

R1

SET_BUS_WIDTH

定义数据总线宽度(00h为1bit位宽,10h为4bit位宽),SCR寄存器给出了数据总线宽度

ACMD13

adtc

[31:0]填充位

R1

SD_STATUS

发送卡当前所在状态

ACMD22

adtc

[31:0]填充位

R1

SEND_NUM_WR_BLOCKS 

发送已写入(没有错误)的写入块的数量。由32位CRC数据块进行响应

如果WRITE_BL_PARTIAL=0,则ACMD22的单位总是512字节。

如果WRITE_BL_PARTIAL=ACMD22的单位是执行写入命令时使用的块长度。

ACMD23

ac

[31:23]填充位

[22:0]块数量

R1

SET_WR_BLK_ERASE_COUNT

设置写入前要预先擦除的写入块的数量(用于更快的多块WR命令)。

1=默认值(一个WR块)

ACMD41

bcr

[31]保留位

[30]HCS(CCS){OCR[30]}

[29]为eSD保留

[28]XPC

[27:25]保留

[24]S18R

[23:0]VDD电压限定[[4]]

R3

SD_SEND_OP_COND

要求从机发送它支持的电压信息和OCR寄存器的内容。

ACMD42

ac

[31:1]填充位

[0]设置卡(set_cd)

R1

SET_CLR_CARD_DETECT 

连接(1)/不连接(0)在CD/DAT3上的50KΩ上拉电阻

ACMD51

adtc

[31:0]填充位

R1

SEND_SCR

读取SCR寄存器

 

[[1]]详见卡状态部分内容

[[2]]返回CMD命令参数的电压范围和Check方案

[[3]]数据地址在标准容量SD存储卡中以字节为单位,在高容量SD存储卡内以块(512字节)为单位。

[[4]] OCR第[23:0]位

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值