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 |
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:忙) |
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 命令)