【转载】 SD卡基础知识

  以下内容来至http://www.cnblogs.com/Efronc/archive/2010/03/27/1698313.html

  1, SD/MMC卡接口及上电时序

  SD需要高速读写,同时也要使手持等嵌入式设备能方便使用,特设有两个访问接口中SD模式接口SPI接口SD卡在上电初期,卡主控通过检测引脚1(DAT3)来决定使用SD模式还是SPI模式。当此脚接50KOhm上拉电阻时,卡进入SD模式;当此脚为低电平,卡则工作于SPI模式。

 SPI Bus Mode Pad Definition

Pin        Name            Type1                 SPI Description

1          CS             I               Chip Select (Active low)

2        DataIn                 I               Host to Card Commands and Data

3         VSS                  S               Supply Voltage Ground(can be canceled if there are only 8 pins)

4         VDD                  S               Supply Voltage

5         CLK                   I                Clock

6         VSS2                S                Supply Voltage Ground

7       DataOut              O                Card to Host Data and Status

8         RSV                 I                  Reserved

9         RSV                 I                  Reserved

 NOTES:

1)  The ‘ RSV ’ pins are floating inputs. It is the responsibility of the host designer to connect external
     pull up resistors to those lines. Otherwise non-expected high current consumption may occur due to
     the floating inputs.

2)Hot insertion and removal are allowed. The SanDisk SD Card will not be damaged by inserting or removing
     it into the SD bus even when the power is up:  
          >>The inserted card will be properly reset also when CLK carries a clock frequency fPP.

          >>Data transfer failures induced by removal/insertion should be detected by the bus master using
              the CRC codes that suffix every  bus transaction.

3)Power Protection

         >>Cards can be inserted into or removed from the bus without damage. If one of the supply pins
             (VDD or VSS) is not connected properly, then the current is drawn through a data line to supply the card.

         >>Data transfer operations are protected by CRC codes; therefore, any bit changes induced by card
              insertion and removal can be detected by the SD bus master. The inserted card must be properly
              reset also when CLK carries a clock frequency fpp. If the hot insertion feature is implemented in the host,
              than the host has to withstand a shortcut between VDD and VSS without damage.

部分翻译:

2)热拔插是被允许的。当电源就绪时,SD 卡甚至不会由于在 SD 总线上拔插而损坏:
     >>当 CLK 上运载一个时钟频率 fPP 时,这个插入的卡将会被正确地复位(重置)。
     >>数据传送失败可能是由拔插动作导致的,应该由总线管理器在每次总线传送的尾部加上 CRC 编码来侦测
        (用于确认每次的传送是否成功)。
3)电源保护

     >>卡可以在总线上拔插而不会损坏。如果一条电源供应引脚(VDD 或 VSS)没能正确连接上,则电流将通过数据线
          汲取而供应到卡上。

     >>数据传送操作是通过 CRC 编码来保护的,因此,由拔插卡引起的任何位的变动将会被 SD 总线管理器侦测到。
         当 CLK 上运载一个时钟频率 fPP 时,这个插入的卡必须要正确地复位(重置)。如果这个热插入特性是在主机
         内实现的,则该主机要经得起 VDD 和 VSS 之间短路而不损坏。

上电时序如图:(SPI模式不支持CMD15,详见SD/MMC card 命令)

 sd卡上电时序

  2,SD/MMC卡 内部寄存器  

SD Card Registers

Name    Width                                         Description

CID      128   Card identification number: individual card number for identification.

RCA      16    Relative card address

CSD      128   Card specific data: information about the card operation conditions.

SCR      64    SD Configuration Register: information about the SD Card’s special features capabilities.

OCR      32    Operation Condition Register

SD 卡寄存器

名称   宽度     描述
CID    128  卡的识别码:用于识别单个卡的编号。
RCA  16    卡的相对地址(这个寄存器在 SPI 模式下不可用)
CSD  128  卡的特性数据:是关于这个卡工作条件的相关信息。
SCR   64   SD配置寄存器:关于这个SD卡的特殊功能的特性信息。
OCR   32   工作条件寄存器(电压)

Card Identification Register(CID)

