sd卡工作原理分析

数据包的封装与命令协议相关

1 sd卡指令数据包

sd卡的指令被封装成48位的数据包,每次传送这48位的数据包。数据包的内容包括起始位、结束位、传输位、命令索引、传输参数和7CRC校验码。其具体格式分布如下图

 

Bit 位置

47

46

[45:40]

[39:08]

[07:01]

00

Bit 宽度

1

1

6

32

7

1

“0”

“1”

x

x

x

“1”

说明

Start bit

Transmission

bit

Command

index

Argument

CRC7

End bit

 

其中的命令索引位是[4540],里面可以封装各种命令,具体的命令表将在下面给出。不同的命令会对应不同的回应(respond),回应有三种(R1R2R3)格式,在命令表中的选项会给出。

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 状态,对以后的CMD2CMD3不回应.

 

 

4

NOP

这是用来设定DSR(DriveState寄存器)的指令,但是本car不支持DSR.

 

 

7

SELECT/DESELECT_CARD

本指令是用来选择一张card,让它在Stand-by状态和Transfer状态之间转换的指令.如果给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

本指令强行终止CMD11CMD18的处理

None

R1

13

SEND_STATUS

接到本指令后, 将传送状态寄存器的信息.

None

R2

15

GO_INACTIVE _STATE

接到本指令后,将转换到休止(inactive)状态.

 

 

16

SET_BLOCKLEN

本指令用来设定Block长度.对象是以后的指令CMD17CMD18.

31:00]

block

length

R1

 

17

READ_SINGLE _BLOCK

接到本指令后,将从自变量设定的地址传送1block 长度的数据.(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

 

接到本指令后,将写1block 长度的数据到自变量设定的地址.(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 选项为ONOFF.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

CMD10SEND_CID

CMD12STOP_TRANSMISSION

CMD16SET_BLOCKLEN

CMD17READ_SINGLE_BLOCK

CMD18READ_MULTIPLE_BLOCK

CMD23SET_BLOCK_COUNT

CMD59CRC_ON_OFF

 

 

 

2)        R2模式

对象指令

CMD13SEND_STATUS

 

3)        R3模式

对象指令

CMD58READ_OCR

 

 

 4. sd卡的配置信息

4.1卡识别寄存器——CID(card identification register )

 

CID-slice

名称

栏目

Bit宽度

OKI 原创

[127:120]

Manufacture ID

MID

8

0x41

OKI ID, MMCA 指定

[119:104]

OEM/Application ID

OID

16

0x0000

OK设备名

[103:56]

Product name

PNM

48

P2016

产品名

[55:48]

Product revision

PRV

8

0x10

产品修订版(version 1.0)

[47:16]

Product serial number

PSN

32

0x00000001

产品编号

Default=1, user设定可

[15:8]

Manufacturing data

MDT

8

收到Code 文件的月份

OKI 收到客户Code 档案的日期,或是写入程序的日期

[7:1]

7-bit CRC checksum

CRC7

7

CRC

检验和

[0:0]

-

-

1

1

固定是”1”

 

4.2卡特性寄存器——CSD(card specific data register)

 

CSD-slice

名称

栏目

Bit 宽度

Type

备注

Bin.

Hex.

 

 

[127:126]

CSD Structure

CSD_STRUCTURE

2

10

0x2

R

Version 3.1

[125:122]

spec version

SEPC_VERS

4

0011

0x3

R

Version 3.1

[121:120]

Reserved

 

2

X

X

R

不必理会

[119:112]

datatime1 read access

TAAC

8

00001000

0x08

R

1ns

[111:104]

datatime2 read access

NSAC

8

00000001

0x01

R

100cycles

[103:96]

max rate data transfer

TRAN_SPEED

8

00101010

0x2A

R

20Mb/s

[95:84]

card command class

CCC

12

000000000111

0x007

R

支持Class0,1,2

[83:80]

max read data block

length

READ_BL_LEN

4

1001

0x9

R

512 字节

79

partial blocks for read

allowed

READ_BL_PARTIAL

1

1

0x1

R

 

78

Reserved

 

1

X

X

R

不必理会

77

read block misalignment

READ_BLK_MISALIGN

1

0

0x0

R

禁止跨越Block

76

DSR implemented

DSR_IMP

1

0

0x0

R

DSR: 不支持

[75:74]

Reserved

 

2

X

X

R

不必理会

[73:62]

device size

C_CIZE

12

111111111110

0xFFE

R

 

[61:59]

min. read current

VDD_R_CURR_MIN

3

000

0x0

R

0.5mA

[58:56]

max. read current

VDD_R_CURR_MAX

3

100

0x4

R

35mA

[55:50]

Reserved

 

6

X

X

R

不必理会

[49:47]

device size multiplier

C_SIZE_MULT

3

001

0x1

R

 

[46:31]

Reserved

 

16

X

X

R

不必理会

[30:29]

manufacture default ECC

DEFAULT_ECC

2

00

0x0

R

ECC: 不支持

[28:26]

Reserved

 

3

X

X

R

不必理会

[25:22]

Max. write data block

length

WRITE_BL_LEN

4

1001

0x9

R

 

[21:16]

Reserved

 

6

X

X

R

不必理会

15

file format group

FILE_FORMAT_GRP

1

0

0x0

R

 

14

Copy flag (OTP)

COPY

1

0

0x0

R

Default=0 User 设定可

13

permanent protection

write

PERM_WRITE_ PROTECT

1

1

0x1

R

 

12

temporary protection

 write

TMP_WRITE_ PROTECT

1

1

0x1

R

 

[11:10]

file format

FILE_FORMAT

2

00

0x0

R

Default=0 User 设定可

[9:8]

ECC code

ECC

2

00

0x0

R

ECC: 不支持

[7:1]

CRC

CRC

7

CRC

CRC

R

 

0

Reserved

 

1

1

0x1

R

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值