一種通過i2c升級設備固件的方法
【技術領域】
[0001]本發(fā)明涉及嵌入式設備設計技術領域,本發(fā)明公開了一種通過I2C升級設備固件的方法。
【背景技術】
[0002]IIC,又稱I2C,既Inter-1ntegrated Circuit,集成總線電路,這種總線類型是由飛利浦半導體公司在20世紀八十年代初設計出來的。該總線兩條線組成:數(shù)據線(SDA)和時鐘線(SCL),一條IIC總線上可以連接多個IIC從設備,這些從設備使用不同的從地址來區(qū)分。
[0003]系統(tǒng)設計中,存在一種單主控設備和多個從設備或模塊(以下統(tǒng)稱從設備)的結構。其中主控設備功能豐富,支持多種管理方式;而從設備功能較單一,采用成本相對低廉的普通單片機便可實現(xiàn)其功能,而這些單片機通常都支持IIC接口。
[0004]然而,成本相對低廉的芯片提供的系統(tǒng)資源往往有限,通常無法提供更多的資源用于設備的升級;并且大多數(shù)的設備程序運行在Rom中,也無法直接對設備進行升級。
[0005]CN200510002062.7公開了一種單片機在線加載升級方法及系統(tǒng),用于對作為從CPU工作的單片機進行在線加載升級,該方法包括:將單片機的BOOT軟件寫入單片機的內部程序存儲區(qū),并將其應用程序寫入片外掉電保持介質中;當單片機需要升級時,由主CPU控制單片機工作在運行片內BOOT軟件狀態(tài),并將加載代碼通過BOOT軟件寫入其片外掉電保持介質中;由主CPU復位單片機,并控制其重啟后工作在運行片外應用程序狀態(tài),完成加載升級過程。本發(fā)明系統(tǒng)在基于現(xiàn)有主、從CPU系統(tǒng)基礎上,增加了主CPU對單片機工作模式的控制電路,以及存儲單片機應用程序的片外掉電保持介質。利用本發(fā)明,可以簡單方便地實現(xiàn)對單片機的在線加載升級,便于系統(tǒng)維護。但是,該方法需要多條通信總線或控制線,同時需要外掉電保持介質,設計相對復雜,并且設計成本相對較高;總線和控制線較多,消耗主CPU的資源較多,不適合單CPU連接多單片機的設計。
【發(fā)明內容】
[0006]針對現(xiàn)有技術中的從設備難以升級的上述問題,本發(fā)明公開了一種通過I2C升級設備固件的方法。
[0007]本發(fā)明的技術方案如下:
本發(fā)明公開了一種通過I2C升級設備固件的方法,其具體包括以下的步驟:步驟一、將N個從設備通過一條I2C總線連接到主控設備上,每個從設備的系統(tǒng)包括引導程序區(qū)、系統(tǒng)功能程序區(qū)和系統(tǒng)升級程序區(qū);步驟二、當從設備啟動時,引導程序選擇需要加載的系統(tǒng)功能程序,當加載成功時,系統(tǒng)功能程序啟動;當加載失敗時,等待主控設備升級;步驟三、主控設備獲取到從設備需要升級的指令后,根據該從設備的信息下載該從設備的固件并發(fā)送升級指令給該從設備,從設備接收到升級指令后將狀態(tài)切換為升級模式,在升級過程中,從設備維護為狀態(tài)機,記錄當前從設備的升級狀態(tài),主控設備讀取從設備的升級狀態(tài);步驟四、當從設備切換為升級模式后,主控設備將固件信息下發(fā)給從設備,從設備收到固件信息后系統(tǒng)升級程序將其寫入指定的位置;步驟五、當從設備的所有寫入指令執(zhí)行完成后,主控設備下發(fā)重啟指令,從設備重啟,引導程序選擇需要加載的系統(tǒng)功能程序。通過主控設備以及I2C總線實現(xiàn)從設備的自動在線升級。
[0008]更進一步地,上述主控設備獲取到從設備需要升級的指令具體包括:當從設備加載失敗時,從設備寫入一個標志位,主控設備通過讀取這個標志位判斷該從設備是否需要升級。快速獲取到從設備需要升級的信息,從而提高升級效率。
[0009]更進一步地,上述主控設備獲取到從設備需要升級的指令具體包括:主控設備通過I2C總線,讀取或配置從設備的運行狀態(tài)和參數(shù),通過從設備的運行狀態(tài)和參數(shù)判斷從設備是否需要升級。快速獲取到從設備需要升級的信息,從而提高升級效率。
[0010]更進一步地,上述從設備的系統(tǒng)還可以包括功能程序備份區(qū),當功能程序受損后,從功能程序備份區(qū)獲取到該程序的備份。從而實現(xiàn)快速恢復。
[0011]更進一步地,上述主控設備在下發(fā)數(shù)據或者指令時,其頭部信息包括指令編號和指令編號的反值,保證Type的正確性。
[0012]更進一步地,上述主控設備在下發(fā)數(shù)據或者指令時,其尾部信息為數(shù)據校驗和。通過校驗信息保證所有數(shù)據的正確性。
[0013]更進一步地,上述主控設備在下發(fā)固件時,首先將固件分片,并發(fā)送固件分片信息,從設備收到固件分片信息后,記錄并等待接收固件的數(shù)據;然后主控設備依次下發(fā)固件的分片信息,從設備收到固件的分片信息后,記錄當前信息并等待接收單前分片的數(shù)據,直到最后一個分片數(shù)據發(fā)送并接收完成。首先將固件分片,并發(fā)送總體信息給從設備,便于從設備了解固件分片的編號,所有的片是否全部發(fā)送等內容。
[0014]更進一步地,上述方法還包括主控設備從上位機下載從設備的固件,當下載成功后,進行校驗,校驗成功后,主控設備下發(fā)從設備升級模式切換指令。
[0015]更進一步地,在傳輸過程中采用網絡字節(jié)序傳輸。
[0016]通過采用以上的技術方案,本發(fā)明的有益效果包括:通過主控設備以及I2C總線實現(xiàn)從設備的在線升級,從設備的升級過程簡單方便,整個過程自動實現(xiàn),不需要任何的人工參與,方便了用戶的使用,實現(xiàn)了系統(tǒng)的自動檢測以及自動的在線升級。本發(fā)明不需要外接存儲介質,同時僅僅需要一條IIC總線連接多個從設備,連接方法簡單,既簡化了設計過程,也節(jié)省了設計成本。
【附圖說明】
[0017]圖1為總體架構設計模型。
[0018]圖2為從設備系統(tǒng)結構。
[0019]圖3為數(shù)據及指令格式。
[0020]圖4為主、從設備升級狀態(tài)圖。
[0021]圖5為主控設備端操作流程圖。
[0022]圖6為從設備端升級流程圖。
【具體實施方式】
[0023]為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細的說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0024]本發(fā)明公開了一種通過I2C升級設備固件的方法,其具體包括以下的步驟:步驟一、將N個從設備通過一條I2C總線連接到主控設備上,每個從設備的系統(tǒng)包括引導程序區(qū)、系統(tǒng)功能程序區(qū)和系統(tǒng)升級程序區(qū);步驟二、當從設備啟動時,引導程序選擇需要加載的系統(tǒng)功能程序,當加載成功時,系統(tǒng)功能程序啟動;當加載失敗時,等待主控設備升級;步驟三、主控設備獲取到從設備需要升級的指令后,根據該從設備的信息下載該從設備的固件并發(fā)送升級指令給該從設備,從設備接收到升級指令后將狀態(tài)切換為升級模式,在升級過程中,從設備維護為狀態(tài)機,記錄當前從設備的升級狀態(tài),主控設備讀取從設備的升級狀態(tài);步驟四、當從設備切換為升級模式后,主控設備將固件信息下發(fā)給從設備,從設備收到固件信息后系統(tǒng)升級程序將其寫入指定的位置;步驟五、當從設備的所有寫入指令執(zhí)行完成后,主控設備下發(fā)重啟指令,從設備重啟,引導程序選擇需要加載的系統(tǒng)功能程序。通過主控設備以及I2C總線實現(xiàn)從設備的自動在線升級。
[0025]更進一步地,上述主控設備獲取到從設備需要升級的指令具體包括:當從設備加載失敗時,從設備寫入一個標志位,主控設備通過讀取這個標志位判斷該從設備是否需要升級。比如標志位為1為需要升級,標志位為0為不需要升級,初始的時候標志位為0??焖佾@取到從設備需要