这个 CID 寄存器有 16 字节长,如表 3-9 所示,它包含了本卡的特别识别码(ID 号)。 这些信息是在卡的生产期间被
编程(烧录),主控制器不 能修改它们的内容。 注意:SD卡的 CID 寄存器和 MMC 卡的 CID 寄存器在记录结构上是不同的。

Name

Type

Width

CID Slice

Comments

CID Value

Manufacturer ID (MID) Binary 8 [127:120] 由“SD卡协会“控制并且分配的制造商ID号 0x03
OEM/Application ID (OID) ASCII 16 [119:104] 用于辨认卡的OEM 和/或 卡的内容ID号 ‘SD’
Product Name(PNM) ASCII 40 [103:64] SD128, SD064, SD032, SD016, SD008  
Product Revision (PRV) BCD 8 [63:56] 两个二进制编码的十进制数字(BCD) 产品修订号
Serial Number (PSN) Binary 32 [55:24] 32 位无符号整数 产品序列号
Reserved   4 [23:20] 保留  
Manufacture Date Code(MDT) BCD 12 [19:8] 生产日期格式:2001年4月 = 0x014  
CRC7 checksum(CRC) Binary 7 [7:1] CRC 校验值 CRC7
Reserved,always ‘1’   1 [0:0] 这部分没有使用,值始终为“1”  

CRC Calculation: G(x) = x7+3+1
M(x) = (MID-MSB)*x119 + ... + (CIN-LSB)*x0
CRC[6...0] = Remainder[(M(x)*x7)/G(x)]

Card Specific Data Register(CSD)

此卡的描述数据寄存器(CSD)包含了访问该卡数据时的必要配置信息。

“cell type”栏内定义了CSD的区域是只读(R)、一次编程(R/W)或可擦除的(R/W/E)[“R/W”是指可以多次擦写,
“R/W(1)”是指只能一次写入,不可擦除]。该张表中所显示的值都对应真实的CSD结构中的各自区域和编码。CSD区域
的样式是依照栏标记(和一个复选标记√)的样式。注意SD卡内的 CSD寄存器和MultiMedia卡的CSD寄存器有着不同的结构。

 http://www.cnblogs.com/Efronc

Name

Field

Width

Cell Type

CSD-Slice

CSD Value

CSD Code

CSD structure CSD_STRUCTURE 2 R [127:126] 1.0 00b
Reserved - 6 R [125:120] - 000000b
data read access time TAAC 8 R [119:112] 1.5msec 00100110b
同上in CLK cycles NSAC 8 R [111:104] 0 00000000b
max.data transfer rate TRAN_SPEEN 8 R [103:96] 25MHz 00110010b
card command classes CCC 12 R [95:84] ALL 1F5h
max.read data block length READ_BL_LEN 4 R [83:80] 512Byte 1001b
partial blocks for read allowed READ_BL_PARTIAL 1 R [79:79] YES 1b
write block misalignment WRITE_BLK_MISALIGN 1 R [78:78] NO 0b
read block misalignment READ_BLK_MISALIGN 1 R [77:77] NO 0b
DSR implemented DSR_IMP 1 R [76:76] NO 0b
Reserved - 2 R [75:74] - 00b
device size C_SIZE 12 R [73:62] 如下 -
max.read current @VDD min VDD_R_CURR_MIN 3 R [61:59] 100mA 111b
max.read current @VDD max VDD_R_CURR_MAX 3 R [58:56] 80mA 110b
max.wirte current @VDD min VDD_W_CURR_min 3 R [55:53] 100mA 111b
max.write current @VDD max VDD_W_CURR_MAX 3 R [52:50] 80mA 110b
device size multiplier C_SIZE_MULT 3 R [49:47] 如下 -
erase single block enable ERASE_BLK_EN 1 R [46:46] YES 1b
erase sector size SECTOR_SIZE 7 R [45:39] 32blocks 00111111b
write protect group size WP_GRP_SIZE 7 R [38:32] 128sectors 11111111b
write protect group enable WP_GRP_EN 1 R [31:31] YES 1b
Rserved for MultiMediaCard   2 R [30:29] - 00b
write speed factor R2W_FACTOR 3 R [28:26] X16 100b
max.write data block length WRITE_BL_LEN 4 R [25:22] 512Byte 1001b
Reserved - 5 R [20:16] - 0000b
file format group FILE_FORMAT_GRP 1 R/W(1) [15:15] 0 0b
copy flag(OTP) COPY 1 R/W(1) [14:14] Not Original 1b
permanent write protection PERM_WRITE_PROTECT 1 R/W(1) [13:13] Not Protected 0b
temporary write protection TMP_WRITE_PROTECT 1 R/W [12:12] Not Protected 0b
File format FILE_FORMAT 2 R/W(1) [11:10] HD w/partition 00b
Reserved - 2 R/W [9:8] - 00b
CRChttp://www.cnblogs.com/Efronc CRC 7 R/W [7:1] - CRC7
not used, always’1’ - 1 - [0:0] - 1b

  QQ截图未命名 

 QQ截图未命名2

