SDIO 协议
http://blog.csdn.net/g_salamander/article/details/14167055
一、SD 存儲(chǔ)卡特性介紹
1、存儲(chǔ)容量
? ? a、標(biāo)準(zhǔn)容量SD存儲(chǔ)卡(SDSC): 不大于2GB
? ? b、大容量SD存儲(chǔ)卡(SDHC): 大于2GB、不大于32GB
? ? c、超大容量SD存儲(chǔ)卡(SDXC):大于32GB、不大于2TB
2、電壓范圍
? ? 高電壓SD存儲(chǔ)卡,電壓范圍為:2.7 ~ 3.6 V
3、SD 存儲(chǔ)卡可以用密碼保護(hù)(CMD42 - LOCK_UNLOCK)
4、標(biāo)準(zhǔn) SD 存儲(chǔ)卡的厚度是 2.1mm 或者 1.4 mm
5、SD 存儲(chǔ)卡傳輸速度分類(lèi)
? ? a、class-0: 這類(lèi)卡片不指定性能
? ? b、class-2: 不低于 2MB / s
? ? c、class-4: 不低于 4MB / s
? ? d、class-6: 不低于 6MB / s
? ? e、class-10: 不低于 10MB / s
? ? * 大容量和超大容量 SD 存儲(chǔ)卡至少應(yīng)該為 class-2
6、SD 存儲(chǔ)卡結(jié)構(gòu)圖
? ??
引腳說(shuō)明如下圖所示:
? ??
?
二、SD Bus
? ??1、Command: 命令是一次操作開(kāi)始的令牌,從主機(jī)發(fā)送到一個(gè)卡片(編址命令)或者連接到主機(jī)的所有卡片(廣播命令)。命令的編碼格式如下圖所示:每個(gè)令牌都有一個(gè)起始位和結(jié)束位,總長(zhǎng)度為48 bits,并且每個(gè)令牌都有 7 bits 的CRC?校驗(yàn)碼。命令只能通過(guò)CMD 線傳輸,并且MSB?為先。
? ??
? ? 下面是?CMD8?的示意圖:
? ??
? ? * bit[40:45] - Command index 的內(nèi)容就是 CMD 的編號(hào)
? ? * bit[8:39] - Command Argument 為每個(gè)命令自帶的參數(shù)
? ? *?Command?共分為12類(lèi)(class0 - class11),在寄存器?CSD?中有 12 bits?CCC?(Card Command Class)對(duì)本卡支持的分類(lèi)進(jìn)行描述,基本命令(class-0)如下圖所示:
? ??
? ?
? ??2、Response:應(yīng)答是卡片發(fā)回?cái)?shù)據(jù)的令牌,響應(yīng)主機(jī)之前發(fā)送的命令。應(yīng)答的編碼格式如下圖所示:每個(gè)令牌都有一個(gè)起始位和結(jié)束位,總長(zhǎng)度為48 bits?或者136 bits,有相應(yīng)的 CRC 校驗(yàn)碼。應(yīng)答信號(hào)也只在 CMD 線上傳輸,并且 MSB 為先。
? ??
? ? * SD 存儲(chǔ)卡有?5 種類(lèi)型的應(yīng)答:R1、R1b、R2、R3、R6,SDIO?卡還支持另外兩種應(yīng)答類(lèi)型:R4、R5,除了 R3 其他類(lèi)型的應(yīng)答都有 CRC 校驗(yàn)碼
? ? * R1 為通常命令的應(yīng)答格式,如下圖所示
? ??
? ? * R6 為 CMD3 的專(zhuān)用應(yīng)答格式,其中 Argument 字段的高 16 bits 為卡片新的相對(duì)地址,如下圖所示
? ??
? ??3、Data:數(shù)據(jù)通過(guò) DATA 線雙向傳輸。數(shù)據(jù)傳輸有兩種模式:
? ? ? ??a、Usual data 模式:通常的數(shù)據(jù)以最低有效字節(jié)為先發(fā)送,在單個(gè)字節(jié)里面以最高有效位為先,示意圖如下:
? ? ? ??
? ? ? ??b、Wide width data 模式:最高有效位先傳輸,示意圖如下:
? ? ? ??
?
三、SD 存儲(chǔ)卡寄存器
每個(gè) SD 存儲(chǔ)卡都有一組信息寄存器,如下圖所示:
其中?CID、OCR、CSD、SCR?存儲(chǔ)了卡片的具體信息,RCA、DSR?寄存器存儲(chǔ)了實(shí)際的配置參數(shù)。
1、OCR 寄存器
OCR (操作條件)寄存器中存儲(chǔ)了卡片的電壓信息以及部分狀態(tài)信息:其中一個(gè)狀態(tài)位(bit 31)指示卡片的上電操作是否完成,另外一個(gè)狀態(tài)位(bit 30)指示卡片的容量狀態(tài)(0代表SDSC、1代表SDHC或者SDXC)。寄存器的說(shuō)明如下圖所示:
? ??
2、CID 寄存器
CID (識(shí)別信息)寄存器總共 128 bits,包含了卡片的識(shí)別信息,每個(gè)獨(dú)立的卡片都應(yīng)該有一組獨(dú)一無(wú)二的識(shí)別信息。寄存器說(shuō)明如下圖所示:
? ??
3、CSD 寄存器
CSD(具體信息)寄存器也是 128 bits,提供了訪問(wèn)卡片內(nèi)容的一些信息如:傳輸速率、數(shù)據(jù)格式、錯(cuò)誤類(lèi)型、最大是數(shù)據(jù)訪問(wèn)時(shí)間、DSR 寄存器是否啟用的。其中 bit[126:127] 記錄了 CSD 的版本號(hào),CSD version 1.0 為標(biāo)準(zhǔn)容量卡所用,CSD version 2.0 為大容量或超大容量卡所用。CSD version 1.0 寄存器說(shuō)明如下圖所示:
? ??
4、SCR 寄存器
SCR(SD 配置)寄存器總共 64 bits,定義了卡片的一些特殊功能,寄存器說(shuō)明如下圖所示:
? ??
5、CSR 寄存器
CSR(卡片狀態(tài))寄存器總共 32bits,代表了執(zhí)行一個(gè)命令的錯(cuò)誤和狀態(tài)信息,其信息包含在?R1 格式的應(yīng)答中返回給主機(jī),寄存器說(shuō)明如下圖所示:
? ??
? ??
6、SD Status 寄存器
SD Status 寄存器包含了 SD 存儲(chǔ)卡的的專(zhuān)有屬性并為以后的功能擴(kuò)展保留了足夠的空間,其大小為?512bits?即一個(gè)塊大小,這個(gè)寄存器作為ACMD13命令的執(zhí)行結(jié)果,通過(guò)DATA線發(fā)送到主機(jī),寄存器說(shuō)明如下圖所示:
? ??
?
四、SD 存儲(chǔ)卡功能描述
SD 卡有兩種操作模式:1、卡片識(shí)別模式,2、數(shù)據(jù)傳輸模式。所有的通信都是由主機(jī)控制的,即通過(guò)編址命令或者廣播命令。卡片在兩種模式之間的狀態(tài)轉(zhuǎn)換如下圖所示:
? ??
1、卡片識(shí)別模式
當(dāng)主機(jī)復(fù)位所有卡片后將進(jìn)入卡片識(shí)別模式,在識(shí)別模式下將會(huì)確認(rèn)卡片的操作電壓并要求卡片發(fā)布自己的相對(duì)地址(默認(rèn)地址為0x0000),在此操作模式下只會(huì)用到 CMD 線并且工作在專(zhuān)門(mén)的時(shí)鐘頻率 F-od(400 KHz)。識(shí)別模式的流程圖如下:
? ??
主機(jī)首先會(huì)發(fā)送?CMD8?去確定卡片的工作電壓:如果卡片不支持當(dāng)前電壓(包含在 CMD8 參數(shù)里面),則不會(huì)返回并保持在空閑狀態(tài);如果卡片能夠在當(dāng)前電壓工作,則會(huì)返回卡片支持的電壓以及檢測(cè)圖案,還有相應(yīng)的CRC 校驗(yàn)碼??ㄆ?strong>初始化將在主機(jī)發(fā)送ACMD41命令后開(kāi)始,主機(jī)每間隔1秒就發(fā)送一次 ACMD41 命令,直到初始化完成(OCR 寄存器的 bit31 置位)。在主機(jī)發(fā)送的第一個(gè) ACMD41?中應(yīng)該包含主機(jī)支持的容量信息(HCS)和工作條件。如果主機(jī)請(qǐng)求 1.8V 的工作電壓(S18R = 1),并且卡片也支持(S18A = 1),則可以通過(guò)CMD11切換到 1.8V 的工作電壓。當(dāng)初始化完成后,主機(jī)發(fā)送?CMD2命令獲取CID 寄存器信息,當(dāng)卡片返回后主機(jī)接著發(fā)送CMD3命令要求卡片發(fā)布自己的相對(duì)地址,一旦主機(jī)接收到相對(duì)地址,卡片就進(jìn)入等待狀態(tài)(這時(shí)候主機(jī)可以通過(guò) CMD3 命令重復(fù)要求卡片發(fā)布相對(duì)地址)。ACMD41的示意圖如下所示:
? ??
它的應(yīng)答格式如下(R3)圖所示:
? ??
2、數(shù)據(jù)傳輸模式
CMD7?用于選擇一個(gè)卡片進(jìn)入傳輸模式,在同一時(shí)間只能有一個(gè)卡片處于傳輸模式。如果當(dāng)前卡片與主機(jī)處于數(shù)據(jù)傳輸模式的連接狀態(tài),新的 CMD7 命令中的RCA?[bit16 - bit31]?不是當(dāng)前卡片的,則會(huì)釋放連接并且當(dāng)前卡片進(jìn)入等待狀態(tài),然后連接新 RCA?的卡片。如果主機(jī)發(fā)送 CMD7 時(shí),RCA = 0x0000,則所有的卡片都進(jìn)入等待狀態(tài)。數(shù)據(jù)傳輸模式下的狀態(tài)轉(zhuǎn)換如下圖所示:
? ??
a、所有讀取數(shù)據(jù)的命令在任何時(shí)間都能被?CMD12?終止。讀取數(shù)據(jù)的命令包括:CMD17(讀取單塊數(shù)據(jù))、CMD18(讀取多塊數(shù)據(jù))、CMD30(讀取寫(xiě)保護(hù)狀態(tài)位)、ACMD51(讀取 CSR 寄存器)、ACMD56。
b、所有寫(xiě)入數(shù)據(jù)的命令在任何時(shí)間都能被 CMD12 終止。寫(xiě)入數(shù)據(jù)的命令包括:CMD24(寫(xiě)入單塊數(shù)據(jù))、CMD25(寫(xiě)入多塊數(shù)據(jù))、CMD27(設(shè)置 CSD 寄存器)、CMD42(加鎖解鎖)、ACMD56。、
c、一旦數(shù)據(jù)傳輸完成,卡片將會(huì)馬上退出數(shù)據(jù)寫(xiě)狀態(tài)并且切換到編程狀態(tài)(數(shù)據(jù)傳輸成功就寫(xiě)入存儲(chǔ)介質(zhì))或者傳輸狀態(tài)(數(shù)據(jù)傳輸失敗)。
d、如果寫(xiě)操作停止,塊長(zhǎng)度和最后一塊的?CRC 校驗(yàn)碼是有效的,數(shù)據(jù)將會(huì)被寫(xiě)入存儲(chǔ)介質(zhì)。
e、卡片支持寫(xiě)緩存,這就意味著當(dāng)前塊在進(jìn)行編程操作時(shí)下一塊也可以進(jìn)行傳輸。如果寫(xiě)緩存滿了,卡片還是處在編程狀態(tài),則卡片會(huì)將DATA0一直拉低(忙狀態(tài))。
f、設(shè)置 CSD 寄存器時(shí)不提供緩存,也就是如果正在進(jìn)行 CSD 設(shè)置,任何的數(shù)據(jù)傳輸命令都將被拒絕執(zhí)行,DATA0 也會(huì)被一直拉低。
g、當(dāng)卡片處于編程狀態(tài)時(shí),讀命令和參數(shù)設(shè)置命令將不被執(zhí)行。參數(shù)設(shè)置命令包括:CMD16(設(shè)置塊長(zhǎng)度)、CMD32(設(shè)置擦除的起始?jí)K數(shù))、CMD33(設(shè)置擦除的結(jié)束塊數(shù))。
h、CMD7 命令不會(huì)終止擦除和編程操作。
i、通過(guò)?CMD0?或者?CMD15?重置卡片時(shí)將會(huì)結(jié)束所有掛起或者正在進(jìn)行的操作,這有可能會(huì)破壞卡片的數(shù)據(jù),所以需要主機(jī)來(lái)保證安全。
j、CMD class10?的命令之間的狀態(tài)轉(zhuǎn)換由廠家自己定義。
?
3、數(shù)據(jù)讀寫(xiě)流程
在卡片上電以及執(zhí)行 CMD0 后為?1bit bus,寬總線(4bit bus)模式可以通過(guò)?ACMD6?命令設(shè)置,在設(shè)置時(shí)卡片必須處理傳輸模式而且沒(méi)有加鎖。容量大于 2GB 的卡片最大塊長(zhǎng)度可能為?1024?字節(jié),但是 CMD16 命令最大只支持?512?字節(jié)。
a、讀取數(shù)據(jù)
當(dāng)總線上沒(méi)有數(shù)據(jù)傳輸時(shí)總線保持高電平,傳輸以低電平開(kāi)始并以高電平結(jié)束,數(shù)據(jù)流包括有效數(shù)據(jù)和ECC值,一個(gè) CRC 校驗(yàn)碼將會(huì)被加入到每塊數(shù)據(jù)的末尾以確保傳輸?shù)耐暾浴?strong>CMD17命令將會(huì)讀取一個(gè)塊的數(shù)據(jù),塊的地址在命令的參數(shù)中列出(SDSC的地址以字節(jié)為單位,SDHC?和SDXC?的地址以塊 - 512bytes?為單位)。CMD18命令將會(huì)連續(xù)的讀取塊數(shù)據(jù)直到主機(jī)發(fā)送?CMD12?命令,CMD23?命令可以指定讀取的塊數(shù)。
b、寫(xiě)入數(shù)據(jù)
寫(xiě)數(shù)據(jù)流程和讀取數(shù)據(jù)流程類(lèi)似。單塊寫(xiě)入命令為?CMD24,多塊寫(xiě)入命令為?CMD25。
c、擦除數(shù)據(jù)
擦除數(shù)據(jù)的流程和讀取多塊數(shù)據(jù)的流程類(lèi)似。CMD32?命令指定擦除的開(kāi)始?jí)K,CMD33?命令指定擦除的結(jié)束塊,CMD38命令啟動(dòng)擦除。如果將要擦除的塊是寫(xiě)保護(hù)的則跳過(guò)。在擦除過(guò)程中DATA0保持低電平。在寫(xiě)或者擦除的過(guò)程中可以通過(guò)CMD7命令去操作別的卡片。
d、加鎖解鎖
SD 存儲(chǔ)卡支持加鎖功能,密碼以及長(zhǎng)度保存在?128bits?的?PWD?和?8bits?的?PWD_LEN?寄存器。被加鎖的卡片可以響應(yīng)?class0?、CMD16、ACMD41、LOCK CARD(class7)命令,但是不能訪問(wèn)數(shù)據(jù)。如果卡片被加鎖,則 PWD_LEN不為 0,卡片在上電后就會(huì)進(jìn)入鎖定狀態(tài)。加鎖解鎖的命令為CMD42,該命令的數(shù)據(jù)塊格式如下圖所示:
? ??
*?ERASE:強(qiáng)制擦除操作,第 0 byte 的 bit3 需要置 1,并且其他位置 0。
*?LOCK_UNLOCK:1 = Lock the card,0 = Unlock the card。這個(gè) bit 的操作需要和 SET_PWD 相同。
*?CLR_PWD:1 = 清除密碼。
*?SET_PWD:1 = 設(shè)置新密碼。
*?PWDS_LEN:定義了密碼的長(zhǎng)度(bytes),如果改變密碼,則是新密碼和舊密碼的長(zhǎng)度。
*?PWD:如果是新密碼,則保存的是新密碼。如果改變密碼,則保存的是新密碼和舊密碼。
應(yīng)當(dāng)在發(fā)送 CMD42 之前通過(guò) CMD16 設(shè)置數(shù)據(jù)塊長(zhǎng)度,而且數(shù)據(jù)塊長(zhǎng)度應(yīng)該不小于 CMD42 數(shù)據(jù)塊的長(zhǎng)度。
總結(jié)
- 上一篇: WNDR4300v2 固件编译
- 下一篇: 定决志