zoukankan      html  css  js  c++  java
  • 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:忙)
  • 相关阅读:
    pyqt 设置QTabWidget标签页不可选
    C#分块读取文本数据(FileStream)
    C#IO读写文本txt文件中的数据
    C#IO读写文本txt文件中的数据
    Winform开发主界面菜单的动态树形列表展示
    Winform开发主界面菜单的动态树形列表展示
    C#LinqJoin两个DataTable
    C#LinqJoin两个DataTable
    c#转义字符
    c#转义字符
  • 原文地址:https://www.cnblogs.com/Efronc/p/1698474.html
Copyright © 2011-2022 走看看