一種sd數(shù)據(jù)讀取/寫入出錯處理方法及sd主機、sd設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種計算機數(shù)據(jù)傳輸,特別是涉及一種SD數(shù)據(jù)讀取/寫入出錯處理方法及SD主機、SD設(shè)備。
【背景技術(shù)】
[0002]SD卡(Secure Digital Memory Card)是一種基于半導(dǎo)體閃存工藝的存儲卡,具有大容量、高性能、安全等多種特點,目前已成為消費數(shù)碼設(shè)備中應(yīng)用最廣泛的一種存儲卡。在SD(Secure Digital)卡越來越普及的今天,SD數(shù)據(jù)傳輸?shù)男实奶岣咭苍絹碓斤@得重要。通常將SD設(shè)備分成SD主機(Secure Digital Host)和SD設(shè)備(Secure DigitalDevice)兩個部分,其中SD主機負責對SD設(shè)備的控制并作為SD設(shè)備與其他設(shè)備相連的接口通道。SD卡在進行數(shù)據(jù)傳輸(數(shù)據(jù)在SD主機與SD設(shè)備之間傳輸)時,偶爾也會發(fā)生數(shù)據(jù)傳輸錯誤的現(xiàn)象,這在傳輸多塊大數(shù)據(jù)的時候更容易發(fā)生。目前,對于SD卡數(shù)據(jù)傳輸出現(xiàn)錯誤的情況的處理,通常為通過軟件參與判斷錯誤的處理。需要軟件參與處理的步驟包括判斷是否丟棄已經(jīng)傳輸正確的數(shù)據(jù),是否終止傳輸后面沒有傳輸完成的數(shù)據(jù),是否需要對SD卡進行復(fù)位等等。顯然,這將大大降低數(shù)據(jù)的傳輸效率。
[0003]鑒于此,如何提高在SD卡輸出傳輸出錯時的處理速度,進而提高SD卡的整體傳輸速度成為了本領(lǐng)域技術(shù)人員亟待解決的問題。
【發(fā)明內(nèi)容】
[0004]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種SD數(shù)據(jù)讀寫傳輸錯誤處理方法及SD主機、SD設(shè)備,用于解決現(xiàn)有技術(shù)中在SD卡數(shù)據(jù)讀取/寫入出錯時的處理效率低的問題。
[0005]為實現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種SD數(shù)據(jù)讀取錯誤處理方法,所述SD數(shù)據(jù)讀取錯誤處理方法包括:SD主機從SD設(shè)備讀取數(shù)據(jù)塊;檢測所述數(shù)據(jù)塊是否存在CRC錯誤,并將所述檢測結(jié)果信息發(fā)送給所述SD設(shè)備;所述SD設(shè)備接收檢測結(jié)果信息;當確定所述數(shù)據(jù)塊存在CRC錯誤時,所述SD設(shè)備與所述SD主機自動重新讀取所述數(shù)據(jù)塊。
[0006]可選地,所述方法還包括在所述SD設(shè)備與所述SD主機設(shè)置相同的最大重傳次數(shù);當確定存在CRC錯誤時,統(tǒng)計連續(xù)錯誤次數(shù);當所述連續(xù)錯誤次數(shù)小于所述最大重傳次數(shù)時,完成重新讀取操作。
[0007]可選地,所述自動統(tǒng)計連續(xù)錯誤次數(shù)是通過計數(shù)器完成的。
[0008]可選地,所述最大重傳次數(shù)通過軟件設(shè)置。
[0009]可選地,所述自動重新讀取所述數(shù)據(jù)塊的具體實現(xiàn)包括:所述SD主機丟棄所述數(shù)據(jù)塊并準備重新讀取所述數(shù)據(jù)塊;所述SD主機重新從所述SD設(shè)備讀取的所述數(shù)據(jù)塊。
[0010]可選地,所述SD主機丟棄所述數(shù)據(jù)塊并準備重新讀取所述數(shù)據(jù)塊的具體實現(xiàn)包括:所述SD主機采用FIFO來接收所述數(shù)據(jù)塊;讀取所述SD設(shè)備開始前,所述SD主機FIFO的當前寫指針的值保存在一個臨時寫指針中;當所述SD主機丟棄所述數(shù)據(jù)塊并準備重新讀取所述數(shù)據(jù)塊時,將所述臨時寫指針的值載入到所述當前寫指針中;所述SD設(shè)備采用FIFO來保存所述數(shù)據(jù)塊;所述SD主機讀取開始前,所述SD設(shè)備FIFO的當前讀指針的值保存在一個臨時讀指針中;當所述SD主機丟棄所述數(shù)據(jù)塊并準備重新讀取所述數(shù)據(jù)塊時,將所述臨時讀指針的值載入到所述當前讀指針中。
[0011]本發(fā)明提供一種SD數(shù)據(jù)寫入錯誤處理方法,所述SD數(shù)據(jù)寫入錯誤處理方法包括:SD主機向SD設(shè)備寫入數(shù)據(jù)塊;所述SD設(shè)備檢測所寫入的數(shù)據(jù)塊是否存在CRC錯誤,并將所述檢測結(jié)果信息發(fā)送給所述SD主機;所述SD主機接收檢測結(jié)果信息;當確定所寫入的數(shù)據(jù)塊存在CRC錯誤時,所述SD設(shè)備與所述SD主機自動重新寫入所述數(shù)據(jù)塊。
[0012]可選地,所述方法還包括在所述SD設(shè)備與所述SD主機設(shè)置相同的最大重傳次數(shù);當確定存在CRC錯誤時,自動統(tǒng)計連續(xù)錯誤次數(shù);當所述連續(xù)錯誤次數(shù)小于所述最大重傳次數(shù)時,自動完成重新寫入操作。
[0013]可選地,所述自動統(tǒng)計連續(xù)錯誤次數(shù)是通過計數(shù)器完成的。
[0014]可選地,所述最大重傳次數(shù)通過軟件設(shè)置。
[0015]可選地,所述自動重新寫入所述數(shù)據(jù)塊的具體實現(xiàn)包括:所述SD設(shè)備丟棄所述數(shù)據(jù)塊并準備重新寫入所述數(shù)據(jù)塊;所述SD主機重新向所述SD設(shè)備寫入所述數(shù)據(jù)塊。
[0016]可選地,所述SD主機重新向所述SD設(shè)備寫入所述數(shù)據(jù)塊的具體實現(xiàn)包括:所述SD主機采用FIFO來保存將要寫入到所述SD設(shè)備的所述數(shù)據(jù)塊;寫入所述SD設(shè)備開始前,所述SD主機FIFO的當前讀指針的值保存在一個臨時讀指針中;當所述SD主機開始重新寫入所述數(shù)據(jù)塊時,將所述臨時讀指針的值載入到所述當前讀指針中;所述SD設(shè)備采用FIFO來保存所述SD主機寫入的所述數(shù)據(jù)塊;所述SD主機寫入開始前,所述SD設(shè)備FIFO的當前寫指針的值保存在一個臨時寫指針中;當所述SD主機開始重新寫入所述SD設(shè)備所述數(shù)據(jù)塊時,將所述臨時寫指針的值載入到所述當前寫指針中。
[0017]本發(fā)明還提供一種SD設(shè)備,所述SD設(shè)備包括:標識設(shè)備重傳寄存器,用于標識所述SD設(shè)備是否具備數(shù)據(jù)重傳功能;使能設(shè)備重傳寄存器,用于使能所述SD設(shè)備的數(shù)據(jù)重傳功能;如果所述SD設(shè)備具備自動重傳功能且所述自動重傳功能使能,則當所述SD設(shè)備檢測到讀取/寫入的數(shù)據(jù)塊存在CRC錯誤時,所述SD設(shè)備自動重新讀取/寫入所述存在CRC錯誤的數(shù)據(jù)塊。
[0018]可選地,所述SD設(shè)備還包括:最大重傳次數(shù)寄存器,用于存儲自動連續(xù)重傳的最大次數(shù);計數(shù)器,用于統(tǒng)計連續(xù)發(fā)生CRC錯誤的次數(shù);當所述SD設(shè)備檢測到讀取/寫入數(shù)據(jù)塊存在CRC錯誤時,所述計數(shù)器自動執(zhí)行加I操作,當所述計數(shù)器的值小于所述存儲連續(xù)重傳次數(shù)的寄存器的值時,所述SD設(shè)備自動重新讀取/寫入所述存在CRC錯誤的數(shù)據(jù)塊;當所述SD設(shè)備檢測到讀取/寫入的數(shù)據(jù)塊不存在CRC錯誤時,所述計數(shù)器自動執(zhí)行清零操作。
[0019]可選地,所述最大重傳次數(shù)寄存器的值通過軟件設(shè)置。
[0020]可選地,所述SD設(shè)備包括一個數(shù)據(jù)讀寫FIF0,用于臨時保存讀取或?qū)懭霐?shù)據(jù)塊;當所述SD主機讀取數(shù)據(jù)塊時,首先把所述SD設(shè)備的數(shù)據(jù)讀寫FIFO的當前讀指針的值保存在一個臨時讀指針中;當所述SD主機讀取所述數(shù)據(jù)塊完成并確定所讀取的數(shù)據(jù)塊存在CRC錯誤時,把所述臨時讀指針的值載入到所述當前讀指針中;自動重新讀取所述數(shù)據(jù)塊;當所述SD主機寫入數(shù)據(jù)塊時,首先把所述SD設(shè)備的數(shù)據(jù)讀寫FIFO的當前寫指針的值保存在一個臨時寫指針中;當寫入所述數(shù)據(jù)塊完成并確定所寫入的數(shù)據(jù)塊存在CRC錯誤時,將所述臨時寫指針的值載入到所述當前寫指針中;自動重新寫入所述數(shù)據(jù)塊。
[0021]本發(fā)明還提供一種SD主機,所述SD主機包括:標識主機重傳寄存器,用于標識所述SD主機是否具備數(shù)據(jù)重傳功能;使能主機重傳寄存器,用于使能所述SD主機的數(shù)據(jù)重傳功能;如果所述SD主機具備自動重傳功能且所述自動重傳功能使能,則當SD主機讀取數(shù)據(jù)塊并進行CRC檢測后,將所述CRC檢測結(jié)果發(fā)送給所讀取的SD設(shè)備;當所述SD主機檢測到讀取/寫入的數(shù)據(jù)塊存在CRC錯誤時,所述SD主機自動重新讀取/寫入所述存在CRC錯誤的數(shù)據(jù)塊。
[0022]可選地,所述SD主機還包括:最大重傳次數(shù)寄存器,用于存儲自動連續(xù)重傳的最大次數(shù);計數(shù)器,用于統(tǒng)計連續(xù)發(fā)生CRC錯誤的次數(shù);當所述SD主機檢測到讀取/寫入的數(shù)據(jù)塊存在CRC錯誤時,所述計數(shù)器自動執(zhí)行加I操作;當所述計數(shù)器的值小于所述存儲連續(xù)重傳次數(shù)的寄存器的值時,所述SD主機自動重新讀取/寫入所述存在CRC錯誤的數(shù)據(jù)塊;當所述SD主機檢測到讀取/寫入的數(shù)據(jù)塊不存在CRC錯誤時,所述計數(shù)器自動執(zhí)行清零操作。
[0023]可選地,所述最大重傳次數(shù)寄存器的值通過軟件設(shè)置。
[0024]可選地,所述SD主機包括一個數(shù)據(jù)讀寫FIFO,用于讀取或?qū)懭霐?shù)據(jù)塊;當讀取所述SD設(shè)備數(shù)據(jù)塊時,首先把所述SD主機的數(shù)據(jù)讀寫FIFO的當前寫指針的值保存在一個臨時寫指針中;當讀取所述SD設(shè)備所述數(shù)據(jù)塊完成并確定所讀取的數(shù)據(jù)塊存在CRC錯誤時,把所述臨時寫指針的值載入到所述當前寫指針中;自動重新向所述SD設(shè)備讀取所述數(shù)據(jù)塊;當寫入所述SD設(shè)備數(shù)據(jù)塊時,首先把所述數(shù)據(jù)讀寫FIFO的當前讀指針的值保存在一個臨時讀指針中;當寫入所述SD設(shè)備所述數(shù)據(jù)塊完成并確定所寫入的數(shù)據(jù)塊存在CRC錯誤時,將所述臨時讀指針的值載入到所述當前讀指針中;自動重新寫入所述數(shù)據(jù)塊。
[0025]如上所述,本發(fā)明的一種SD數(shù)據(jù)讀取/寫入錯誤處理方法及SD主機、SD設(shè)備,具有以下有益效果:在 SD 主機(Secure Digital Host)和 SD 設(shè)備(Secure Digital Device)之間建立數(shù)據(jù)傳輸出錯時的自動重傳機制,將大大提高數(shù)據(jù)的傳輸效率,并且完全不違反現(xiàn)有的SD官方協(xié)議,在不使能(enable)重傳機制的情況,完全兼容市面上其他SD主機和設(shè)備。
【附圖說明】
[0026]圖1顯示為本發(fā)明的一種SD數(shù)據(jù)讀取錯誤處理方法的一實施例的流程示意圖。
[