数据包的封装与命令协议相关
1 sd 卡指令数据包
sd 卡的指令被封装成48位的数据包,每次传送这48位的数据包。数据包的内容包括起始位、结束位、传输位、命令索引、传输参数和7位CRC 校验码。其具体格式分布如下图
Bit 位置
47 46 [45:40] [39:08] [07:01] 00 Bit 宽度
1 1    6 3
2 7 1 值
“0” “1” x x x “1” 说明 Start bit Transmission bit Command index
Argument CRC7 End bit
其中的命令索引位是[45:40],里面可以封装各种命令,具体的命令表将在下面给出。不同的命令会对应不同的回应(respond),回应有三种(R1,R2,R3)格式,在命令表中的选项会给出。 2 sd 卡命令索引表
CMD 简略语 指令说明 SPI 模式
自变量 回应
0 GO_IDLE_STATE 这是使card 初始化到Idle 状态的
指令.CS 信号设
在Low 的状态时,
接到本指令
后,card 将转换
到SPI 模式.
None R1
1 SEND_OP_COND 接到本指令后,card 将做R3回
应(含有OCR 数
据).根据OCR 值,
可以得知card 能
工作电压范
围.OCR 数据最高
值位的1bit 是用
来确认card 内部
处理是否结束
(Ready/Busy 轮
询).
None R1
2 ALL_SEND_CID 接到本指令后, 处于Ready 状态
的card 将传送
CID 数据.在
MMC 模式下,数
据被送到CMD 信
号,在CID数据的
每1bit传送
后,CMD信号状
态将与该card内
部状态相比较,如
果不一致,將中止
数据传送,card返
回到Ready状态.
如果相一致,该
card 将认为已被
选中,然后转换到
Identification 状
态.
3 SET_RELATIVE_ADDR 本指令会为已转
换到Identification
状态的card分配
一个相对card地
址(RCA).当RCA
分配后,card将转
换到Stand-by 状
态,对以后的
CMD2和CMD3
不回应.
4 NOP 这是用来设定
DSR(DriveState
寄存器)的指令,
但是本car不支持
DSR.
7 SELECT/DESELECT_CARD本指令是用来选
择一张card,让它
在Stand-by状态
和Transfer状态之
间转换的指令.如
slice中文果给card设定已
分配到的RCA地
址,card将从
Stand-by状态转
换到Transfer状
态,并将回应以后
的读取指令及其
他指令.如果给
card设定RCA以
外的地址,card将
转换到Stand-by
状态。当
RCA=0000h
时,card将无条件
地转换到Stand-
by状态.
9 SEND_CSD 接到本指令后,将
传送CSD数据.
None R1
10 SEND_CID 接到本指令后,将
传送CID数据.
None R1
11 READ_DAT_UNTIL_STOP 接到本指令后,将
从设定的地址传
送P2ROM数据,
直到接到指令
CMD12为止.
12 STOP
_TRANSMISSION 本指令强行终止
CMD11和
CMD18的处理
None R1
13 SEND_STATUS 接到本指令后,
将传送状态寄存
器的信息.
None R2 15 GO_INACTIVE
_STATE 接到本指令后,将
转换到休止
(inactive)状态.
16 SET_BLOCKLEN 本指令用来设定
Block长度.对象
是以后的指令
CMD17和
CMD18. 31:00]
block
length
R1
17 READ_SINGLE
_BLOCK 接到本指令后,将
从自变量设定的
地址传送1个
block 长度的数
据.(block长度由
指令CMD16设
定). [31:00]
data
address
R1
18 READ_MULTIPLE
_BLOCK接到本指令后,将
从自变量设定的
地址连续传送
block长度的数
据,直到接到指令
CMD12为
止.(block长度由
指令CMD16设
定). [31:00]
data
address
R1
23 SET_BLOCK _COUNT 本指令是给紧跟
的指令CMD18
设定要传送的
block 数量.
[31:16]set to 0 [15:00]number of block R1 24 WRITE_BLOCK  接到本指令后,将
写1个block 长度
的数据到自变量
设定的地
址.(block 长度由
指令CMD16设
定).
[31:0] data address  R1 25 WRITE_MULTIPLE_ BLOCK  接到本指令后,将
连续写block 长度
的数据到自变量
设定的地址,直到
接到指令CMD12
为止.(block 长度
由指令CMD16设
定).
[31:0] data address  R1 58 READ_OCR 接到本指令
后,Card 将传送
OCR 数据.
None R3 59 CRC_ON_OFF 本指令是用来设
定CRC 选项为
ON 或OFF.在
SPI 模式下,CRC
的初始值设定为
OFF.[CRC 选项
[bit=1]表示CRC
ON;[CRC 选项
[bit=0]表示CRC
OFF.
[31:01] stuff bits [00:00] CRC option R1
3 命令回应repond
1) R1模式
对象指令
CMD0 : GO_IDLE_STATE
CMD1 : SEND_OP_COND
CMD9 : SEND_CSD
CMD10:SEND_CID
CMD12:STOP_TRANSMISSION
CMD16:SET_BLOCKLEN
CMD17:READ_SINGLE_BLOCK
CMD18:READ_MULTIPLE_BLOCK
CMD23:SET_BLOCK_COUNT
CMD59:CRC_ON_OFF
7 6 5 4 3 2 1 0
0  0  0
2) R2模式
对象指令
CMD13:SEND_STATUS 15 14 13 1211 10 9 8 7 6 5 4 3 2 1 0 0  0  0  0 0 0 0 0 0 0
3) R3模式
对象指令
CMD58:READ_OCR
39 38 37 3635 34 3332
0 0  0
OCR