本發(fā)明涉及一種固件控制系統(tǒng)和用于更新固件控制系統(tǒng)的固件的方法。
背景技術:
圖1示出一種用于執(zhí)行至少一個關鍵功能和至少一個普通功能的固件控制系統(tǒng)100。系統(tǒng)100例如可以是用于提供電源至負載102的電源管理系統(tǒng)。系統(tǒng)100的至少一個關鍵功能包括實時控制功能、關鍵系統(tǒng)保護功能、系統(tǒng)啟動功能等中的一個,而系統(tǒng)100的至少一個普通功能包括整理(housekeeping)功能、低優(yōu)先級通信功能、系統(tǒng)初始化功能等中的一個。系統(tǒng)100由存儲在存儲器106中且由處理器108執(zhí)行的固件104控制。
圖2示出了系統(tǒng)100中的固件104的結構。固件104包括:固件數據110、用于執(zhí)行至少一個關鍵功能的非可編程代碼組112,以及用于執(zhí)行至少一個普通功能的可編程代碼組114。非可編程代碼組在固件更新期間更新。
圖3示出了更新圖1中的固件104的傳統(tǒng)方法200的流程圖。在步驟202接收到固件更新請求時,在步驟204,系統(tǒng)100需要掉電或被旁路。在步驟206,新的固件存儲在存儲器106中,覆寫固件104。在新固件在步驟208中存儲在存儲器106中之后,在步驟210系統(tǒng)100被重置以確保新固件正確操作。然而,掉電和重置電源管理系統(tǒng)100對于連續(xù)負載操作請求帶來了風險和高成本,特別是對于關鍵負載(例如,數據服務器、醫(yī)療設備、交通調度系統(tǒng)等。因此,期望找到一種實時更新固件的方法以減少冗余備份系統(tǒng)投資的開銷。
附圖說明
參考下面的優(yōu)選實施例的描述結合附圖可以最佳地理解本發(fā)明及其目的和優(yōu)點,在附圖中:
圖1是傳統(tǒng)的用于向負載提供電源的電源管理系統(tǒng)的示意框圖;
圖2示出圖1的系統(tǒng)中的固件的結構;
圖3是更新圖1的系統(tǒng)中的固件的傳統(tǒng)方法的流程圖;
圖4是根據本發(fā)明一個實施例的用于實時固件更新的系統(tǒng)的示意框圖;
圖5是根據本發(fā)明另一實施例的圖4中的系統(tǒng)的存儲器的框圖;
圖6是根據本發(fā)明又一實施例的圖4中的系統(tǒng)的存儲器的框圖;
圖7是根據本發(fā)明一個實施例的將固件的新的可編程代碼組保存至具有圖4或5的存儲器的圖4的系統(tǒng)中的方法的流程圖;
圖8是根據本發(fā)明一個實施例的將固件的新的可編程代碼組保存至具有圖6中的存儲器的圖4的系統(tǒng)中的方法的流程圖;
圖9是根據本發(fā)明一個實施例的切換圖4的系統(tǒng)以使用新固件進行操作的方法的流程圖;以及
圖10是根據本發(fā)明一個實施例的重置圖4中的系統(tǒng)的方法的流程圖。
具體實施方式
下面結合附圖給出的具體描述意圖作為本發(fā)明當前優(yōu)選的實施例的說明,并不意圖表示可以實踐本發(fā)明的唯一形式。應理解,不同的實施例可以實現相同或等同功能,意圖將這些實施例包含在本發(fā)明的精神和范圍內。在附圖中,遍及整個附圖使用相同的數字指示相同的元件。另外,術語“包括”、“包含”或其任何其他變形,意圖覆蓋非排他性的包含,從而使得包括一列元件或步驟的模塊、電路、裝置組件、結構和方法步驟,其并不僅僅包括這些項,而是可以包括沒有明確列出的或這些模塊、電路、裝置組件或方法步驟所固有的其他元件或步驟。由“包括”引領的元件或步驟在沒有更多的限制的情況下,并不排除額外的相同元件或步驟(包括所述元件或步驟)的存在。
在一個實施例中,本發(fā)明提供了一種固件控制的系統(tǒng),其中所述固件包括用于執(zhí)行至少一個關鍵功能的非可編程代碼組以及用于執(zhí)行至少一個普通功能的可編程代碼組。所述系統(tǒng)包括存儲器,所述存儲器具有:用于存儲該非可編程代碼組的第一存儲塊,以及包括激活存儲塊和非激活存儲塊的第二和第三存儲塊。激活存儲塊存儲由系統(tǒng)執(zhí)行的第一可編程代碼組,而非激活存儲塊存儲當前未被系統(tǒng)執(zhí)行的第二可編程代碼組。所述系統(tǒng)還包括連接至所述存儲器的處理器。所述處理器包括用于接收新的可編程代碼組和固件更新請求的輸入單元。所述處理器還包括:連接至輸入單元的處理單元,用于執(zhí)行該非可編程代 碼組以及存儲在激活存儲塊中的所述第一可編程代碼組;以及連接至輸入單元的編程單元。編程單元識別非激活存儲塊,并在非激活存儲塊中存儲該新的可編程代碼組。在將該新的可編程代碼組存儲在非激活存儲塊中之后,處理單元基于固件更新請求從執(zhí)行存儲在激活存儲塊中的第一可編程代碼組切換至執(zhí)行非激活存儲塊中的該新的可編程代碼組。
在另一實施例中,本發(fā)明提供一種更新固件控制系統(tǒng)的固件的方法,其中所述固件包括用于執(zhí)行至少一個關鍵功能的非可編程代碼組和用于執(zhí)行至少一個普通功能的可編程代碼組。所述系統(tǒng)包括存儲器,所述存儲器具有用于存儲該非可編程代碼組的第一存儲塊,以及包括存儲第一可編程代碼組的激活存儲塊和存儲第二可編程代碼組的非激活存儲塊的第二和第三存儲塊,其中第一存儲塊中的非可編程代碼和存儲在激活存儲塊中的第一可編程代碼組在由系統(tǒng)執(zhí)行。所述方法包括:識別非激活存儲塊,在非激活存儲塊中存儲新的可編程代碼組,以及在存儲該新的可編程代碼組之后,基于固件更新請求從執(zhí)行存儲在激活存儲塊中的第一可編程代碼組切換至執(zhí)行存儲在非激活存儲塊中的該新的可編程代碼組,其中所述系統(tǒng)在所述存儲和切換步驟期間連續(xù)執(zhí)行所述至少一個關鍵功能。
現在參考圖4,示出了根據本發(fā)明一個實施例的用于實時固件更新的固件控制系統(tǒng)300的框圖。固件控制系統(tǒng)300包括存儲器302和連接至存儲器302的處理器304。系統(tǒng)300由固件控制,所述固件包括用于執(zhí)行至少一個關鍵功能的非可編程代碼組、用于執(zhí)行至少一個普通功能的可編程代碼組、以及固件數據組。
在一個優(yōu)選實施例中,存儲器302包括用于存儲非可編程代碼組的第一存儲塊306,分別用于存儲第一和第二可編程代碼組的第二和第三存儲塊308和310,以及用于存儲固件數據組的第四存儲塊312。在一個優(yōu)選實施例中,第一和第二可編程代碼組分別包括用于執(zhí)行第一和第二可編程代碼組的基本數據組,例如第一和第二可編程代碼組中的一些預定義的初始值變量、常量。在操作中,第二和第三存儲塊包括:一個激活存儲塊,其中的可編程代碼組當前正在由系統(tǒng)300執(zhí)行;以及一個非激活存儲塊,其中的可編程代碼組未在被系統(tǒng)300執(zhí)行。例如,若第二存儲塊308中的第一可編程代碼組在被系統(tǒng)300執(zhí)行,則第二存儲塊308是激活存儲塊而第三存儲塊310是非激活存儲塊。存儲在第 四存儲塊312中的該固件數據組包括用于至少一個關鍵功能的非可編程數據組以及用于至少一個普通功能的可編程數據組。
處理器304包括:用于接收新的可編程代碼組和固件更新請求的輸入單元314;以及處理單元316,其連接至輸入單元314,用于執(zhí)行存儲在第一存儲塊306中的非可編程代碼組以及存儲在當前是激活存儲塊的第二存儲塊308中的第一可編程代碼組。在一個優(yōu)選實施例中,新的可編程代碼組包括用于執(zhí)行新的可編程代碼組的新的基本數據組,例如在新的可編程代碼組中的一些預定的初始值變量、常量。在一個優(yōu)選實施例中,固件更新請求包括在存儲器302中存儲新的可編程代碼組的存儲請求。
處理器304還包括連接至輸入單元314的編程單元318,其中編程單元318識別第三存儲塊310是非激活存儲塊,并基于該識別將新的可編程代碼組存儲至第三存儲塊310中。在一個優(yōu)選實施例中,固件包括系統(tǒng)100的引導加載部(boot loader),從而一旦從輸入單元314接收到存儲請求,就可執(zhí)行存儲新的可編程代碼組。引導加載部可位于非可編程代碼組中或在可編程代碼(例如,第一和第二可編程代碼組)中。若引導加載部在可編程代碼中,則引導加載部可通過固件更新來更新。處理器304優(yōu)選包括系統(tǒng)300的MCU(微控制器單元)的處理器,或替代地,可以包括系統(tǒng)300中的單獨的處理器。
在一個優(yōu)選實施例中,系統(tǒng)300包括多個寄存器320和用于設置所述多個寄存器320的控制單元322??刂茊卧?22連接至輸入單元314、處理單元316和所述多個寄存器320。寄存器320優(yōu)選是處理器304的一部分或存儲器302的一部分。所述多個寄存器320包括用于存儲指示激活存儲塊的第一標記的第一寄存器320a。在一個優(yōu)選實施例中,控制單元322通過檢測在由處理單元316訪問的激活存儲塊來設置第一標記,從而編程單元318基于第一標記識別非激活存儲塊。在一個優(yōu)選實施例中,在第三存儲塊310中存儲新的可編程代碼組時,編程單元318覆寫存儲在第三存儲塊310中的第二可編程代碼組。在一個優(yōu)選實施例中,輸入單元314包括用于緩沖一部分新的可編程代碼組的緩沖器324,其中在緩沖器324中接收預定量的該部分的新的可編程代碼組之后,編程單元318將該部分的新的可編程代碼組存儲在非激活存儲塊中。
在一個優(yōu)選實施例中,如圖4所示,第一至第四存儲塊306-312分別位于存儲器302的四個獨立的子存儲單元中,所述子存儲單元包括:用于存儲非可 編程代碼組的第一子存儲單元326,其優(yōu)選是用于更好數據保護的一次可編程只讀存儲器(one-time programmable read-only memory,OTPROM);用于存儲第一和第二可編程代碼組的第二和第三子存儲單元328和330,其優(yōu)選是閃存組(Flash memory bank);以及用于存儲該固件數據組的第四子存儲單元332,其優(yōu)選是隨機存取存儲器(RAM)。這允許系統(tǒng)300在編程單元318在將新的可編程代碼組存儲至第三子存儲單元330中時,通過執(zhí)行第一子存儲單元326中的非可編程代碼組和第二子存儲單元328中的第一可編程代碼組,繼續(xù)以高執(zhí)行效率執(zhí)行所述至少一個關鍵功能和所述至少一個普通功能。
在將新的可編程代碼組存儲至第三存儲塊310之后,處理單元316將第三存儲塊310識別為非激活存儲塊,并從執(zhí)行存儲在第二存儲塊308中的第一可編程代碼組切換至執(zhí)行在第三存儲塊310中的新的可編程代碼組。在一個優(yōu)選實施例中,固件更新請求還包括固件切換請求,其中該切換是基于固件切換請求發(fā)起的。在另一優(yōu)選實施例中,切換是緊接著新的可編程代碼組存儲在第三存儲塊310之后自動地啟動的。所述切換包括禁用可屏蔽中斷以及初始化用于新的可編程代碼組的矢量基地址(vector base address,VBA)以及初始化在第三存儲塊310中的新的可編程代碼組,以及在切換之后,第一標記被控制單元322改變以指示第三存儲塊310作為激活存儲塊而第二存儲塊308作為非激活存儲塊。
在一個優(yōu)選實施例中,第二和第三存儲塊308和310中的一個被配置為默認存儲塊,其中如果處理單元未能識別激活存儲塊,則處理單元切換至執(zhí)行在默認存儲塊中的可編程代碼組。在一個優(yōu)選實施例中,所述多個寄存器320包括用于存儲指示默認存儲塊的第二標記的第二寄存器320b,其中第二標記由控制單元322根據系統(tǒng)配置而設置。處理單元316基于第二標記識別默認存儲塊。
在一個優(yōu)選實施例中,固件更新請求包括實時更新請求類型和非實時更新請求類型。如果緊接在存儲完成之后自動發(fā)起切換,則在固件存儲請求中攜帶更新請求的類型信息上,否則在固件切換請求中攜帶更新請求的類型信息上。在一個優(yōu)選實施例中,寄存器320還包括用于存儲第三標記的第三寄存器320c,第三標記指示更新請求是實時更新請求或非實時更新請求,其中控制單元322基于接收到固件更新請求的類型信息來設置第三標記。在一個優(yōu)選實施例中,如果第三標記指示實時更新請求,則處理單元316在切換期間禁用除了用在非 可編程代碼中的中斷之外的所有的可屏蔽中斷,而如果第三標記指示非實時更新請求,則處理單元316在切換期間禁用所有的可屏蔽中斷。在另一優(yōu)選實施例中,如果第三標記指示實時更新請求,在處理單元316在所述切換期間初始化除非可編程代碼組和該非可編程數據組之外的系統(tǒng)300,從而繼續(xù)利用非可編程代碼組和非可編程數據執(zhí)行至少一個關鍵功能,而如果第三標記指示非實時更新請求,則在切換期間系統(tǒng)300初始化包括非可編程代碼組和該非可編程數據組的系統(tǒng)300,其中初始化系統(tǒng)300包括重啟系統(tǒng)300。
在一個優(yōu)選實施例中,第一可編程代碼組和新的可編程代碼組分別從相同的地址起存儲在第二和第三子存儲單元328和330中,從而所述切換包括相互交換第二和第三子存儲單元328和330。
圖5是根據本發(fā)明另一實施例的圖4的系統(tǒng)300的存儲器400的框圖。存儲第一和第二可編程代碼組的第二和第三存儲塊308和310分別位于存儲器400的第一和第二子存儲單元402和404中。第一和第二子存儲單元402和404優(yōu)選是閃存組。存儲非可編程代碼組的第一存儲塊306位于第一和第二子存儲單元402和404中的一個,例如位于如圖5所示的第二子存儲單元404中。存儲固件數據組的第四存儲塊312位于存儲器400的第三子存儲單元406中。第三子存儲單元406優(yōu)選是RAM,例如共享代碼空間和數據空間的雙端口RAM。在一個優(yōu)選實施例中,第三子存儲單元406包括用于存儲非可編程代碼組的拷貝的預留存儲塊408,從而當編程單元318在第二子存儲單元404的第三存儲塊310中存儲新的可編程代碼組時,通過執(zhí)行第一子存儲單元402中的第一可編程代碼組和第三子存儲單元406中的非可編程代碼組的拷貝,系統(tǒng)300繼續(xù)以高執(zhí)行效率執(zhí)行至少一個關鍵功能和至少一個普通功能。在一個優(yōu)選實施例中,編程單元318在將新的可編程代碼組存儲至第二子存儲單元404之前,將非可編程代碼組的拷貝存儲在預留存儲塊408中。
圖6是根據本發(fā)明又一實施例的圖4的系統(tǒng)300中的存儲器500的框圖。存儲非可編程代碼組以及第一和第二可編程代碼組的第一、第二和第三存儲塊306、308和310位于存儲器500的第一子存儲單元502中。第一子存儲單元優(yōu)選是閃存。第四存儲塊312(其存儲固件數據組)位于存儲器500的第二子存儲單元504中。第二子存儲單元504優(yōu)選是RAM,例如共享代碼空間和數據空間的雙端口RAM。在一個優(yōu)選實施例中,第二子存儲單元504包括用于存儲非可 編程代碼組的拷貝的預留存儲塊506,因此當輸入單元314緩沖新的可編程代碼組的部分時,系統(tǒng)300通過執(zhí)行預留存儲塊506中的非可編程代碼組的拷貝以高執(zhí)行效率繼續(xù)執(zhí)行至少一個關鍵功能,以及通過執(zhí)行第二存儲塊308中的第一可編程代碼組來以低執(zhí)行效率繼續(xù)執(zhí)行至少一個普通功能。在一個優(yōu)選實施例中,編程單元318在將新的可編程代碼組存儲至第一子存儲單元502之前將非可編程代碼組的拷貝存儲至預留存儲塊506中。
圖7是根據本發(fā)明一個實施例的將固件的新的可編程代碼組存儲至具有圖4或5中的存儲器的圖4的固件控制系統(tǒng)300中的方法600的流程圖。所述固件包括用于執(zhí)行至少一個關鍵功能的非可編程代碼組和用于執(zhí)行至少一個普通功能的可編程代碼組。
如圖4所示的系統(tǒng)300包括:存儲器302,存儲器302包括用于存儲固件的非可編程代碼組的第一存儲塊306和分別存儲固件的第一和第二可編程代碼組的第二和第三存儲塊308和310;以及連接至存儲器302的處理器304。在操作中,第二和第三存儲塊包括:一個激活存儲塊,其中的可編程代碼組當前正由處理單元316執(zhí)行;以及一個非激活存儲塊,其中組可編程代碼未在被執(zhí)行。例如,如果第二存儲塊308中的第一可編程代碼組正被執(zhí)行,則第二存儲塊308是激活存儲塊而第三存儲塊310是非激活存儲塊。在一個優(yōu)選實施例中,激活存儲塊由存儲在系統(tǒng)300的第一寄存器320a中的第一標記指示。
在步驟602開始,系統(tǒng)300檢測是否有固件存儲請求。在步驟604,如果未接收到固件存儲請求,則系統(tǒng)300繼續(xù)執(zhí)行激活存儲塊中的可編程代碼,否則,在步驟606,基于接收到固件存儲請求,編程單元318識別第三存儲塊310是非激活存儲塊,并激活用于將新的可編程代碼組的預定量的一部分存儲至第三存儲塊310中的固件的引導加載部。在一個優(yōu)選實施例中,基于第一標記識別非激活存儲塊。
在步驟608,處理器304緩沖新的可編程代碼組的一部分,直到接收預定量的一部分新的可編程代碼組,同時在步驟610,處理單元316通過執(zhí)行在第二存儲塊308中的第一可編程代碼組繼續(xù)執(zhí)行至少一個普通功能。
在步驟612,一旦緩沖器324中接收了新的可編程代碼組的預定量的部分,編程單元318將該部分新的可編程代碼組存儲至第三存儲塊310最終。在步驟614,處理單元316檢測是否新的可編程代碼組的所有的代碼都已經保存在第三 存儲塊310中,若否,則返回步驟610以在編程單元318在將新的可編程代碼組的該部分寫入第三存儲塊310中時,繼續(xù)執(zhí)行第二存儲塊308中的第一可編程代碼組。在一個優(yōu)選實施例中,所述寫入包括覆寫存儲在第三存儲塊310中的第二可編程代碼組。
在步驟616,在系統(tǒng)300完成將新的可編程代碼組存儲至第三存儲塊310之后,系統(tǒng)300去激活引導加載部。在步驟618,系統(tǒng)300通過執(zhí)行在第二存儲塊308中的第一可編程代碼組繼續(xù)執(zhí)行至少一個普通功能。
通過執(zhí)行存儲在圖4中的系統(tǒng)300中的第一子存儲單元326中或存儲在圖5中的預留存儲塊408中的非可編程代碼,系統(tǒng)300在步驟602至618繼續(xù)執(zhí)行至少一個關鍵功能。
圖8是根據本發(fā)明一個實施例的將固件的新的可編程代碼組保存至具有圖6中的存儲器的圖4的固件控制的系統(tǒng)300中的方法700的流程圖。所述固件包括用于執(zhí)行至少一個關鍵功能的非可編程代碼組和用于執(zhí)行至少一個普通功能的可編程代碼組。
與圖7類似,在步驟702開始,系統(tǒng)300檢測是否有固件存儲請求。在步驟704,如果未接收到固件存儲請求,則系統(tǒng)300繼續(xù)執(zhí)行激活存儲塊中的可編程代碼,否則,在步驟706,基于接收到固件存儲請求,編程單元318識別第三存儲塊310是非激活存儲塊,并激活用于將新的可編程代碼組的預定量的部分存儲至第三存儲塊310中的固件的引導加載部。在一個優(yōu)選實施例中,基于第一標記識別非激活存儲塊。
在步驟708,處理器304緩沖部分新的可編程代碼組,直到接收預定量的部分新的可編程代碼組,同時在步驟710,處理單元316通過執(zhí)行在第二存儲塊308中的第一可編程代碼組繼續(xù)執(zhí)行至少一個普通功能。
在步驟712,在第二存儲塊308和第三存儲塊310位于存儲器500的同一第一子存儲單元502中時,一旦緩沖器324中接收了預定量的部分的新的可編程代碼組,則處理單元316暫停(suspend)第二存儲塊308中的第一可編程代碼組的執(zhí)行。
在步驟714,編程單元318將新的可編程代碼組的所述部分存儲在第三存儲塊310中。
在步驟716,處理單元316檢測是否新的可編程代碼組的全部代碼已經被存 儲在第三存儲塊310中,若否,則返回步驟710以在編程單元318正在將新的可編程代碼組的所述部分寫入第三存儲塊310中時,繼續(xù)執(zhí)行在第二存儲塊308中的第一可編程代碼組。在一個優(yōu)選實施例中,所述寫入包括覆寫存儲在第三存儲塊310中的第二可編程代碼組。
在步驟718,在系統(tǒng)300完成將新的可編程代碼組存儲至第三存儲塊310中之后,系統(tǒng)300去激活引導加載部。在步驟720,系統(tǒng)300通過執(zhí)行第二存儲塊308中的第一可編程代碼組繼續(xù)執(zhí)行至少一個普通功能。
通過執(zhí)行存儲在圖6中的預留存儲塊506中的非可編程代碼,系統(tǒng)300在步驟702至720繼續(xù)執(zhí)行至少一個關鍵功能。
圖9是根據本發(fā)明一個實施例的基于固件更新請求在將新的可編程代碼組存儲在如圖7或8所示的非激活存儲塊中之后,切換圖4的系統(tǒng)300以使用新的可編程代碼組操作的方法800的流程圖。
在將新的可編程代碼組存儲至第三存儲塊310中之后,如圖4所示的系統(tǒng)300包括:存儲器302,存儲器302包括用于存儲固件的非可編程代碼組的第一存儲塊306和分別存儲固件的第一可編程代碼組和新的可編程代碼組的第二和第三存儲塊308和310;以及連接至存儲器302的處理器304。在操作中,第二存儲塊是激活存儲塊,其中第一可編程代碼組正由處理單元316執(zhí)行。在一個優(yōu)選實施例中,激活存儲塊由存儲在系統(tǒng)300中的第一寄存器320a中的第一標記指示。
在一個優(yōu)選實施例中,固件更新請求還包括固件切換請求,其中切換是基于固件切換請求發(fā)起的。在另一優(yōu)選實施例中,所述切換是緊接著新的可編程代碼組存儲至第三存儲塊310中之后自動發(fā)起。
在一個優(yōu)選實施例中,固件更新請求包括實時更新請求類型和非實時更新請求類型。以固件切換請求攜載更新請求類型的信息。在一個優(yōu)選實施例中,寄存器320還包括用于存儲第三標記的第三寄存器320c,第三標記在實時更新請求和非實時更新請求之間指示更新請求的類型,其中控制單元322基于接收到固件切換請求的類型的信息來設置第三標記。
在步驟802開始,系統(tǒng)300檢測引導加載部的狀態(tài)。如果引導加載部是激活的,這意味著存儲還未完成,則返回圖7中的步驟608或圖8中的步驟708;否則,在步驟804,在一個優(yōu)選實施例中,系統(tǒng)300檢測是否接收到固件切換請 求。如果接收到固件切換請求,系統(tǒng)300檢測攜載在固件切換請求中的固件更新請求的類型的信息,并相應設置第三標記。
在步驟806,如果未接收到固件切換請求,則系統(tǒng)300繼續(xù)執(zhí)行激活存儲塊中的可編程代碼。
在步驟808,處理單元316識別第三存儲塊310是其中已經存儲了新的可編程代碼組的非激活存儲塊。因此,第三存儲塊310是所識別的存儲塊。在一個優(yōu)選實施例中,非激活的存儲塊是基于第一標記識別的。
在步驟810,如果處理單元316未能識別非激活存儲塊,則處理單元316在第二和第三存儲塊308和310之間識別默認存儲塊,其由系統(tǒng)300配置。在一個優(yōu)選實施例中,默認存儲塊基于存儲在系統(tǒng)300的第二寄存器320b中的第二標記識別,例如,第二存儲塊308被配置為默認存儲塊。因此,第二存儲塊308作為識別的存儲塊。
在步驟812,在一個優(yōu)選實施例中,控制單元322重置第一標記以指示識別的存儲塊為激活存儲塊。
在步驟814,系統(tǒng)300基于第三標記識別固件更新請求的類型。如果固件更新請求是非實時更新請求,系統(tǒng)300在步驟816處重置,所述重置將結合圖10詳細描述。
在步驟818,如果固件更新請求是實時更新請求,則處理單元316禁用除用在非可編程代碼組中的那些之外的所有的可屏蔽中斷,從而系統(tǒng)300繼續(xù)執(zhí)行至少一個關鍵功能。
在步驟820,處理單元316優(yōu)選基于已經在步驟812重置的第一標記將用于所識別的存儲塊中可編程代碼組的矢量基地址(vector base address,VBA)初始化,并且切換地址指針至所識別的存儲塊。在一個優(yōu)選實施例中,地址指針被切換至所識別的存儲塊中的可編程代碼組的起始地址,以執(zhí)行固件的新的可編程代碼組。
步驟822中,在切換地址指針至所識別的存儲塊之后,系統(tǒng)300基于第三標記檢測固件更新請求的類型。
在步驟824,對于非實時更新請求,整個系統(tǒng)被初始化;否則,在步驟826,除了非可編程代碼組和相應的非可編程數據,系統(tǒng)300被初始化,從而系統(tǒng)300繼續(xù)執(zhí)行至少一個關鍵功能。在一個優(yōu)選實施例中,步驟824和826還包括清 除第三標記。
在步驟828,系統(tǒng)300執(zhí)行在所識別的存儲塊中的可編程代碼組以及非可編程的代碼組。
圖10是根據本發(fā)明一個實施例的重置圖4的系統(tǒng)300的方法900的流程圖。如圖4所示的系統(tǒng)300包括:存儲器302,存儲器302包括用于存儲固件的非可編程代碼組的第一存儲塊306和分別存儲固件的第一和第二可編程代碼組的第二和第三存儲塊308和310;以及連接至存儲器302的處理器304。在操作中,第二和第三存儲塊包括:一個激活存儲塊,其中的可編程代碼組正由處理器304執(zhí)行;以及一個非激活存儲塊,其中的可編程代碼組并未在被執(zhí)行。在一個優(yōu)選實施例中,系統(tǒng)重置由非實時更新請求的固件切換請求發(fā)起,或在非實時更新請求下緊接在新的可編程代碼組已經被存儲至非激活存儲塊中,或其他系統(tǒng)重置事件(例如,電源重置、看門狗重置、外部重置等)之后自動發(fā)起。
在步驟902開始,禁用所有可屏蔽中斷。在步驟904和906,初始化系統(tǒng)時鐘和內核、第一存儲塊306中的非可編程代碼組、以及第四存儲塊312中的固件的非可編程數據。
在步驟908,處理單元316基于已經在步驟812處重置的第一標記識別激活存儲塊。例如,第三存儲塊310被識別為激活存儲塊,從而第三存儲塊310是識別的存儲塊。如果處理單元316未能識別激活存儲塊,則在步驟910,處理單元316在第二和第三存儲塊308和310之間識別默認存儲塊,其由系統(tǒng)300配置。在一個優(yōu)選實施例中,默認存儲塊是基于存儲在系統(tǒng)300的第二寄存器320b中的第二標記識別的,例如,第二存儲塊308被配置為默認存儲塊。因此,第二存儲塊308是所識別的存儲塊。
在步驟912,處理單元316初始化用于所識別的存儲塊中可編程代碼組的矢量基地址(VBA),并切換地址指針至所識別的存儲塊。在一個優(yōu)選實施例中,地址指針被切換至所識別的存儲塊中的可編程代碼組的起始地址,以執(zhí)行固件的可編程代碼組。
在步驟914,在切換地址指針至所識別的存儲塊之后,系統(tǒng)300基于第三標記檢測固件更新請求的類型。
在步驟916,對于實時更新請求,除了非可編程代碼組和相應的非可編程數據之外,系統(tǒng)300被初始化,從而系統(tǒng)300繼續(xù)執(zhí)行至少一個關鍵功能,否則, 在步驟918,整個系統(tǒng)被初始化。在一個優(yōu)選實施例中,步驟916和918還包括清除第三標記。
在步驟920,系統(tǒng)300執(zhí)行所識別的存儲塊中的可編程代碼組以及非可編程代碼組。
本發(fā)明的優(yōu)選實施例的描述以被呈現用于說明和描述的目的,而并不意圖窮舉或限制本發(fā)明至所公開的形式。本領域技術人員將理解,可以對上述實施例作出多種修改而不脫離其寬泛的發(fā)明概念。因此,應理解,本發(fā)明并不限于所公開的特定的實施例,而是覆蓋在由所附權利要求限定的本發(fā)明的精神和范圍中的修改。