程序在線升級方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及程序在線升級方法,特別涉及嵌入式系統(tǒng)中固件程序的在線升級方 法。
【背景技術(shù)】
[0002] 在公開號為CN101271396的中國專利中公開一種在線升級方法,具體為系統(tǒng)上電 后判斷更新標(biāo)志是否有效;若更新標(biāo)志有效,進行下載并更新;隨后進入判斷下載固件是 否成功步驟;所述步驟中判斷為下載成功,會進入設(shè)置更新標(biāo)志為無效的步驟。此時,有可 能出現(xiàn)了如下兩種異常:
[0003] 第一種,如果固件本身有問題,如:燒錄的固件本身被破壞,或者燒錄了錯誤的固 件等原因無法在嵌入式系統(tǒng)被有效運行,那么該嵌入式系統(tǒng)就無法再正常工作;
[0004] 第二種,如果固件本身有問題,如:燒錄的固件版本錯誤,雖可以在嵌入式系統(tǒng)被 有效運行,但是無法執(zhí)行設(shè)置更新標(biāo)志為有效的步驟,那么該嵌入式系統(tǒng)就不再具有在線 升級功能。
[0005] 對于上述兩種異常,該嵌入式系統(tǒng)都已經(jīng)沒有能力執(zhí)行恢復(fù)操作,就需要進行返 廠維修了。
[0006] 為了避免上述問題,在公開號為CN102857818和CN1464386兩份中國專利中介紹 了一種更為可靠的升級方式。其基本原理是:嵌入式系統(tǒng)上電后,先運行一段代碼,判斷是 否需要進行在線升級操作。如果需要,則執(zhí)行在線升級操作。否則,在跳轉(zhuǎn)執(zhí)行嵌入式系統(tǒng) 正常業(yè)務(wù)功能程序。
[0007] 以所述CN1464386專利的升級流程為例,系統(tǒng)上電后,先運行一段初始化代碼;之 后與外部進行通信連接,根據(jù)外部的指示判斷是否需要進行在線升級操作。這種升級方式 看似非??煽?,讓系統(tǒng)一直都具備在線升級功能。但是,這種升級方式會給系統(tǒng)帶來一個非 常大的隱患:嵌入式系統(tǒng)上電后,需要先運行一段代碼,如果這段程序有誤,影響到了后續(xù) 嵌入式系統(tǒng)正常業(yè)務(wù)功能程序的執(zhí)行,那么嵌入式系統(tǒng)上電后先運行的這一段代碼就必須 得更新。而且,為了保證這一段代碼更新操作可靠,不影響嵌入式系統(tǒng)使用和在線升級功 能,一般都需要返廠維修,升級這一段代碼。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明所要解決的是在升級過程中可能出現(xiàn)的固件本身有問題或初始化代碼有 誤導(dǎo)致的無法正常升級程序問題。
[0009] 為解決上述問題,本發(fā)明提供一種程序在線升級方法,包括:
[0010] 系統(tǒng)上電啟動;
[0011] 判斷復(fù)位的方式否為升級異常復(fù)位;
[0012] 若是異常復(fù)位,執(zhí)行升級功能程序;
[0013] 若不是異常復(fù)位,查詢標(biāo)記值,根據(jù)標(biāo)記值指向執(zhí)行正常功能程序或升級功能程 序,
[0014] 所述升級功能程序用于給正常功能程序進行升級。
[0015] 進一步,所述程序在線升級方法,還包括,在執(zhí)行所述正常功能程序時:
[0016] 接收升級命令;
[0017] 確認(rèn)標(biāo)記值,使其指向升級功能程序。
[0018] 進一步,所述程序在線升級方法,還包括,在執(zhí)行所述升級功能程序時:
[0019] 確認(rèn)標(biāo)記值,使其指向升級功能程序。
[0020] 進一步,所述程序在線升級方法,還包括:
[0021] 判斷升級是否成功;
[0022] 確認(rèn)升級成功后,確認(rèn)標(biāo)記值,使其指向正常功能程序;及
[0023] 通過軟件重啟系統(tǒng)。
[0024] 本發(fā)明還提供另一種程序在線升級方法,內(nèi)存中包括第一區(qū)間和第二區(qū)間,
[0025] 系統(tǒng)上電啟動;
[0026] 查詢標(biāo)記值的指向;
[0027] 當(dāng)標(biāo)記值指向第一區(qū)間時執(zhí)行第一區(qū)間程序;
[0028] 判斷是否需要進行升級;
[0029] 確認(rèn)升級后,對第二區(qū)間進行升級。
[0030] 進一步,所述程序在線升級方法,還包括:
[0031] 升級完成后確認(rèn)標(biāo)記值,使其指向第二區(qū)間;及
[0032] 通過軟件重啟系統(tǒng)。
[0033] 進一步,所述程序在線升級方法,還包括:
[0034] 所述第一區(qū)間和第二區(qū)間分別包括第一值和第二值;
[0035] 開始升級后確認(rèn)標(biāo)記值,使其指向第一區(qū)間的第二值;及
[0036] 完成升級后確認(rèn)標(biāo)記值,使其指向第二區(qū)間的第一值。
[0037] 進一步,所述程序在線升級方法,還包括:
[0038] 系統(tǒng)上電啟動后判斷復(fù)位方式是否為異常復(fù)位;
[0039] 判斷為異常復(fù)位,確認(rèn)標(biāo)記值的指向;
[0040] 若指向第一值,執(zhí)行標(biāo)記值所指相反區(qū)間程序;
[0041 ] 若指向第二值,執(zhí)行標(biāo)記值所指空間程序。
[0042] 進一步,所述檢查升級包的正確是根據(jù)CRC和校驗和的方式進行。
[0043] 本發(fā)明還提供一種程序在線升級系統(tǒng),包括:
[0044] 控制器,支持至少兩種復(fù)位方式;
[0045] 升級異常復(fù)位鍵,向控制器輸入異常復(fù)位狀態(tài);及
[0046] FLASH 模塊,
[0047] 其中,所述FLASH模塊包括:
[0048] 啟動跳轉(zhuǎn)區(qū)間,設(shè)置有至少兩種復(fù)位狀態(tài);
[0049] 標(biāo)記區(qū)間,標(biāo)記指向升級功能程序區(qū)間或正常功能程序區(qū)間;
[0050] 升級功能程序區(qū)間,存儲有升級功能程序;及
[0051] 正常功能程序區(qū)間,存儲有正常功能程序,
[0052] 所述升級功能程序用于給所述正常功能程序進行升級。
[0053] 本發(fā)明還提供一種程序在線升級系統(tǒng),包括:
[0054] 控制器,支持至少兩種復(fù)位方式;
[0055] 升級異常復(fù)位鍵,向控制器輸入升級版本回退復(fù)位狀態(tài);及
[0056] FALSH 模塊,
[0057] 其中,所述FALSH模塊包括:
[0058] 啟動跳轉(zhuǎn)區(qū)間,設(shè)置有至少兩種復(fù)位狀態(tài);
[0059] 標(biāo)記區(qū)間,標(biāo)記指向第一區(qū)間或第二區(qū)間;及
[0060] 第一區(qū)間和第二區(qū)間,分別獨立存儲正常功能程序。
[0061] 進一步,所述升級異常復(fù)位鍵和升級異常復(fù)位鍵是采用ERIP或GPI0的引腳電平 狀態(tài)的復(fù)位方式。
[0062] 與現(xiàn)有技術(shù)相比,根據(jù)本發(fā)明的程序在線升級方式可以保證嵌入式系統(tǒng)升級功能 完全可靠。當(dāng)升級失敗時,嵌入式系統(tǒng)完全有能力執(zhí)行恢復(fù)操作,不需要進行返廠維修。
【附圖說明】
[0063] 圖1是本發(fā)明第一實施例的備份方式升級中程序區(qū)間的選擇流程圖;
[0064] 圖2是本發(fā)明第一實施例的系統(tǒng)執(zhí)行應(yīng)用程序區(qū)間程序時的升級流程圖;
[0065] 圖3是本發(fā)明第一實施例的執(zhí)行備份升級功能區(qū)間程序時的升級流程圖;
[0066] 圖4是本發(fā)明第二實施例的雙系統(tǒng)方式的升級流程圖;
[0067] 圖5是本發(fā)明第三實施例的雙系統(tǒng)方式的升級流程圖。
【具體實施方式】
[0068] 為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明 的【具體實施方式】做詳細(xì)的說明。在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但 是本發(fā)明能夠以多種不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本 發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的【具體實施方式】的限制。
[0069] 本文介紹的升級方式對硬件有一定要求,其要求如下:
[0070] CPU需要支持復(fù)位控制(Reset Control)功能。從復(fù)位類型(Reset Type)寄 存器中,至少可以區(qū)分出如下幾種復(fù)位方式:上電復(fù)位(Power On Reset)、軟件觸發(fā)復(fù)位 (Software Reset)、外部引腳復(fù)位(External Reset Input Pin,簡稱:ERIP),所述外部引 腳復(fù)位為外部復(fù)位按鍵,按下該按鍵,相當(dāng)于使用ERIP功能。
[0071] 實施例1 :備份方式的升級
[0072] 在FLASH中備份一個具有升級功能系統(tǒng),用于保證系統(tǒng)升級功能正常。如下表所 示,在這類系統(tǒng)中至少包含4個部分。
[0073] Flash空間分配:
[0075] 當(dāng)系統(tǒng)啟動時,先執(zhí)行"啟動跳轉(zhuǎn)區(qū)間"中的程序。這個程序根據(jù)系統(tǒng)當(dāng)前的復(fù)位 類型(Reset Type)和FLASH中標(biāo)記區(qū)間的標(biāo)記(Flag)值作為判斷依據(jù),選擇運行"備份升 級功能程序區(qū)間"或"正常APP應(yīng)用程序區(qū)間"的程序。標(biāo)記值僅需要兩種,一種指向運行 "備份升級功能程序區(qū)間";另一種指向運行"正常APP應(yīng)用程序區(qū)間"的程序。所述備份升 級功能程序是用于給所述正常功能程序進行升級。
[0076] 圖1是本發(fā)明第一實施例的備份方式升級中程序區(qū)間的選擇流程圖。如圖1所 示,程序區(qū)間的選擇流程包括:S11,系統(tǒng)上電啟動后查詢復(fù)位類型對應(yīng)的值;S12,判斷所 述值是否為升級異常復(fù)位鍵啟動,若是執(zhí)行S16,否則執(zhí)行S13 ;S13,查詢FLASH中的標(biāo)記 值;S14,判斷所述標(biāo)記值是否指向"正常APP應(yīng)用程序區(qū)間",若是執(zhí)行S15,否則執(zhí)行S16 ; S15,執(zhí)行"正常應(yīng)用區(qū)間"的程序;S16,執(zhí)行"備份升級功能程序區(qū)間"的程序。
[0077] 圖2是本發(fā)明第一實施例的系統(tǒng)執(zhí)行應(yīng)用程序區(qū)間程序時的升級流程圖。續(xù)圖1 中的流程,如圖2所示,在執(zhí)行"正常APP應(yīng)用程序區(qū)間"的程序時,升級流程具體包括:S21, 執(zhí)行"正常APP應(yīng)用程序區(qū)間"的程序;S22,接收到外部升級指令;S23,在接收到所述外部 升級指令以后確認(rèn)標(biāo)記值,使標(biāo)記值指向執(zhí)行"備份升級功能程序區(qū)間";S24,通過軟件重 新啟動。在進行重新啟動以后會再次進行圖1中所示的流程。上述過程中因為已將標(biāo)記值 設(shè)為指向執(zhí)行"備份升級功能程序區(qū)間",且無異常復(fù)位鍵啟動,根據(jù)圖1中所示的流程會 進行到執(zhí)行"備份升級功能程序區(qū)間"程序的步驟。
[0078] 圖3是本發(fā)明第一實施例的執(zhí)行備份升級功能區(qū)間程序時的升級流程圖。續(xù)圖 1和圖2中的流程,如圖3所示,在執(zhí)行"備份升級功能區(qū)間"的程序時,升級流程具體包 括:S31,系統(tǒng)執(zhí)行"備份升級功能程序區(qū)間"的程序;S32確認(rèn)標(biāo)記值,使其指向執(zhí)行"備 份升級功能程序區(qū)間"的程序;S33,接收外部升的級指令;S34,根據(jù)所述指令接收外部升 級數(shù)據(jù)包,并寫入FLASH中的"正常APP應(yīng)用程序區(qū)間";S35,利用循環(huán)冗佘校驗(Cyclic Redundancy Check,簡稱:CRC)或校驗和(Checksum)機制,檢查寫入FLASH空間的升級數(shù) 據(jù)包的正確性,S36,判斷升級是否成功,若成功進行S37,否則回到S33 ;S37,當(dāng)升級成功以 后確認(rèn)標(biāo)記值,使其指向"正常APP應(yīng)用程序區(qū)間";S38,通過軟件控制重啟系統(tǒng)。其中S32