專(zhuān)利名稱(chēng)::一種高可靠軟件版本的更新方法和三種更新方式的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)字控制芯片領(lǐng)域,具體涉及到MCU或DSP的軟件更新方法和更新方式。
背景技術(shù):
:隨著IT技術(shù)的迅猛發(fā)展,數(shù)字化技術(shù)己被廣泛應(yīng)用到國(guó)民經(jīng)濟(jì)的各個(gè)領(lǐng)域。而數(shù)字化技術(shù)的核心包括兩個(gè)部分,一個(gè)是MCU或DSP等數(shù)字控制芯片,另--個(gè)是相應(yīng)的軟件程序。一般的數(shù)字芯片均帶有FLASH存儲(chǔ)空間,以及豐富的外設(shè)模塊,其中包括各種常見(jiàn)的通訊接口,例如,I2C、RS232等。同時(shí),為了滿(mǎn)足應(yīng)用需求的不斷變化,一般會(huì)在相應(yīng)的軟件程序設(shè)計(jì)中加入Bootloader功能,即利用系統(tǒng)已有的通訊接口,依靠BOOT程序來(lái)在線更新MCU或DSP中的軟件,在更新軟件完成之后,運(yùn)行更新版本程序來(lái)實(shí)現(xiàn)系統(tǒng)功能的擴(kuò)展或升級(jí)。目前,常用的一種更新方法是直接刷新FLASH中已有的代碼來(lái)實(shí)現(xiàn)軟件的升級(jí)。雖然該方法實(shí)現(xiàn)簡(jiǎn)單,但是存在意外風(fēng)險(xiǎn),即當(dāng)系統(tǒng)在更新軟件過(guò)程中意外斷電時(shí),MCU或DSP中原有的正常版本程序也將被破壞無(wú)法運(yùn)行,而導(dǎo)致系統(tǒng)崩潰。為了解決上述更新方法的不足,專(zhuān)利(公開(kāi)號(hào)CN1959635A)提出了另一種更新方法,即在MCU或DSP的FLASH中開(kāi)辟兩個(gè)空間A和B,其中A中用于存放正常版本的程序和版本切換程序,而B(niǎo)用于存放更新版本的程序,通過(guò)BOOT程序來(lái)選擇當(dāng)前運(yùn)行程序的版本。雖然這種方法提高了軟件更新的可靠性,但卻增加了程序設(shè)計(jì)的復(fù)雜性。因?yàn)镸CU或DSP中中斷向量表的地址一般是固定的,所以只能依靠復(fù)雜的版本切換程序來(lái)實(shí)現(xiàn)A和B區(qū)域中兩個(gè)版本軟件的切換。同時(shí),該專(zhuān)利提供的軟件更新方式也比較單一。
發(fā)明內(nèi)容本發(fā)明為了克服現(xiàn)有技術(shù)中的不足,提出了一種新的軟件版本更新方法和三種更新方式。其具體內(nèi)容如下1、將MCU或DSP的FLASH空間分為3個(gè)區(qū)域,如圖1所示。區(qū)域一用于存儲(chǔ)應(yīng)用程序正常版本,區(qū)域二用于存儲(chǔ)應(yīng)用程序更新版本,區(qū)域三用于存儲(chǔ)B00T程序。其中區(qū)域一和區(qū)域二的分配空間大小相等,因?yàn)閰^(qū)域二的主要用途在于存儲(chǔ)區(qū)域-一的運(yùn)行程序的更新版本軟件。2、本軟件程序設(shè)計(jì)主要分為兩個(gè)部分,一部分是應(yīng)用程序的設(shè)計(jì),另一部分是B00T程序的設(shè)計(jì)。出廠時(shí),應(yīng)用程序的正常版本放在區(qū)域一中,而B(niǎo)00T程序放在區(qū)域三中;更新時(shí),僅對(duì)應(yīng)用程序進(jìn)行更新。系統(tǒng)上電復(fù)位時(shí),軟件首先跳轉(zhuǎn)至BOOT程序開(kāi)始運(yùn)行。BOOT程序首先檢測(cè)區(qū)域二中的更新版本程序是否是新的和有效的,只有在檢測(cè)到區(qū)域二中的更新版本程序是新的和有效的,BOOT程序才會(huì)擦除區(qū)域一中的正常版本,再將區(qū)域二中的更新版本拷入?yún)^(qū)域一中,覆蓋正常版本后在區(qū)域一中設(shè)置正常版本有效標(biāo)志位。否則BOOT程序?qū)⒔K止軟件版本的更新,并設(shè)置更新失敗標(biāo)志。然后軟件將從區(qū)域三中B00T程序跳回區(qū)域一中運(yùn)行應(yīng)用程序的正常版本。因?yàn)橹挥性诟掳姹居行r(shí)才會(huì)擦除正常版本,因此,更新版本和正常版本不會(huì)同時(shí)無(wú)效。軟件在擦除區(qū)域一的過(guò)程中如果出現(xiàn)異常,如系統(tǒng)掉電,將導(dǎo)致區(qū)域一中的應(yīng)用程序破壞。然而,此時(shí)區(qū)域二中的更新軟件是有效的,當(dāng)系統(tǒng)重新上電運(yùn)行時(shí),BOOT程序會(huì)將區(qū)域二中的更新軟件拷入?yún)^(qū)域一中,然后從區(qū)域一開(kāi)始運(yùn)行,從而可以有效地解決常用版本更新方法存在的意外風(fēng)險(xiǎn)問(wèn)題。3、為了進(jìn)一步提高系統(tǒng)更新軟件的可靠性和靈活性,本發(fā)明提供了三種更新方式第一種是在下載更新程序結(jié)束后立即執(zhí)行更新操作;第二種是在下載更新程序結(jié)束后,PC機(jī)通過(guò)通訊發(fā)送更新命令才執(zhí)行更新操作;第三種是在下載更新程序結(jié)束后,在系統(tǒng)下--次上電復(fù)位后才執(zhí)行更新操作。其中第一種更新方式適用于對(duì)可靠性要求不是很?chē)?yán)格而且馬上需要更新的場(chǎng)合,該方法和公開(kāi)號(hào)CN1959635A的專(zhuān)利相似,但克服了它存在的不足;第二種更新方式可以讓客戶(hù)根據(jù)實(shí)際系統(tǒng)的運(yùn)行需要來(lái)選擇更新軟件的時(shí)機(jī),因此可以在合適的時(shí)間內(nèi)進(jìn)行軟件更新,將更新的風(fēng)險(xiǎn)進(jìn)一步降低。最后---種更新方式適合于對(duì)可靠性要求非常嚴(yán)格的場(chǎng)合,在系統(tǒng)斷電后重新上電復(fù)位后進(jìn)行更新。圖1是本發(fā)明提出的MCU或DSP的FLASH存儲(chǔ)分配結(jié)構(gòu)圖;圖2是本發(fā)明提出的系統(tǒng)軟件主流程圖,包括應(yīng)用正常版本程序和BOOT程序;圖3是BOOT程序中更新版本程序下載流程圖。具體實(shí)施例方式1、系統(tǒng)軟件主程序設(shè)計(jì)具體流程如圖2所示。系統(tǒng)上電復(fù)位時(shí),軟件跳轉(zhuǎn)至BOOT程序開(kāi)始運(yùn)行。首先檢測(cè)區(qū)域二中的更新版本程序是否是新的,如果是,則在清除新的標(biāo)志位后,將更新版本拷入?yún)^(qū)域一中,覆蓋原來(lái)的正常版本,再?gòu)母潞蟮恼0姹鹃_(kāi)始運(yùn)行。如果不是,則檢測(cè)應(yīng)用程序的正常版本是否有效,如果有效則運(yùn)行正常版本的程序。否則,檢測(cè)應(yīng)用程序更新版本是否有效,如果有效,則將更新版本拷入?yún)^(qū)域一中,覆蓋原來(lái)的正常版本,再?gòu)母潞蟮恼0姹鹃_(kāi)始運(yùn)行。2、B00T程序中更新版本程序下載流程圖如圖3所示。如果軟件需要更新時(shí),首先將更新版本軟件下載到區(qū)域二中,在更新版本軟件的下載過(guò)程中,對(duì)更新版本進(jìn)行校驗(yàn),如果更新版本下載成功,則在指定的地址中設(shè)置更新程序是新的和有效的標(biāo)志位,反之,則設(shè)置無(wú)效的標(biāo)志位。3、MCU或DSP的FLASH空間地址典型分配如表1所示,在實(shí)際應(yīng)用中,可以根據(jù)FLASH的大小、程序代碼長(zhǎng)度等因素靈活調(diào)節(jié)。假設(shè)MCU或DSP的FLASH空間范圍為0x0000-0xFFFF,每頁(yè)的大小為0x100。從下表l可見(jiàn),應(yīng)用程序更新版本和正常版本的FLASH空間大小都為0x7000。而且,不論是應(yīng)用程序正常版本和更新版本,其第一個(gè)運(yùn)行的指令都是跳轉(zhuǎn)到BOOT程序,其最后的兩組地址都用于存放新和有效的標(biāo)志位,這樣一來(lái),當(dāng)更新升級(jí)程序時(shí),僅需要將區(qū)域二中的更新程序整體拷入?yún)^(qū)域一中即可,而不需區(qū)<table>tableseeoriginaldocumentpage6</column></row><table>權(quán)利要求一種新的軟件版本更新方法和三種更新方式,其基本思想是利用區(qū)域二作為下載更新版本程序的存儲(chǔ)區(qū),當(dāng)更新版本程序下載成功后,再將其拷入?yún)^(qū)域一中,從而實(shí)現(xiàn)軟件版本的更新,具體包括如下幾個(gè)方面1、將MCU或DSP的FLASH空間分為三個(gè)區(qū)域,區(qū)域一用于存儲(chǔ)應(yīng)用程序正常版本,區(qū)域二用于存儲(chǔ)應(yīng)用程序更新版木,區(qū)域三用于存儲(chǔ)BOOT程序。2、系統(tǒng)上電復(fù)位時(shí),軟件跳至BOOT區(qū)域開(kāi)始運(yùn)行,首先檢測(cè)更新版本是否有效,如果有效,才執(zhí)行擦除區(qū)域一中的應(yīng)用程序。擦除完成后,將更新版本程序拷入?yún)^(qū)域一中,并在軟件更新完成后從區(qū)域一中運(yùn)行升級(jí)后的應(yīng)用程序,而不是在區(qū)域一和區(qū)域二中之間進(jìn)行應(yīng)用程序的切換。3、根據(jù)實(shí)際情況選擇三種更新方式中的一種來(lái)實(shí)現(xiàn)軟件更新。方式一在更新版本程序下載完成后,立即更新軟件;方式二在更新版本程序下載完成后,根據(jù)上位機(jī)發(fā)送的更新命令來(lái)更新軟件;方式三在更新版本程序下載完成后,不執(zhí)行更新操作。但在下一次系統(tǒng)上電復(fù)位后,BOOT程序檢測(cè)到更新版本的新標(biāo)志位有效時(shí),才自動(dòng)更新軟件。1、將MCU或DSP的FLASH空間分為三個(gè)區(qū)域,區(qū)域一用于存儲(chǔ)應(yīng)用程序正常版本,區(qū)域二用于存儲(chǔ)應(yīng)用程序更新版木,區(qū)域三用于存儲(chǔ)BOOT程序。2、系統(tǒng)上電復(fù)位時(shí),軟件跳至BOOT區(qū)域開(kāi)始運(yùn)行,首先檢測(cè)更新版本是否有效,如果有效,才執(zhí)行擦除區(qū)域一中的應(yīng)用程序。擦除完成后,將更新版本程序拷入?yún)^(qū)域一中,并在軟件更新完成后從區(qū)域一中運(yùn)行升級(jí)后的應(yīng)用程序,而不是在區(qū)域一和區(qū)域二中之間進(jìn)行應(yīng)用程序的切換。3、根據(jù)實(shí)際情況選擇三種更新方式中的一種來(lái)實(shí)現(xiàn)軟件更新。方式一在更新版本程序下載完成后,立即更新軟件方式二在更新版本程序下載完成后,根據(jù)上位機(jī)發(fā)送的更新命令來(lái)更新軟件;方式三在更新版本程序下載完成后,不執(zhí)行更新操作。但在下一次系統(tǒng)上電復(fù)位后,BOOT程序檢測(cè)到更新版本的新標(biāo)志位有效時(shí),才自動(dòng)更新軟件。全文摘要本發(fā)明公開(kāi)了一種高可靠軟件版本的更新方法和三種更新方式。該發(fā)明將MCU或DSP中的FLASH分為三個(gè)區(qū)域,區(qū)域一用于存儲(chǔ)正常版本程序,區(qū)域二用于存儲(chǔ)更新版本程序,區(qū)域三用于存儲(chǔ)BOOT程序。更新軟件首先將更新版本下載到區(qū)域二中,在需要更新時(shí),再將其拷入?yún)^(qū)域一中,根據(jù)實(shí)際情況,選擇三種更新方式第一種,在更新程序下載完成后,立即更新軟件;第二種,在更新程序下載完成后,根據(jù)上位機(jī)發(fā)送的更新命令來(lái)更新軟件;第三種,在更新程序下載完成后,并在下一次系統(tǒng)上電復(fù)位后,BOOT程序檢測(cè)到更新版本的有效標(biāo)志時(shí),才更新軟件。本發(fā)明具有實(shí)現(xiàn)簡(jiǎn)單、更新方式靈活、程序可靠性高等優(yōu)點(diǎn),可應(yīng)用于數(shù)字控制芯片領(lǐng)域。文檔編號(hào)G06F9/445GK101414264SQ200810162409公開(kāi)日2009年4月22日申請(qǐng)日期2008年11月24日優(yōu)先權(quán)日2008年11月24日發(fā)明者周遠(yuǎn)平,孫亞萍申請(qǐng)人:孫亞萍;周遠(yuǎn)平