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