對安全數(shù)碼卡進行異常恢復(fù)的方法及設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息處理技術(shù),尤其涉及對安全數(shù)碼卡進行異?;謴?fù)的方法及設(shè)備。
【背景技術(shù)】
[0002]安全數(shù)碼卡(SD, Secure Digital Memory Card)是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,按照封裝的不同分為SD、miniSD等,外形有差異,但并無本質(zhì)區(qū)別。
[0003]將SD連接至主機后,主機可進行讀寫操作,從SD讀取數(shù)據(jù)或?qū)懭霐?shù)據(jù)。在讀寫操作中,可能出現(xiàn)操作異常的情況,具體地:主機(Host)向SD發(fā)出讀寫命令后,等待一段時間,SD還是不對主機進行響應(yīng),此時,對SD的DATAO引腳進行測量,其總是低電平;根據(jù)SD協(xié)議,低電平指示SD處于繁忙(busy)狀態(tài),SD協(xié)議中也提到,發(fā)出關(guān)于某一數(shù)據(jù)包的讀寫指令后,500毫秒內(nèi)便可完成;由此可獲知,如果超出500毫秒后的一段時間內(nèi)DATAO引腳仍處于busy狀態(tài),則可確定SD處于異常狀態(tài)。
[0004]下面對SD的異?;謴?fù)進行說明。
[0005]主機的處理器與SD之間通過多個1接口進行連接,其中包括控制SD重新啟動的電源1接口。這類設(shè)備中,SD電源和處理器電源各自獨立,且不相連通。當(dāng)出現(xiàn)SD異常時,主機通過電源1接口控制SD進行重新上電,這樣,通過對SD的重新啟動實現(xiàn)SD的異?;謴?fù)。
[0006]實際應(yīng)用中,由于1接口比較緊缺,很多設(shè)備的處理器不具備足夠多的1接口用于異?;謴?fù)的重上電。對于這種情況,SD電源與處理器電源并不采用獨立設(shè)置的方式,而采用直接連通的方式;對于這類情況,當(dāng)SD處于異常狀態(tài)時,處理器無法控制SD重啟,不能恢復(fù)異常,若采用對主機和SD都進行重新啟動的方式,其速度慢,并且也將影響主機的其他業(yè)務(wù),其可實施性較差。
[0007]綜上,很多設(shè)備受其自身結(jié)構(gòu)的限制,并不支持在異常狀態(tài)下對SD單獨上電重啟,導(dǎo)致無法完成異常恢復(fù)。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供了一種對安全數(shù)碼卡進行異?;謴?fù)的方法,該方法不受設(shè)備自身結(jié)構(gòu)的限制,能夠不對SD進行重新上電而實現(xiàn)異?;謴?fù)。
[0009]本發(fā)明提供了一種對安全數(shù)碼卡進行異常恢復(fù)的設(shè)備,該設(shè)備不受自身結(jié)構(gòu)的限制,能夠不對SD進行重新上電而實現(xiàn)異?;謴?fù)。
[0010]一種對安全數(shù)碼卡進行異?;謴?fù)的方法,該方法包括:
[0011]確定安全數(shù)碼卡SD出現(xiàn)異常;
[0012]持續(xù)向SD發(fā)送組合信息,所述組合信息包括時鐘信號和空閑狀態(tài)命令;
[0013]確定發(fā)送組合信息的時間大于設(shè)定時間,執(zhí)行SD驅(qū)動初始化過程;
[0014]向SD進行讀寫測試,若接收到來自SD的響應(yīng)信息,則確定恢復(fù)成功。
[0015]一種對安全數(shù)碼卡進行異常恢復(fù)的設(shè)備,該設(shè)備包括異常確定模塊、組合信息發(fā)送及初始化模塊和測試確定模塊;
[0016]所述異常確定模塊,確定SD出現(xiàn)異常,向所述組合信息發(fā)送及初始化模塊發(fā)送組合信息發(fā)送指令;
[0017]所述組合信息發(fā)送及初始化模塊,接收組合信息發(fā)送指令,持續(xù)向SD發(fā)送組合信息,所述組合信息包括時鐘信號和空閑狀態(tài)命令;確定發(fā)送組合信息的時間大于設(shè)定時間,執(zhí)行SD驅(qū)動初始化過程,向所述測試確定模塊發(fā)送測試指令;
[0018]所述測試確定模塊,接收來自所述組合信息發(fā)送及初始化模塊的測試指令,向SD進行讀寫測試,若接收到來自SD的響應(yīng)信息,則確定恢復(fù)成功。
[0019]從上述方案可以看出,本發(fā)明中,確定SD出現(xiàn)異常后,持續(xù)向SD發(fā)送組合信息;確定發(fā)送組合信息的時間大于設(shè)定時間,執(zhí)行SD驅(qū)動初始化過程;向SD進行讀寫測試,若接收到來自SD的響應(yīng)信息,則確定恢復(fù)成功。本發(fā)明方案不對SD進行重新上電而實現(xiàn)異?;謴?fù),這樣,不再受設(shè)備自身結(jié)構(gòu)的限制,可應(yīng)用于任何主機。
【附圖說明】
[0020]圖1為本發(fā)明對安全數(shù)碼卡進行異?;謴?fù)的方法示意性流程圖;
[0021]圖2為本發(fā)明對安全數(shù)碼卡進行異?;謴?fù)的方法流程圖實例;
[0022]圖3為本發(fā)明對安全數(shù)碼卡進行異?;謴?fù)的設(shè)備結(jié)構(gòu)示意圖。
【具體實施方式】
[0023]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下面結(jié)合實施例和附圖,對本發(fā)明進一步詳細(xì)說明。
[0024]現(xiàn)有對SD進行異常恢復(fù)的方案,只適用于處理器提供了控制SD重新啟動的電源1接口的主機設(shè)備,該方案受到結(jié)構(gòu)限制。針對該缺陷,本發(fā)明結(jié)合SD協(xié)議的特點,采用持續(xù)向SD發(fā)送組合信息以激發(fā)SD初始化的方式,實現(xiàn)SD的異?;謴?fù)。參見圖1,為本發(fā)明對安全數(shù)碼卡進行異常恢復(fù)的方法示意性流程圖,其包括以下步驟:
[0025]步驟101,確定SD出現(xiàn)異常。
[0026]確定SD出現(xiàn)異常,可采用現(xiàn)有方案實現(xiàn),也就是,發(fā)出關(guān)于某一數(shù)據(jù)包的讀寫指令后,如果超出500毫秒后的一段時間內(nèi)DATAO引腳仍處于busy狀態(tài),則確定SD處于異常狀態(tài)。
[0027]SD異常的確定不僅限于現(xiàn)有的方案,例如,還可采用如下方式實現(xiàn):
[0028]所述確定SD出現(xiàn)異常之前,該方法還包括:向SD進行數(shù)據(jù)包讀寫操作,對讀寫的數(shù)據(jù)包進行校驗,若出現(xiàn)錯誤,向SD重復(fù)進行出錯數(shù)據(jù)包的讀寫操作,確定讀寫的數(shù)據(jù)包仍然出錯,判斷重復(fù)次數(shù)是否大于重復(fù)閾值,如果大于,則確定SD出現(xiàn)異常,并對出錯的數(shù)據(jù)包進行標(biāo)記;如果不大于,則對重復(fù)次數(shù)進行累加,返回執(zhí)行所述向SD重復(fù)進行出錯數(shù)據(jù)包的讀寫操作的步驟。所述重復(fù)閾值可根據(jù)實際情況設(shè)置,為可能出現(xiàn)異常的經(jīng)驗值。
[0029]步驟102,持續(xù)向SD發(fā)送組合信息,所述組合信息包括時鐘信號和空閑狀態(tài)命令。
[0030]時鐘信號(CLK,Clock),為處理器或總線等數(shù)字電路工作時的時間間隔信號,是一種方波信號,使數(shù)字計算機的所有操作都按順序進行。并且,SD協(xié)議有一空閑狀態(tài)(CMDO)命令,即G0_IDLE_STATE命令;通過此條命令,SD卡會進入空閑(IDLE)狀態(tài),且該命令在任何狀態(tài)下都可以發(fā)起。
[0031]但是,發(fā)明人在實際應(yīng)用環(huán)境中發(fā)現(xiàn),當(dāng)SD出現(xiàn)異常時,單次對其發(fā)送CMDO命令,并不能使SD進入IDLE狀態(tài)。而命令的同時需要向SD提供時鐘?;谝陨锨闆r,本發(fā)明提供了一種向SD發(fā)送多組組合信息的方式來激活SD,使其進入空閑狀態(tài)。如果能使SD從異常狀態(tài)進入空閑狀態(tài),則可繼續(xù)對其進行讀寫操作,而無需通過電源重啟的方式進行恢復(fù)。
[0032]向SD發(fā)送組合信息的實現(xiàn)方式有多種,具體如:
[0033]拉高SD的CMD引腳,向SD發(fā)送至少74個時鐘信號;
[0034]向SD發(fā)送空閑狀態(tài)命令。
[0035]發(fā)送時鐘信號需要拉高SD的CMD引腳;而發(fā)送空閑狀態(tài)命令時,不對CMD引腳作特別處理,可自然進行命令的傳送。
[0036]步驟103,確定發(fā)送組合信息的時間大于設(shè)定時間,執(zhí)行SD驅(qū)動初始化過程。
[0037]發(fā)明人在實際應(yīng)用中發(fā)現(xiàn),通常地,向SD單次發(fā)起組合命令,并不能使SD進入IDLE狀態(tài),因此,本發(fā)明中采用了多次發(fā)送的方式,所述設(shè)定時間可根據(jù)需要設(shè)置,例如為2秒中。
[0038]步驟104,向SD進行讀寫測試,若接收到來自SD的響應(yīng)信息,則確定恢復(fù)成功。
[0039]向SD進行讀寫操作時,會接收到SD的響應(yīng)信息,通過響應(yīng)信息的接收情況可確定是否恢復(fù)成功。進行讀寫測試的數(shù)據(jù)包可以是之前出錯的數(shù)據(jù)包,也可以是專用于測試的數(shù)據(jù)包。
[0040]進一步地,向SD進行讀寫測試,若沒有接收到來自SD的響應(yīng)信息,可返回執(zhí)行步驟 102。
[0041]采用本發(fā)明方案,確定安全數(shù)碼卡SD出現(xiàn)異常后,持續(xù)向SD發(fā)送組合信息,所述組合信息包括時鐘信號和空閑狀態(tài)命令;確定發(fā)送組合信息的時間大于設(shè)定時間,執(zhí)行SD驅(qū)動初始化過程;向SD進行讀寫測試,若接收到來自SD的響應(yīng)信息,則確定恢復(fù)成功。本發(fā)明方案不對SD進行重新上電而實現(xiàn)異?;謴?fù),這樣,不再受設(shè)備自身結(jié)構(gòu)的限制,可應(yīng)用于任何主機。
[0042]下面通過圖2的流程,對本發(fā)明進行異?;謴?fù)的方法進行說明,從SD的讀寫操作包括數(shù)據(jù)讀取、數(shù)據(jù)寫入、數(shù)據(jù)擦除等,這里具體以數(shù)據(jù)讀取作為實例。
[0043]參見圖2,為數(shù)據(jù)讀取過程中進行SD異?;謴?fù)的方法流程圖實例,其包括以下步驟:
[0044]步驟201,向SD進行數(shù)據(jù)包讀取操作。
[0045]步驟202,在數(shù)據(jù)包讀取過程中,對讀取的數(shù)據(jù)包進行校驗,若出現(xiàn)錯誤,則執(zhí)行步驟 203。
[0046]步驟203,向SD重復(fù)進行出錯數(shù)據(jù)包的讀取操作,確定數(shù)據(jù)包讀取仍然失敗,執(zhí)行步驟204,否則,繼續(xù)從SD進行數(shù)據(jù)包的讀取。步驟204,判斷重復(fù)次數(shù)是否大于重復(fù)閾值,如果大于,則執(zhí)行步驟205 ;如果不大于,則執(zhí)行步驟206。
[0047]重復(fù)次數(shù)的初始值為0,每重新讀取一次數(shù)據(jù)包,則為重復(fù)次數(shù)疊加I。本實例中,假設(shè)重復(fù)次數(shù)為3。
[0048]步驟205,確定SD出現(xiàn)異常,并對出錯的數(shù)據(jù)包進行標(biāo)記,執(zhí)行步驟207。
[0049]對數(shù)據(jù)包進行標(biāo)記,可便于后續(xù)恢復(fù)成功時,從標(biāo)記的數(shù)據(jù)包開始繼續(xù)進行讀寫操作。
[0050]步驟206,對重復(fù)次數(shù)進行累加,數(shù)據(jù)包返回執(zhí)行步