命令类型
共有四类用来控制SD卡的命令:
广播命令(bc),无响应——广播命令只有在所有CMD线一起连接到主机时才能使用。如果分开连接,那么每个卡将单独接收命令。
带响应的广播命令(bcr)——所有卡同时响应。因为SD卡没有开漏模式,这个命令只有在所有的CMD线分开时采用使用。该命令将被每个卡分别接收和响应。寻址(点对点)命令(ac)——DAT上没有数据传输。
寻址(点对点)命令(ac)——DAT上没有数据传输。
寻址(点对点)数据传输命令(adtc)——DAT上传输数据。
所有的命令和响应通过CMD线传输。
命令格式
命令长度固定为48位,从定义上能看出是先发高字节再发低字节。
47 |
46 |
[45:40] |
[39:8] |
[7:1] |
0 |
起始位 |
传输位 |
命令索引 |
命令参数 |
CRC7 |
结束位 |
命令描述
基本命令
没有参数的命令参数部分为零即可,命令索引和命令的序号是一致的
命令索引 |
类型 |
参数 |
响应 |
缩写 |
描述 |
CMD0 |
bc |
[31:0]无用 |
— |
GO_IDLE_STATE |
重置所有卡到Idle状态 |
CMD1 |
保留 |
||||
CMD2 |
bcr |
[31:0]无用 |
R2 |
ALL_SEND_CID |
要求所有卡发送CID号 |
CMD3 |
bcr |
[31:0]无用 |
R6 |
SEND_RELATIVE_ADDR |
要求所有卡发布一个新的相对地址RCA |
CMD4 |
不支持 |
||||
CMD5 |
保留 |
||||
CMD6 |
保留 |
||||
CMD7 |
ac |
[31:16]RCA [15:0]无用 |
R1(只来自选中的卡) |
选中/不选中卡 |
被选中的卡会回复,RCA设为0则取消选中所有卡 |
CND8 |
ac |
[31:12]保留 [11:8]支持的电压(VHS填0001b就好) [7:0]检测位(设为0xAA就行) |
R7 |
SEND_IF_COND |
支持电压的卡会回应,不支持的不回应,检测位和CRC作用一样,SD卡在回应时会返回相同的值,以检查通信是否正常 |
CMD9 |
ac |
[31:16] RCA [15:0]无用 |
R2 |
SEND_CSD |
寻址卡并让其发送卡定义数据CSD |
CMD10 |
ac |
[31:16] RCA [15:0]无用 |
R2 |
SEND_CID |
寻址卡并让其发送卡识别号CID |
CMD11 |
adtc |
[31:0]数据地址 |
R1 |
READ_DAT_UNTIL_STOP |
从卡读取数据流,从给定地址开始,知道停止传输命令结束 |
CMD12 |
ac |
[31:0]无用 |
R1b |
STOP |
中止多个块的读/写操作 |
CMD13 |
ac |
[31:16] RCA [15:0]无用 |
R1 |
SEND_STATUS |
寻址卡并发送卡状态寄存器 |
CMD14 |
保留 |
||||
CMD15 |
ac |
[31:16] RCA [15:0]无用 |
_ |
GO_INACTIVE_STATE |
设置卡到inactive状态 |