您好,歡迎訪問(wèn)深圳市鑫南天科技有限公司網(wǎng)站!
地址:深圳市寶安區(qū)福永鎮(zhèn)大洋田正中工業(yè)園9棟
電話:0755-29851556
傳真:0755-29851539
郵箱:xntkj@foxmail.com
網(wǎng)址:www.zsrxtravel.com
首先TF卡座有所謂操作模式(operation mode)的概念,每種操作模式又具體對(duì)應(yīng)一種或多種狀態(tài),主機(jī)通過(guò)發(fā)送命令可以使TF卡座在不同的狀態(tài)間轉(zhuǎn)換,TF卡座則接受命令,并根據(jù)自己現(xiàn)在所處狀態(tài)做出不同的響應(yīng)。
系統(tǒng)上電時(shí)刻或者搜尋TF卡座時(shí),TF卡座控制器應(yīng)該處于TF卡座識(shí)別模式;TF卡座在剛接入系統(tǒng)時(shí)刻也處于這種模式,并且處于此模式下的Idle狀態(tài)。
TF卡座識(shí)別模式:在這種模式下,控制器會(huì)檢驗(yàn)TF卡座的工作電壓范圍,識(shí)別TF卡座類型,并要求它們發(fā)送各自的相對(duì)地址(Relative Card Address);這些操作在SD卡各自的CMD線上進(jìn)行。所有的操作均使用默認(rèn)的 SD卡識(shí)別時(shí)鐘頻率(identification clock rate)
TF卡座復(fù)位:發(fā)送GO_IDLE_STATE(CMD0)到SD卡后,除處于非活動(dòng)狀態(tài)(Inactive state)之外的SD卡都會(huì)進(jìn)入空閑狀態(tài)(Idle state);在Idle狀態(tài),SD卡的CMD線處于輸入模式,默認(rèn)相對(duì)地址為0x0000,默認(rèn)驅(qū)動(dòng)寄存器設(shè)定為最低速度,最大驅(qū)動(dòng)電流能力。
工作條件檢測(cè)
在控制器和TF卡座進(jìn)行任何通信之前,控制器不清楚TF卡座支持的工作電壓范圍,故而控制器首先使用默認(rèn)的電壓發(fā)送一條reset指令(CMD0),緊跟著的CMD8指令,用于取得TF卡座支持工作電壓范圍數(shù)據(jù)。SD卡通過(guò)檢測(cè)CMD8的參數(shù)部分來(lái)檢查控制器使用的工作電壓,控制器通過(guò)分析回傳的CMD8參數(shù)部分來(lái)校驗(yàn)SD卡是否可以在所給電壓下工作。如果SD卡可以在指定電壓下工作,則它回送CMD8的命令響應(yīng)字,其中包含check voltage, check pattern。如果SD卡不支持所給電壓,則SD卡不會(huì)給出任何響應(yīng)信息,并繼續(xù)處于Idle狀態(tài)。在PLV2.0(physical layer version2.0)下,在首次執(zhí)行ACMD41之前,必須執(zhí)行CMD8指令,用以初始化SDHC卡,SDHC卡根據(jù)是否接收到CMD8指令來(lái)鑒別控制器是否支持PLV2.0協(xié)議。使用低電壓的控制器也必須在ACMD41命令之前發(fā)送CMD8,避免可以工作在兩種電壓模式下的SD卡因?yàn)闆]有接收到CMD8, 而默認(rèn)工作在高電壓環(huán)境下,被誤認(rèn)為是只支持高電壓工作模式。 :
SD_SEND_OP_COND(ACMD41)命令的目的是給予SD卡控制器一個(gè)識(shí)別SD卡是否可以在所給Vdd范圍下工作的機(jī)制,如果SD卡無(wú)法在指定Vdd范圍內(nèi)工作,則它會(huì)進(jìn)入非活動(dòng)狀態(tài)(Inactive state)。要注意的是,ACMD41是應(yīng)用相關(guān)型命令,因而,每次發(fā)出的ACMD41命令都必須緊跟在一條APP_CMD(CMD55)命令之后。在空閑態(tài)(Idle State)下使用的CMD55命令使用默認(rèn)的卡相對(duì)地址(RCA)0x0000。
每次控制器發(fā)送CMD0復(fù)位SD卡后,都要重新進(jìn)行系列初始化操作(CMD8,ACMD41...)。
如果ACMD41指令的OCR比特位為0,控制器可以查詢各個(gè)SD卡,并決定它們共同的工作電壓范圍。在作為查詢的ACMD41指令發(fā)送之后,SD卡并不會(huì)開始初始化過(guò)程,直到控制器重新發(fā)送一條ACMD41指令。
SD卡初始化和識(shí)別過(guò)程:
在CMD8命令發(fā)送之后的ACMD41指令其功能有所擴(kuò)展,在參數(shù)里多了HCS部分,在響應(yīng)里面多了CCS(Card Capacity Status)部分。HCS參數(shù)會(huì)被不響應(yīng)CMD8命令的SD卡所拋棄??刂破飨虿豁憫?yīng)CMD8的卡發(fā)送ACMD41指令時(shí),HCS位應(yīng)該設(shè)置為零0。如果向SDHC卡發(fā)送HCS位為0的ACMD41命令,SDHC卡返回的響應(yīng),其busy標(biāo)識(shí)位永遠(yuǎn)為0,代表忙狀態(tài)。HCS標(biāo)識(shí)位用來(lái)表明SD卡是否已經(jīng)完成初始化,如果未完成,HCS為零,否則為1,如果HCS為0,控制器會(huì)重復(fù)發(fā)送ACMD41指令,SD卡只檢查首次接收到的ACMD41指令的HCS位。
響應(yīng)CMD8的SD卡發(fā)送的對(duì)于ACMD41指令響應(yīng)會(huì)包含CCS部分,控制器只檢查HCS標(biāo)志位為1的響應(yīng)所包含的CCS位。CCS=1表明其為SDHC卡,否則為標(biāo)準(zhǔn)SD卡。
控制器隨后發(fā)送ALL_SEND_CID(CMD2)命令,查詢各個(gè)卡的CID(unique card identification)值,還沒有被識(shí)別的SD卡(處于Ready狀態(tài))會(huì)發(fā)送CID值作為響應(yīng),發(fā)送完CID值之后,SD卡進(jìn)入識(shí)別狀態(tài)(Identification state),然后控制器發(fā)送CMD3(SEND_RELATIVE_ADDR)命令,要求各個(gè)SD卡發(fā)送一個(gè)新的相對(duì)地址(RCA),RCA在之后的數(shù)據(jù)傳輸模式中用于尋址。RCA發(fā)送完之后。SD卡進(jìn)入Stand-by狀態(tài),在這個(gè)狀態(tài),如果控制器想要給SD卡分配一個(gè)新的RCA,它可以發(fā)送另一條CMD3命令給SD卡。最后發(fā)布的RCA為SD卡的真實(shí)RCA。
數(shù)據(jù)傳輸模式:
在SD卡識(shí)別模式結(jié)束之前,控制器使用的時(shí)鐘頻率均為Fod。在數(shù)據(jù)傳輸模式,控制器可能會(huì)使用Fpp頻率??刂破靼l(fā)送一條SSEND_CSD(CMD9)命令來(lái)獲取SD卡CSD寄存器(Card Specific Data)里面的描述值,譬如,塊長(zhǎng)度,卡容量信息等。廣播命令SET_DSR(CMD4)為各個(gè)已識(shí)別的SD卡配置驅(qū)動(dòng)階段(??)。它會(huì)向SD卡的DSR寄存器寫入相關(guān)的信息。控制器的時(shí)鐘頻率也在這個(gè)時(shí)刻從Fod轉(zhuǎn)到Fpp。SET_DSR命令是可選的。
CMD7命令用來(lái)選擇某個(gè)SD卡,使其進(jìn)入Transfer狀態(tài),在指定時(shí)間段內(nèi),只有一個(gè)卡能處于Transfer狀態(tài)。當(dāng)某個(gè)先前被選中的處于Transfer狀態(tài)的SD卡接收到CMD7之后,會(huì)釋放與控制器的連接,并進(jìn)入Stand-by狀態(tài)。當(dāng)CMD7使用保留地址0x0000時(shí),所有的SD卡都會(huì)進(jìn)入Stand-by狀態(tài)。
數(shù)據(jù)傳輸模式下各個(gè)狀態(tài)的轉(zhuǎn)換關(guān)系總結(jié)如下:
所有的數(shù)據(jù)讀命令都可以被停止命令(CMD12)在任意時(shí)刻終止。數(shù)據(jù)傳輸會(huì)終止,SD卡返回Transfer狀態(tài)。讀命令有:塊讀操作(CMD17)、多塊讀操作(CMD18)、發(fā)送寫保護(hù)(CMD30)、發(fā)送scr(ACMD51)以及讀模式下的普通命令(CMD56)
所有的數(shù)據(jù)寫命令都可以被停止命令(CMD12)在任意時(shí)刻終止。寫命令也會(huì)在取消選擇命令(CMD7)之前停止。寫命令有:塊寫操作(CMD24,CMD25)、編程命令(CMD27)、鎖定/解鎖命令(CMD42)以及寫模式下的普通命令(CMD56)數(shù)據(jù)傳輸一旦完成,SD卡會(huì)退出數(shù)據(jù)寫狀態(tài),進(jìn)入Programming狀態(tài)(傳輸成功)或者Transfer狀態(tài)(傳輸失?。?/span>
如果塊寫操作被叫停,但是寫操作包含的最終塊其長(zhǎng)度和CRC校驗(yàn)是正確的話,數(shù)據(jù)會(huì)被編程到SD卡(從緩存寫入到Flash?)
SD卡可能會(huì)提供緩存模式,意思是前次寫入塊在編程到Flash的時(shí)刻,控制器可以接著發(fā)送下一塊的數(shù)據(jù)
當(dāng)寫緩存為滿時(shí)刻,并且SD卡處于Programming狀態(tài),DAT0會(huì)保持為低電平(BUSY),表明其為忙狀態(tài)
寫CSD,寫保護(hù),擦除這些操作沒有緩存的功能,當(dāng)SD卡正在處理這些命令的時(shí)候,其余的數(shù)據(jù)傳輸命令會(huì)被忽略。當(dāng)SD卡為忙,并且處于Programming狀態(tài)的時(shí)候,DAT0也會(huì)被SD卡拉低,
在SD卡處于Programming狀態(tài)時(shí)候,不允許控制器發(fā)送設(shè)置參數(shù)命令。設(shè)置參數(shù)命令有:設(shè)置塊長(zhǎng)度(CMD16)、擦除塊開始(CMD32)以及擦除塊結(jié)束(CMD33)
在SD卡編程時(shí)刻,讀命令也是不允許的
當(dāng)把另一個(gè)卡從Stand-by狀態(tài)轉(zhuǎn)換為Transfer狀態(tài)的時(shí)候,正處于erase和Programming狀態(tài)的卡其操作不會(huì)終止,它會(huì)自動(dòng)進(jìn)入Disconnect狀態(tài),釋放數(shù)據(jù)線。
處于Disconnect狀態(tài)的卡可以通過(guò)發(fā)送CMD7命令使其脫離此狀態(tài),并進(jìn)入Programming狀態(tài),并重新激活忙標(biāo)識(shí)符
復(fù)位SD卡(使用CMD0或者CMD15)會(huì)終止任何等待中或正在進(jìn)行的Programming操作。這可能會(huì)損毀SD卡的數(shù)據(jù)
CMD34-37 CMD50,CMD57保留。