1. 程式人生 > >SD/MMC 內部暫存器

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:忙)
From: http://www.cnblogs.com/Efronc/archive/2010/03/27/1698474.html From: http://www.cnblogs.com/Efronc/archive/2010/03/27/1698474.html