||
原文:http://www.cnblogs.com/Efronc/archive/2010/03/27/1698474.html
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 寄存器在记录结构上是不同的。
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寄存器有着不同的结构。
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 位。这个
寄存器内容由制造商在生产厂内设置。
Operating Conditions Register (OCR)
这个 32 位的工作条件寄存器储存了卡的 VDD 电压轮廓图。任何标准的 SD 卡主控制器可以使用 2V 至 3.6V 的工作电压
来让 SD 卡能执行这个电压识别操作(CMD1)。而访问存储器的阵列操作无论如何都需要 2.7V 至 3.6V 的工作电压。
OCR 寄存器显示了在访问卡的数据时所需要的电压范围。OCR 寄存器的结构描述: