專利名稱:一種數(shù)據(jù)存儲以及讀取方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)的存儲以及讀取方法改進方案。
背景技術(shù):
電池管理系統(tǒng)中常采用電可擦可編程只讀存儲器EEPROM來進行數(shù)據(jù)存儲,并且電池管理系統(tǒng)中通常只有一個EEPR0M。電池管理系統(tǒng)所有重要的控制參數(shù)和運行數(shù)據(jù)都要保存在該存儲器中,在電池管理系統(tǒng)初始化的過程中需要從EEPROM中讀取初始化參數(shù),讀取之前保存的數(shù)據(jù),在電池管理系統(tǒng)運行的過程中,需要實時保存電池的剩余電量、故障信息等數(shù)據(jù)。電池管理系統(tǒng)穩(wěn)定可靠的運行需要這些參數(shù)和數(shù)據(jù)做保證,因此數(shù)據(jù)存儲的可靠性,可恢復(fù)性顯得尤為重要。電池管理系統(tǒng)數(shù)據(jù)保存在單一一個芯片中,如果只保存一份數(shù)據(jù)或者沒有可靠的備份恢復(fù)機制,那么在數(shù)據(jù)寫入的過程中因為電源不穩(wěn)或受到干擾是有可能會出現(xiàn)錯誤的,如果出現(xiàn)錯誤這份數(shù)據(jù)就丟失了且不可恢復(fù)。同樣的若芯片某部分區(qū)域損壞了,該區(qū)域的數(shù)據(jù)就丟失且不可恢復(fù)了。這些問題會直接導(dǎo)致電池管理系統(tǒng)不能正常運行?,F(xiàn)有的在EEPROM中保存數(shù)據(jù)的方法較為簡單,一種是只保存一份數(shù)據(jù),該數(shù)據(jù)遭到破壞以后就無法獲得該數(shù)據(jù),且不能通過其他辦法恢復(fù)數(shù)據(jù),其可靠性差。另外一種方法是保存兩份數(shù)據(jù),一個正本一個副本,讀取時正副本的數(shù)據(jù)一致則認為數(shù)據(jù)是正確的,當(dāng)數(shù)據(jù)不一致時,無法區(qū)分哪一個數(shù)據(jù)出錯,也無法對數(shù)據(jù)恢復(fù)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明要解決的技術(shù)問題是提供一種數(shù)據(jù)存儲與讀取可靠、具有一定的數(shù)據(jù)恢復(fù)功能的數(shù)據(jù)存儲讀取方法。本發(fā)明采用如下方案實現(xiàn)
一種數(shù)據(jù)存儲以及讀取方法,包括數(shù)據(jù)存儲步驟以及數(shù)據(jù)讀取步驟,所述數(shù)據(jù)存儲步驟包括
(11)預(yù)先在存儲器上分出a、b、c、d四個區(qū),其中a區(qū)用于存儲數(shù)據(jù)正本,b、c、d三個區(qū)用于存儲數(shù)據(jù)副本;
(12)將需存入的數(shù)據(jù)依次存儲于a、b、c、d四個區(qū)中,形成一個數(shù)據(jù)正本,三個數(shù)據(jù)副
本;
所述數(shù)據(jù)讀取步驟包括
(21)依次讀取a區(qū)數(shù)據(jù)、b區(qū)數(shù)據(jù);
(22)判斷a區(qū)、b區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則進入(25)步
驟;
(23)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則表示a區(qū)、b區(qū)數(shù)據(jù)正確而c區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)寫入c區(qū),然后進入下一步;
(24)讀取d區(qū)數(shù)據(jù),并判斷d區(qū)數(shù)據(jù)是否與正確數(shù)據(jù)一致,如果一致則輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功,否則表示d區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入d區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功;
(25)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示b區(qū)數(shù)據(jù)錯誤,a 區(qū)、c區(qū)數(shù)據(jù)正確,并將正確數(shù)據(jù)重新寫入b區(qū),再進入(24)步驟,如果不一致則進入下一
步;
(26)判斷b區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示a區(qū)數(shù)據(jù)錯誤,b區(qū)、c區(qū)數(shù)據(jù)正確, 并將正確數(shù)據(jù)重新寫入a區(qū),再進入(24)步驟,如果不一致則進入下一步;
(27)讀取d區(qū)數(shù)據(jù),判斷d區(qū)數(shù)據(jù)是否與a區(qū)、b區(qū)、c區(qū)的數(shù)據(jù)一致,如果d區(qū)與其中一區(qū)數(shù)據(jù)一致,則表示d區(qū)與d區(qū)數(shù)據(jù)一致的該區(qū)數(shù)據(jù)正確,其他兩個區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入其他兩區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功,如果d區(qū)與其他三個區(qū)的數(shù)據(jù)均不一致,則讀取數(shù)據(jù)失敗,返回錯誤信息。另外,在數(shù)據(jù)存儲步驟中,其中的(12)步驟具體為
(121)存儲數(shù)據(jù)到a區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(122)存儲數(shù)據(jù)到b區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(123)存儲數(shù)據(jù)到c區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(124)存儲數(shù)據(jù)到d區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則表示數(shù)據(jù)的存儲完全正確,返回成功信息,數(shù)據(jù)存儲步驟完成,否則返回數(shù)據(jù)存儲失敗信息。本發(fā)明提供的數(shù)據(jù)存儲讀取方法,采用多冗余備份、逐次寫入的方式對數(shù)據(jù)進行存儲和讀取、恢復(fù),在存儲器上提供多備份機制,保證數(shù)據(jù)可靠的寫入,提高了數(shù)據(jù)可靠性和防破壞性能,讀取數(shù)據(jù)時,即使在部分數(shù)據(jù)遭到破壞情況下也能夠利用正常的數(shù)據(jù)對破壞的數(shù)據(jù)進行恢復(fù),保證數(shù)據(jù)讀取的正確性。說明書附圖
圖1為本發(fā)明實施例數(shù)據(jù)存儲步驟流程圖。圖2為本實施例數(shù)據(jù)讀取步驟流程圖。
具體實施例方式為了便于本領(lǐng)域技術(shù)人員理解,下面將結(jié)合附圖以及實施例對本發(fā)明作進一步詳細描述
本實施例揭示的數(shù)據(jù)存儲以及讀取方法采用了多冗余備份、逐次寫入的方式存儲數(shù)據(jù),保證數(shù)據(jù)存入的正確性,而當(dāng)部分數(shù)據(jù)遭到破壞的時候,利用多個備份數(shù)據(jù)對比讀取正確數(shù)據(jù),并對錯誤數(shù)據(jù)進行有效恢復(fù),提高了電動汽車數(shù)據(jù)的可靠性。該方法包括數(shù)據(jù)存儲步驟以及數(shù)據(jù)讀取步驟,如附圖1所示,其中的數(shù)據(jù)存儲步驟為
(11)預(yù)先在存儲器上分出a、b、c、d四個區(qū),其中a區(qū)用于存儲數(shù)據(jù)正本,b、c、d三個區(qū)用于存儲數(shù)據(jù)副本;
(12)將需存入的數(shù)據(jù)依次存儲于a、b、c、d四個區(qū)中,形成一個數(shù)據(jù)正本,三個數(shù)據(jù)副本。其中的(12)步驟具體為
(121)存儲數(shù)據(jù)到a區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(122)存儲數(shù)據(jù)到b區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(123)存儲數(shù)據(jù)到c區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;
(124)存儲數(shù)據(jù)到d區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則表示數(shù)據(jù)的存儲完全正確,返回成功信息,數(shù)據(jù)存儲步驟完成,否則返回數(shù)據(jù)存儲失敗信息。在上述存儲寫入方法具有如下優(yōu)點(1)共存儲了 4個份數(shù)據(jù),提高了數(shù)據(jù)的可靠性,當(dāng)某區(qū)域硬件損壞無法讀取數(shù)據(jù)時,其他區(qū)域的數(shù)據(jù)仍能讀出并提供有效數(shù)據(jù);(2)寫入的4份數(shù)據(jù)之間可以互相對比,以確認得到正確的數(shù)據(jù),并對錯誤值的恢復(fù)提供了數(shù)據(jù)源;(3)采用逐次寫入的方法,確保每個區(qū)域只有寫入正確時,才能進行下一區(qū)域的操作, 這樣即使寫入數(shù)據(jù)時受到干擾或者系統(tǒng)斷電等原因造成某區(qū)域的數(shù)據(jù)寫入錯誤,接下來的寫入操作就會停止,保證了其他3個區(qū)域的數(shù)據(jù)仍能保持為上一次寫入的正確值。再如附圖2所示數(shù)據(jù)讀取步驟包括
(21)依次讀取a區(qū)數(shù)據(jù)、b區(qū)數(shù)據(jù);
(22)判斷a區(qū)、b區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則進入(25)步驟;
(23)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則表示a區(qū)、b區(qū)數(shù)據(jù)正確而c區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)寫入c區(qū),然后進入下一步;
(24)讀取d區(qū)數(shù)據(jù),并判斷d區(qū)數(shù)據(jù)是否與正確數(shù)據(jù)一致,如果一致則輸出正確數(shù)據(jù), 數(shù)據(jù)讀取成功,否則表示d區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入d區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功;
(25)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示b區(qū)數(shù)據(jù)錯誤,a 區(qū)、c區(qū)數(shù)據(jù)正確,并將正確數(shù)據(jù)重新寫入b區(qū),再進入(24)步驟,如果不一致則進入下一
止
少;
(26)判斷b區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示a區(qū)數(shù)據(jù)錯誤,b區(qū)、c區(qū)數(shù)據(jù)正確, 并將正確數(shù)據(jù)重新寫入a區(qū),再進入(24)步驟,如果不一致則進入下一步;
(27)讀取d區(qū)數(shù)據(jù),判斷d區(qū)數(shù)據(jù)是否與a區(qū)、b區(qū)、c區(qū)的數(shù)據(jù)一致,如果d區(qū)與其中一區(qū)數(shù)據(jù)一致,則表示d區(qū)與d區(qū)數(shù)據(jù)一致的該區(qū)數(shù)據(jù)正確,其他兩個區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入其他兩區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功,如果d區(qū)與其他三個區(qū)的數(shù)據(jù)均不一致,則讀取數(shù)據(jù)失敗,返回錯誤信息。在上述數(shù)據(jù)讀取步驟中,通過4個區(qū)域的數(shù)據(jù)對比分析,只要4個中有兩個數(shù)據(jù)是一致的就能讀取得到正確的數(shù)據(jù),其他錯誤的數(shù)據(jù)也能夠根據(jù)正確的數(shù)據(jù)進行恢復(fù)。以上為本發(fā)明的其中具體實現(xiàn)方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些顯而易見的替換形式均屬于本發(fā)明的保護范圍。
權(quán)利要求
1.一種數(shù)據(jù)存儲以及讀取方法,包括數(shù)據(jù)存儲步驟以及數(shù)據(jù)讀取步驟,其特征在于,所述數(shù)據(jù)存儲步驟包括(11)預(yù)先在存儲器上分出a、b、c、d四個區(qū),其中a區(qū)用于存儲數(shù)據(jù)正本,b、c、d三個區(qū)用于存儲數(shù)據(jù)副本;(12)將需存入的數(shù)據(jù)依次存儲于a、b、c、d四個區(qū)中,形成一個數(shù)據(jù)正本,三個數(shù)據(jù)副本;所述數(shù)據(jù)讀取步驟包括(21)依次讀取a區(qū)數(shù)據(jù)、b區(qū)數(shù)據(jù);(22)判斷a區(qū)、b區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則進入(25)步驟;(23)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則進入下一步,如果不一致則表示a區(qū)、b區(qū)數(shù)據(jù)正確而c區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)寫入c區(qū),然后進入下一步;(24)讀取d區(qū)數(shù)據(jù),并判斷d區(qū)數(shù)據(jù)是否與正確數(shù)據(jù)一致,如果一致則輸出正確數(shù)據(jù), 數(shù)據(jù)讀取成功,否則表示d區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入d區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功;(25)讀取c區(qū)數(shù)據(jù),并判斷a區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示b區(qū)數(shù)據(jù)錯誤,a 區(qū)、c區(qū)數(shù)據(jù)正確,并將正確數(shù)據(jù)重新寫入b區(qū),再進入(24)步驟,如果不一致則進入下一止少;(26)判斷b區(qū)、c區(qū)數(shù)據(jù)是否一致,如果一致則表示a區(qū)數(shù)據(jù)錯誤,b區(qū)、c區(qū)數(shù)據(jù)正確, 并將正確數(shù)據(jù)重新寫入a區(qū),再進入(24)步驟,如果不一致則進入下一步;(27)讀取d區(qū)數(shù)據(jù),判斷d區(qū)數(shù)據(jù)是否與a區(qū)、b區(qū)、c區(qū)的數(shù)據(jù)一致,如果d區(qū)與其中一區(qū)數(shù)據(jù)一致,則表示d區(qū)與d區(qū)數(shù)據(jù)一致的該區(qū)數(shù)據(jù)正確,其他兩個區(qū)數(shù)據(jù)錯誤,并將正確數(shù)據(jù)重新寫入其他兩區(qū),輸出正確數(shù)據(jù),數(shù)據(jù)讀取成功,如果d區(qū)與其他三個區(qū)的數(shù)據(jù)均不一致,則讀取數(shù)據(jù)失敗,返回錯誤信息。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存儲以及讀取方法,其特征在于,在數(shù)據(jù)存儲步驟中,其中的(12)步驟具體為(121)存儲數(shù)據(jù)到a區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;(122)存儲數(shù)據(jù)到b區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;(123)存儲數(shù)據(jù)到c區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則進入下一步,否則返回數(shù)據(jù)存儲失敗信息;(124)存儲數(shù)據(jù)到d區(qū),判斷數(shù)據(jù)是否存儲成功,如果成功則表示數(shù)據(jù)的存儲完全正確,返回成功信息,數(shù)據(jù)存儲步驟完成,否則返回數(shù)據(jù)存儲失敗信息。
全文摘要
本發(fā)明涉及一種數(shù)據(jù)的存儲以及讀取方法改進方案該方法,包括數(shù)據(jù)存儲步驟以及數(shù)據(jù)讀取步驟,本發(fā)明提供的數(shù)據(jù)存儲讀取方法,采用多冗余備份、逐次寫入的方式對數(shù)據(jù)進行存儲和讀取、恢復(fù),在存儲器上提供多備份機制,保證數(shù)據(jù)可靠的寫入,提高了數(shù)據(jù)可靠性和防破壞性能,讀取數(shù)據(jù)時,即使在部分數(shù)據(jù)遭到破壞情況下也能夠利用正常的數(shù)據(jù)對破壞的數(shù)據(jù)進行恢復(fù),保證數(shù)據(jù)讀取的正確性。
文檔編號G06F13/16GK102521084SQ20111042932
公開日2012年6月27日 申請日期2011年12月20日 優(yōu)先權(quán)日2011年12月20日
發(fā)明者劉飛, 張金靈, 文鋒, 阮旭松 申請人:惠州市億能電子有限公司