CSD_STRUCTURE :描述 CSD 结构的版本。00:CSD version No. 1.0 其他保留
TAAC 定义这个异步部分的读操作时间(相对于SD 卡的时钟(CLK))。

TAAC Bit Position                         Code                                                                                    备注
         2:0            time unit 0=1ns, 1=10ns, 2=100ns, 3=1μs, 4=10μs, 5=100μs, 6=1ms, 7=10ms        时间单位
         6:3            time value 0=reserved, 1=1.0, 2=1.2, 3=1.3, 4=1.5, 5=2.0, 6=2.5, 7=3.0, 8=3.5,    时间数值
                                        9=4.0, A=4.5, B=5.0, C=5.5, D=6.0, E=7.0, F=8.0
         7               Reserved                                                                                                    保留

NSAC 定义了时钟的相关特性在最差情况下的数据访问时间。它的单位是100 个时钟周期。所以,该时钟的相关部分所确定的读访问时间的最大值是25.5K
(255*100)个时钟周期。

      min [ { { ( TAAC*f ) + (NSAC*100)}*1/8 }, { (100ms * f ) * 1/8 } ]
      where units = (8 clocks) and “ f ” is the clock frequency.
TRAN_SPEED定义最大的数据传送速率。
 

TRAN_SPEED Bit                                               Code
      2:0                         transfer rate unit 0 = 100kbit / s, 1 = 1Mbit / s, 2 = 10Mbit / s, 3 = 100Mbit / s, 4... 7 = reserved
      6:3                         time value 0=reserved, 1=1.0, 2=1.2, 3=1.3, 4=1.5, 5=2.0, 6=2.5, 7=3.0, 8=3.5, 9=4.0, A=4.5,
                                                  B=5.0, C=5.5, D=6.0, E=7.0, F=8.0

 

CCC 是该卡命令规定的子集(命令类别),定义了这个卡所能支持的命令类别。在CCC 中的一个位的值为“1”则意味着对应的命令类别是可以支持的。

READ_BL_LEN 是最大的可读取数据块长度是用2^READ_BL_LEN 来计算的。所以,这个最大块长度是在512...2048 字节的范围内。注意:在SD 卡中,
                     WRITE_BL_LEN 总是等于 READ_BL_LEN 的。

READ_BL_PARTIAL 在 SD 卡中总是为1。块的部分读取在SD 卡上总是被允许的。它意味着可以使用适当小的块。块最小可以小为1 个字节。
                             READ_BL_PARTIAL = 0 意味着块大小只能使用READ_BL_LEN 的大小来做数据传送。
                             READ_BL_PARTIAL = 1 意味着可以使用小的块。最小的块将等于最小的地址单元(一个字节)。

WRITE_BLK_MISALIGN 定义是否可以用一条写入命令来涵盖存储器设备上多于一个物理块。这个块的大小定义在WRITE_BL_LEN 中。
                             WRITE_BLK_MISALIGN = 0 表示跨过物理块的界线是不允许的。
                             WRITE_BLK_MISALIGN = 1 表示跨过物理块的界线是被允许的。

READ_BLK_MISALIGN 定义是否可以用一条读取命令来涵盖存储器设备上多于一个物理块。这个块的大小定义在READ_BL_LEN 中。
                             READ_BLK_MISALIGN = 0 表示跨过物理块的界线是不允许的。
                             READ_BLK_MISALIGN = 1 表示跨过物理块的界线是被允许的。

