本發(fā)明屬于具體涉及一種嵌入式設(shè)備應(yīng)用程序的自恢復(fù)方法。
背景技術(shù):
隨著經(jīng)濟技術(shù)的發(fā)展和人們生活水平的提高,嵌入式設(shè)備的應(yīng)用越來越廣泛,嵌入式設(shè)備也在人們的生產(chǎn)和生活之中發(fā)揮了無以倫比的巨大作用。
嵌入式設(shè)備因為存在嵌入式芯片,因此一般都具有自控控制、智能算法等功能。而嵌入式芯片的控制功能的發(fā)揮,則完全依賴于嵌入式芯片的控制程序。目前嵌入式系統(tǒng)的應(yīng)用程序是放在片外flash上,當(dāng)對應(yīng)用程序進行升級時,嵌入式芯片將采用flashboot模式。但是,由于意外的斷電或者其它故障,導(dǎo)致在燒錄flash時突然中斷,因而程序沒有燒錄完成。然而,目前的嵌入式芯片一般都不具備linux系統(tǒng)的u-boot自恢復(fù)功能,因此其后果是導(dǎo)致程序無法正常運行,需要返廠后用仿真器完成程序的燒錄。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種能夠穩(wěn)定提供備用程序和保證嵌入式芯片程序自動恢復(fù)的嵌入式設(shè)備應(yīng)用程序的自恢復(fù)方法。
本發(fā)明提供的這種嵌入式設(shè)備應(yīng)用程序的自恢復(fù)方法,包括如下步驟:
s1.根據(jù)控制芯片的指令集,開發(fā)控制芯片的二級bootload程序,所述二級bootload程序能夠?qū)lash進行讀寫、boot模式切換和讀取控制芯片i/o引腳電平信號;
s2.根據(jù)控制芯片的指令集,開發(fā)嵌入式芯片的工廠程序,所述工廠程序能夠?qū)lash進行讀寫、讀取嵌入式設(shè)備通信接口數(shù)據(jù)和對嵌入式芯片的應(yīng)用程序進行升級;
s3.將步驟s1開發(fā)的二級bootload程序和步驟s2開發(fā)的工廠程序分別就進行編譯得到編譯文件,并分別燒錄到flash的不同區(qū)域;
s4.若控制芯片的應(yīng)用程序無法正常啟動,則控制芯片自動重啟,此時控制芯片的一級bootload程序自動加載并從flash中完成二級bootload程序的加載;
s5.二級bootload程序控制控制芯片檢測i/o引腳電平信號,并在i/o引腳電平信號發(fā)生變化時從flash中加載工廠程序;
s6.工廠程序讀取嵌入式設(shè)備通信接口數(shù)據(jù),完成應(yīng)用程序的讀取并燒錄到flash中;
s7.控制芯片再次重啟,此時控制芯片的一級bootload程序自動加載并從flash中完成二級bootload程序的加載,二級bootload程序控制控制芯片檢測i/o引腳電平信號,并在i/o引腳電平信號未發(fā)生變化時從flash中加載步驟s6存儲的應(yīng)用程序,完成嵌入式設(shè)備控制芯片程序的自恢復(fù)。
所述的控制芯片為固化了一級bootload的嵌入式芯片。
所述的控制芯片為dsp。
所述的flash為nandflash或norflash。
所述的嵌入式設(shè)備通信接口為以太網(wǎng)通信接口或sd卡數(shù)據(jù)接口。
所述的二級bootload程序在flash中的存儲為二級bootload程序從flash中的第一個blocks開始進行存儲。
本發(fā)明提供的這種嵌入式設(shè)備應(yīng)用程序的自恢復(fù)方法,通過二級bootload程序和工廠程序的兩級程序加載,使得嵌入式設(shè)備的控制芯片能夠在flash存儲的應(yīng)用程序受損的情況下從設(shè)備外部獲取應(yīng)用程序數(shù)據(jù),從而使得嵌入式設(shè)備的控制芯片應(yīng)用程序的自行恢復(fù)功能更加可靠和穩(wěn)定;而且采用二級bootload程序代碼,代碼更為簡單可靠,因此啟動速度更快,響應(yīng)更加迅速。
附圖說明
圖1為本發(fā)明的方法流程圖。
具體實施方式
如圖1所示為本發(fā)明的方法流程圖,以下以ti公司的dsp芯片為例,說明本發(fā)明的具體方法:
本發(fā)明提供的這種嵌入式設(shè)備應(yīng)用程序的自恢復(fù)方法,包括如下步驟:
s1.根據(jù)控制芯片的指令集,開發(fā)控制芯片的二級bootload程序,所述二級bootload程序能夠?qū)lash進行讀寫、boot模式切換和讀取控制芯片i/o引腳電平信號;
具體為開發(fā)一套二級bootload程序,該程序功能包括:通過gpio檢測按鍵狀態(tài),來決定二級bootload程序是從flash的30blocks開始加載工廠程序,還是從flash的200blocks開始加載應(yīng)用程序;讀取flash程序內(nèi)容時,根據(jù)ti的ais格式說明,找到sectionload(0×58535901)標(biāo)識,將數(shù)據(jù)導(dǎo)入指定的存儲空間(片內(nèi)ram或者片外sdram)。同時找到j(luò)ump(0×58535905)標(biāo)識,通過匯編代碼完成跳轉(zhuǎn)到c入口c_int00的操作;
s2.根據(jù)控制芯片的指令集,開發(fā)嵌入式芯片的工廠程序,所述工廠程序能夠?qū)lash進行讀寫、讀取嵌入式設(shè)備通信接口數(shù)據(jù)和對嵌入式芯片的應(yīng)用程序進行升級;
具體為開發(fā)一套工廠程序,該程序功能包括:通過以太網(wǎng)或者sd卡實現(xiàn)對應(yīng)用程序的升級;對升級是否成功也液晶顯示的方式告知;flash的讀寫功能;
s3.將步驟s1開發(fā)的二級bootload程序和步驟s2開發(fā)的工廠程序分別就進行編譯得到編譯文件,并分別燒錄到控制芯片的flash的不同區(qū)域;
具體為將二級bootload程序、工廠程序、應(yīng)用程序分別編譯,運用ti提供的aisgen.exe工具生成ais格式的bin文件,將二級bootload程序的bin文件通過仿真器從flash的第1blocks開始往后燒寫;將工廠程序的bin文件通過仿真器從flash的第30blocks開始往后燒寫;應(yīng)用程序的bin文件通過仿真器從flash的第200blocks開始往后燒寫;
s4.若控制芯片的應(yīng)用程序無法正常啟動,則控制芯片自動重啟,此時控制芯片的一級bootload程序自動加載并從flash中完成二級bootload程序的加載;
s5.二級bootload程序控制控制芯片檢測i/o引腳電平信號,并在i/o引腳電平信號發(fā)生變化時(比如按鍵按下,使得i/o引腳電平信號發(fā)生變化)從flash中的30blocks開始加載工廠程序,并完成工廠程序的c入口跳轉(zhuǎn)并運行;
s6.工廠程序讀取嵌入式設(shè)備通信接口數(shù)據(jù)(比如通過外部通過連接以太網(wǎng)口的網(wǎng)絡(luò)傳輸應(yīng)用程序數(shù)據(jù),或者從sd卡通信接口傳輸數(shù)據(jù)),完成應(yīng)用程序的讀取,并從flash中的第200blocks開始燒錄;
s7.控制芯片再次重啟,此時控制芯片的一級bootload程序自動加載并從flash中完成二級bootload程序的加載,二級bootload程序控制控制芯片檢測i/o引腳電平信號,并在i/o引腳電平信號未發(fā)生變化時從flash中的200blocks開始加載步驟s6存儲的應(yīng)用程序,完成應(yīng)用程序的c入口跳轉(zhuǎn)并運行,完成嵌入式設(shè)備控制芯片程序的自恢復(fù)。