[MCU] 【GD32E503评测】06 测评SDIO总线驱动SD卡(一)

caizhiwei   2021-2-9 13:58 楼主

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

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寄存器有着不同的结构。

 

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
CRC CRC 7 R/W [7:1] - CRC7
not used, always’1’ - 1 - [0:0] - 1b

   

 

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

以上是寄存器的介绍,确实很多,也挺复杂的,需要好好消化。

 

gitee/casy

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复