DSR_IMP 定义卡上是否集成了可配置的驱动级。如果被设置了,一个驱动级寄存器(DSR)必须是可用的。(DSR_IMP = 0 没有可用的SDR

C_SIZE(设备大小) 这个参数用于计算卡的容量(不包括安全保护区域)。卡的存储容量是通过C_SIZE、C_SIZE_MULT 和READ_BL_LEN 来计算
            的,请看这个公式:
            存储器容量 = BLOCKNR * BLOCK_LEN = (C_SIZE+1)*2^(C_SIZE_MULT+2)*2^(READ_BL_LEN)
            而那些参数是:
            BLOCKNR = (C_SIZE+1) * MULT
            MULT = 2^(C_SIZE_MULT+2)
            BLOCK_LEN = 2^(READ_BL_LEN)
           因此,最大的容量可以编码为:4096*512*2048 = 4 GByte。举例来说:4 MByte 的卡BLOCK_LEN = 512 可以编码为C_SIZE_MULT = 0
           和C_SIZE = 2047。

          READ_BL_LEN 是最大的可读取数据块长度是用2^READ_BL_LEN 来计算的。所以,这个最大块长度是在512...2048 字节的范围内。注意:在SD 卡中,
          WRITE_BL_LEN 总是等于 READ_BL_LEN 的。


VDD_R_CURR_MIN, VDD_W_CURR_MIN
是在最小限度的电压供应下,读取和写入操作所需求的最大电流值。
VDD_R_CURR_MAX, VDD_W_CURR_MAX 是在最大电压供应下,读取和写入操作需求的最大电流值。
C_SIZE_MULT (设备大小的乘数) 这个参数用来表示MULT,用于计算设备的容量大小(参考“C_SIZE”)。MULT 定义为2^(C_SIZE_MULT+2)。

ERASE_BLK_EN 定义擦除一个可写块(参见WRITE_BL_LEN)是否为允许的(即除了下面给出的SECTOR_SIZE 之外)。
                       ERASE_BLK_EN = 0 主控制器只能擦除一个SECTOR_SIZE 单元。
                       ERASE_BLK_EN = 1 主控制器可以擦除一个SECTOR_SIZE 单元或一个WRITE_BLK_LEN 单元。

SECTOR_SIZE 这个可擦除扇区的大小。这个寄存器是一个7 位的二进制编码值,定义了可写块的数量(参阅WRITE_BL_LEN)。实际大小是这个数量加上1。
                     一个0 意味着 1 个可写块,127 是128 个可写块。

WP_GRP_SIZE 这个写保护组的大小。这个寄存器是一个7 位的二进制编码值,定义可擦除组的数量(参阅SECTOR_SIZE)。实际大小是这个数量加上1。
                      一个0 意味着 1 个可擦除组,127 是128 个可擦除组。
WP_GRP_ENABLE 一个“0”表示没有写保护组存在,“1”则相反。
R2W_FACTOR 将典型的块编程(烧录)时间定义为读取访问时间的倍数.
 

    R2W_FACTOR     Multiples of Read Access Time           备注
            0              1
            1              2 (write half as fast as read)  半个快速写和读取一样
            2              4
            3              8
            4             16
            5             32
          6, 7           Reserved                                        保留

WRITE_BL_LEN 这个最大的写入数据块长度是用2^WRITE_BL_LEN 来计算的。这个最大的块长度的范围可以是512 到2048 字节。当写入块的长度设定为
                       512 时总是被支持的(即SD 卡系统的默认值)。注意:在SD 卡中,WRITE_BL_LEN 总是等于READ_BL_LEN 的。

WRITE_BL_PARTIAL 定义了“块写入”命令是否能用于不完整的块。
               WRITE_BL_PARTIAL = 0 意味着块的大小只能是 WRITE_BL_LEN,和它相关联的部分(partial)必须是512 个单元的块,能用于块索引数据的写入。
               WRITE_BL_PARTIAL = 1 意味着设置很小的块也能使用。最小的块大小是 1 个字节。

FILE_FORMAT_GROUP 指示被选中组件的文件格式。这个区域是ROM,只能读取.

FILE_FORMAT_GRP   FILE_FORMAT                                  Type                                              备注
              0                   0              Hard disk-like file system with partition table               有分配表,类似硬盘的文件系统
              0                   1  DOS FAT (floppy-like) with boot sector only (no partition table) 只有启动扇区DOS FAT(类似软盘)(没有分配表)
              0                   2              Universal File Format                                              通用文件格式
              0                   3              Others/Unknown                                                    其它的/未知的
              1              0, 1, 2, 3        Reserved                                                              保留

COPY 这个位标志此卡是否为原创(0)或非原创(1)。一旦设置为非原创,这个位不能重置成原创。“原创”和“非原创”的定义是由应用程序来确定和
         修改的,并非卡的特性。

PERM_WRITE_PROTECT 永久地保护该卡上除了安全保护区域内的所有内容,禁止改写或擦除(该卡所有的写入和擦除命令都无效了)。它的缺省值为“0”,
         也就是没有永久性地写入保护。这个特性位只能写入一次,因此它可以用来将SD 卡设置成只读的ROM,而使用者无法改写其中的内容。

TMP_WRITE_PROTECT 临时性地保护该卡上除了安全保护区域内的所有内容,后期可以改写或擦除(该卡所有的写入和擦除命令是临时失效)。该位可以被
         设置和重置。它的缺省值为“0”,也就是没有写入保护。

FILE_FORMAT 说明了该卡上的文件格式。这个区域是ROM,只能读取。定义同FILE_FORMAT_GROUP

CRC 这个 CRC 区域带有CSD 内容的校验和。这个校验和在主控制器对CSD 做任何修改后肯定会重新计算。缺省值符合CSD 初始化时候的内容。

SD card Configuration Register (SCR)

除了 CSD 寄存器外,还有一个配置寄存器的名字是:SD 卡配置寄存器(SCR)。SCR 提供了SD 卡的一些特殊特性在这张卡内。它的大小是64 位。这个
寄存器内容由制造商在生产厂内设置。

Description Field Width Cell Type SCR 
  4 R   0
4 R 0
1 R  0 0
3 R 2
4 R  5
- 16 R  0 0
- 32 R  0 0

Description

Field

Width

Cell Type

SCR Slice

SCR Value

SCR Code

SCR Structure SCR_STRUCTURE 4 R [63:60] V1.0 0
SD Card—Spec. Version SD_SPEC 4 R [59:56] V1.01 0
data_status_after erases DATA_STAT_AFTER_ERASE 1 R [55:55] 0 0
SD Security Support SD_SECURITY 3 R [54:52] Prot 2, Spec V1.01 2
DAT Bus widths supported SD_BUS_WIDTHS 4 R [51:48] 1 & 4 5
Reserved - 1 R [47:32] 0 0
Reserved for manufacturer usage - 3 R [31:0] 0 0

SCR_STRUCTURE 关于SD卡内的物理级说明中SCR结构的版本号。

SD_SPEC描述这张SD卡在物理级上所支持的说明版本。

DATA_STAT_AFTER_ERASE 定义了数据在擦除后的状态。是“0”或“1”中的任何一个(这要依赖卡的供应商)。

SD_SECURITY 描述了该卡所支持的安全算法。0:无 1:安全协议1.0 安全说明版本 0.96 2:安全协议2.0 安全说明版本 1.0 - 1.01。其他保留

SD_BUS_WIDTHS描述该卡所支持的所有数据总线宽度。从SD 卡支持最少1 位或4 位宽度这两种总线模式开始,任何SD 卡都将最少要设置0 和2 这两个位
                       (即SD_BUS_WIDTH = 0101 )。1.4位保留


Operating Conditions Register (OCR)

这个 32 位的工作条件寄存器储存了卡的 VDD 电压轮廓图。任何标准的 SD 卡主控制器可以使用 2V 至 3.6V 的工作电压
来让 SD 卡能执行这个电压识别操作(CMD1)。而访问存储器的阵列操作无论如何都需要 2.7V 至 3.6V 的工作电压。
OCR 寄存器显示了在访问卡的数据时所需要的电压范围。OCR 寄存器的结构描述:

电压

电压

0 Reserved 16 2.8-2.9
1 Reserved 17 2.9-3.0
2 Reserved 18 3.0-3.1
3 Reserved 19 3.1-3.2
4 1.6-1.7 20 3.2-3.3
5 1.7-1.8 21 3.3-3.4
6 1.8-1.9 22 3.4-3.5
7 1.9-2.0 23 3.5-3.6
8 2.0-2.1 24 Reserved
9 2.1-2.2 25 Reserved
10 2.2-2.3 26 Reserved
11 2.3-2.4 27 Reserved
12 2.4-2.5 28 Reserved
13 2.5-2.6 29 Reserved
14 2.6-2.7 30 Reserved
15 2.7-2.8 31 上电时的状态位(0:忙)
3, SD/MMC卡 SPI模式下命令集

NOTE:

1) class1,class3,class9:SPI模式不支持!
2) 继SD1.1之后又推出了SD2.0,主要特性是支持更大容量。SD1.1中卡容量存放于CSD寄存器中,
    而由于其规范中相关域的值较小,固最大只能表示2G地址。随着Nand容量的大大提高,
    SD1.1已经不适合潮流,因而推出了SD2.0。
    初始化流程大同小义,只需要CMD0之后再加上CMD8命令的识别。SD1.1不支持CMD8,
    而SD2.0的CMD8能读到卡的接口信息。如果卡响应CMD8为无效命令,则走SD1.1的流程,
    可能是SD1.1或MMC。如CMD8响应正确,则很可能是SD2.0了。

