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:忙)
原文地址:https://www.cnblogs.com/Efronc/p/1698474.html