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暫存器有著不同的結構。
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:忙) |