3) SD卡具有安全加密功能,内置128bit加密位,在加密状态下,用户需提供密码才可以访问卡内的数据。

    在卡上电时,若卡包含密码,卡自动进入锁定状态,读写命令均返回错误,以保护卡内容不被读出及修改。

    密码设置功能由CMD42实现,其数据包中包括该命令中所有的信息。

Byte Bit7 Bit6 Bit5 Bit4      Bit3             Bit2             Bit1           Bit0

0                            Erase Card     Lock/UnLock     ClrPwd       SetPwd

1             Psw_Length

2             Pwd Data
.
.
.

PwdLen+1

    擦除:此位置1时,卡的密码和内容会被强制擦除,在遗忘密码时可使用此功能。

    锁定/解锁:此位置1时,表示命令结束后状态为锁定,为0,表示卡解锁。

    清除密码:此位置1,表示清除卡的旧密码,此时数据中必须包含旧密码的正确内容。

    加密:此位置1,表示设置卡的新密码,数据中必须包含新密码内容;更改密码时,新密码紧跟随旧密码内容。
    在任意刻,主机可以通过CMD13命令读取卡的内部状态,判断其锁定状态。bit0置1表示卡处于锁定状态。

1、设置密码

使用CMD16设置Block长度为密码长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x01,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。

2、清除密码

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x02,LEN,CMD_DATA0,CMD_DATA1……,0xFF,0xFF;

使用CMD16恢复原Block长度。

3、卡的锁定、解锁

使用CMD16设置Block长度为PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x04,LEN,密码[LEN]……,0xFF,0xFF;

使用CMD16恢复原Block长度。

4、修改密码

使用CMD16设置Block长度为OLD_PWD_LEN+NEW_PWD_LEN+2;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x05,LEN,旧密码[n],新密码[m]……,0xFF,0xFF;

使用CMD16恢复原Block长度。

5、卡擦除

使用CMD16设置Block长度为1;

发送CMD42命令:0x6A,0x00,0x00,0x00,0x00,0x95;

发送命令数据:0x08,0xFF,0xFF;

使用CMD16恢复原Block长度。

 

/******************************** Class0 : 基本命令集 Basic command set **************************/

/* 复位SD 卡 Reset cards to idle state */
#define CMD0 0
#define CMD0_R R1

/* 读OCR寄存器,不适用于SD卡 Read the OCR (MMC mode, do not use for SD cards) */
#define CMD1 1
#define CMD1_R R1

/* 读CSD寄存器 Card sends the CSD */
#define CMD9 9
#define CMD9_R R1

/* 读CID寄存器 Card sends CID */
#define CMD10 10
#define CMD10_R R1

/* 停止读多块时的数据传输 Stop a multiple block (stream) read/write operation */
#define CMD12 12
#define CMD12_R R1B

/* 读 Card_Status 寄存器 Get the addressed card's status register */
#define CMD13 13
#define CMD13_R R2

/***************************** Class2:块读命令集 Block read commands **************************/

/* 设置块的长度 Set the block length */
#define CMD16 16
#define CMD16_R R1

/* 读单块 Read a single block */
#define CMD17 17
#define CMD17_R R1

/* 读多块,直至主机发送CMD12为止 Read multiple blocks until a CMD12 */
#define CMD18 18
#define CMD18_R R1

/***************************** Class4:块写命令集 Block write commands *************************/
/* 写单块 Write a block of the size selected with CMD16 */
#define CMD24 24
#define CMD24_R R1

/* 写多块 Multiple block write until a CMD12 */
#define CMD25 25
#define CMD25_R R1

/* 写CSD寄存器 Program the programmable bits of the CSD */
#define CMD27 27
#define CMD27_R R1

/*****************************Class6:写保护 Write protection *****************************/
/* 设置写保护块的地址 Set the write protection bit of the addressed group */
#define CMD28 28
#define CMD28_R R1B

/* 擦除写保护块的地址 Clear the write protection bit of the addressed group */
#define CMD29 29
#define CMD29_R R1B

/* Ask the card for the status of the write protection bits */
#define CMD30 30
#define CMD30_R R1

/***************************** Class5:擦除命令 Erase commands *******************************/
/* 设置擦除块的起始地址(只用于SD卡) Set the address of the first write block to be erased(only for SD) */
#define CMD32 32
#define CMD32_R R1

/* 设置擦除块的终止地址(只用于SD卡) Set the address of the last write block to be erased(only for SD) */
#define CMD33 33
#define CMD33_R R1

/* 设置擦除块的起始地址(只用于MMC卡) Set the address of the first write block to be erased(only for MMC) */
#define CMD35 35
#define CMD35_R R1

/* 设置擦除块的终止地址(只用于MMC卡) Set the address of the last write block to be erased(only for MMC) */
#define CMD36 36
#define CMD36_R R1

/* 擦除所选择的块 Erase the selected write blocks */
#define CMD38 38
#define CMD38_R R1B

/***************************** class7:锁卡命令 Lock Card commands ***************************/
/* 设置/复位密码或上锁/解锁卡 Set/reset the password or lock/unlock the card */
#define CMD42 42
#define CMD42_R R1B
/* Commands from 42 to 54, not defined here */

/***************************** 应用命令 Application-specific commands ****************/
/* 通知该卡下个命令是条特殊命令,而不是标准命令  Flag that the next command is application-specific */
#define CMD55 55
#define CMD55_R R1

/* 应用命令的通用I/O  General purpose I/O for application-specific commands */
#define CMD56 56
#define CMD56_R R1

/* 读OCR寄存器  Read the OCR (SPI mode only) (电源配置寄存器)*/
#define CMD58 58
#define CMD58_R R3

/* CRC使能或禁止 CRC Turn CRC on or off */
#define CMD59 59
#define CMD59_R R1

/***************************** 应用命令 Application-specific commands ***************/
/* 获取 SD Status寄存器 Get the SD card's status */
#define ACMD13 13
#define ACMD13_R R2

/* 得到已写入卡中的块的个数 Get the number of written write blocks (Minus errors ) */
#define ACMD22 22
#define ACMD22_R R1

/* 在写之前,设置预先擦除的块的个数 Set the number of write blocks to be pre-erased before writing */
#define ACMD23 23
#define ACMD23_R R1

/* 启动此卡的初始化过程 Activates the card’s initialization process */
#define ACMD41 41
#define ACMD41_R R1

/* 连接/断开CD/DATA[3]引脚上的上拉电阻 Connect or disconnect the 50kOhm internal pull-up on CD/DAT[3] */
#define ACMD42 42
#define ACMD42_R R1

/* 读取SCR寄存器 Get the SD configuration register */
#define ACMD51 51
#define ACMD51_R R1

posted on 2011-04-07 13:56  zxl2431  阅读(5165)  评论(0编辑  收藏  举报

导航