本發(fā)明涉及微控制器的領域,尤其涉及通過多總線接口實現(xiàn)片內(nèi)flash升級的方法。
背景技術(shù):
1、現(xiàn)有mcu內(nèi)部區(qū)分有包含flash和不包含flash,有內(nèi)部flash的mcu更新程序是通過icp(in-circuit?programming)接口實現(xiàn),或者通過isp(in-system?programming)接口實現(xiàn)。icp包括jtag和swd等外設接口;isp包括usart、can、spi、i2c、usb等外設接口。無論是jtag還是swd等外設接口,都需要對應的下載軟件來匹配下載和驗證。對于isp接口,則需要外圍電路輔助來實現(xiàn)內(nèi)部flash的更新,比如采用接口usart轉(zhuǎn)ttl模式來實現(xiàn)相應功能,但是這種方式是默認將內(nèi)部flash全片擦除,并且要指定外設端口,不適用用戶自定義存儲的應用和端口復用模式,該模式下需要用到mcu內(nèi)部的boot區(qū)域,需要對應的硬件引腳和指令控制實現(xiàn)flash的更新。可見現(xiàn)有的內(nèi)部flash升級需要專用的軟件和驅(qū)動,還占用mcu的端口,無法對內(nèi)部flash進行操作方便和交互性良好的升級。
技術(shù)實現(xiàn)思路
1、本發(fā)明的目的在于提供通過多總線接口實現(xiàn)片內(nèi)flash升級的方法,當mcu進行系統(tǒng)重啟時,判斷bootloader啟動代碼區(qū)域是否存在升級標志位;根據(jù)升級標志位存在與否的判斷結(jié)果以及所述mcu的接口狀態(tài),對mcu的內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程;當mcu跳轉(zhuǎn)到相應app運行流程后,判斷相應app是否包含升級指令;再根據(jù)相應app是否包含升級指令的判斷結(jié)果,調(diào)整對應用程序的啟動操作,其利用bootloader引導應用程序完成加載升級,與正常通信串口和網(wǎng)口復用,在升級過程中通信串口和網(wǎng)口用于下發(fā)升級包,不影響通信串口和網(wǎng)口原有的工作模式,使得選擇升級的方式多樣化,方便更新維護和產(chǎn)品更新迭代,其與mcu自帶的引導程序相比,方便本地和遠程完成應用升級,具有低成本和良好交互性。
2、本發(fā)明是通過以下技術(shù)方案實現(xiàn):
3、通過多總線接口實現(xiàn)片內(nèi)flash升級的方法,包括:
4、當mcu進行系統(tǒng)重啟時,判斷bootloader啟動代碼區(qū)域是否存在升級標志位;根據(jù)所述升級標志位存在與否的判斷結(jié)果以及所述mcu的接口狀態(tài),對所述mcu的內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程;
5、當所述mcu跳轉(zhuǎn)到相應app運行流程后,判斷相應app是否包含升級指令;再根據(jù)相應app是否包含升級指令的判斷結(jié)果,調(diào)整對應用程序的啟動操作。
6、可選地,在判斷bootloader啟動代碼區(qū)域是否存在升級標志位之前,還包括:
7、當mcu進行系統(tǒng)重啟時,獲取所述mcu當前需要重啟的應用程序的屬性信息;基于所述屬性信息,對所述mcu的代碼區(qū)域進行代碼識別,確定所述需要重啟的應用程序的代碼數(shù)據(jù)。
8、可選地,判斷bootloader啟動代碼區(qū)域是否存在升級標志位,包括:
9、對所述需要重啟的應用程序?qū)拇a數(shù)據(jù)進行代碼區(qū)分識別,得到所述需要重啟的應用程序?qū)腷ootloader啟動代碼區(qū)域和用戶代碼區(qū)域;對所述bootloader啟動代碼區(qū)域進行代碼內(nèi)容識別,判斷所述bootloader啟動代碼區(qū)域是否存在升級標志位。
10、可選地,根據(jù)所述升級標志位存在與否的判斷結(jié)果以及所述mcu的接口狀態(tài),對所述mcu的內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程,包括:
11、當所述bootloader啟動代碼區(qū)域存在升級標志位,則對所述升級標志位進行crc32驗證;
12、當所述升級標志位通過crc32驗證,則將外部flash的內(nèi)容拷貝到內(nèi)部flash對應的app區(qū),以此對所述內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程;
13、當所述升級標志位未通過crc32驗證,則判斷所述mcu的對外接口是否升級;若所述對外接口未升級,則直接跳轉(zhuǎn)到相應app運行流程;若所述對外接口已升級,則通過本地升級方式對內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程。
14、可選地,根據(jù)所述升級標志位存在與否的判斷結(jié)果以及所述mcu的接口狀態(tài),對所述mcu的內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程,還包括:
15、當所述bootloader啟動代碼區(qū)域不存在升級標志位,則判斷所述mcu的對外接口是否升級;若所述對外接口未升級,則直接跳轉(zhuǎn)到相應app運行流程;若所述對外接口已升級,則通過本地升級方式對內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程。
16、可選地,通過本地升級方式對內(nèi)部flash進行升級處理,包括:
17、通過對外接口將所述mcu連接至本地終端,利用securecrt軟件通過ymodem協(xié)議直接將升級包拷貝到內(nèi)部flash,并對所述內(nèi)部flash的升級包進行校驗驗證;當完成對所述升級包的校驗驗證后,跳轉(zhuǎn)到所述用戶代碼區(qū)域,從而完成對內(nèi)部flash的升級處理。
18、可選地,在判斷相應app是否包含升級指令之前,還包括:
19、當所述mcu跳轉(zhuǎn)到相應app運行流程后,獲取相應的app向量表,并對所述app向量表進行修改以及獲取修改后的app向量表的打印版本信息。
20、可選地,判斷相應app是否包含升級指令,包括:
21、對所述打印版本信息進行指令內(nèi)容識別處理,得到所述打印版本信息包含所有完整指令;再對所有完整指令分別進行類型識別處理,當所述完整指令屬于升級指令類型,則判斷相應app包含升級指令。
22、可選地,根據(jù)相應app是否包含升級指令的判斷結(jié)果,調(diào)整對應用程序的啟動操作,包括:
23、當相應app包含升級指令,則對應用程序進行重啟操作;
24、當相應app不包含升級指令,則保持應用程序當前狀態(tài)不變,并再次判斷相應app是否包含升級指令。
25、可選地,當相應app包含升級指令,則對應用程序進行重啟操作,包括:
26、當相應app包含升級指令,則將升級對應的bin文件寫入內(nèi)部flash,并根據(jù)所述bin文件在內(nèi)部flash的bootloader啟動代碼區(qū)域?qū)懭胄碌纳墭酥疚?;再根?jù)新的升級標志位,對應用程序進行重啟操作。
27、可選地,對所述mcu的內(nèi)部flash進行升級處理之前,還包括對所述內(nèi)部flash進行數(shù)據(jù)備份,其過程為:
28、步驟s1,利用下面公式(1),根據(jù)所述mcu的內(nèi)部flash升級的升級數(shù)據(jù)量以及所述mcu的內(nèi)部flash的總數(shù)據(jù)存儲量,得到所述數(shù)據(jù)備份的區(qū)間數(shù)據(jù)量,
29、
30、在上述公式(1)中,db表示所述數(shù)據(jù)備份的區(qū)間數(shù)據(jù)量;dz表示所述mcu的內(nèi)部flash的總數(shù)據(jù)存儲量;dj表示所述mcu的內(nèi)部flash升級的升級數(shù)據(jù)量;
31、步驟s2,利用下面公式(2),根據(jù)所述數(shù)據(jù)備份的區(qū)間數(shù)據(jù)量以及所述內(nèi)部flash內(nèi)的現(xiàn)有數(shù)據(jù)的數(shù)據(jù)量,得到所述內(nèi)部flash進行升級后的剩余空間數(shù)據(jù)量,
32、
33、在上述公式(2)中,δd表示所述內(nèi)部flash進行升級后的剩余空間數(shù)據(jù)量;dx表示所述內(nèi)部flash內(nèi)的現(xiàn)有數(shù)據(jù)的數(shù)據(jù)量,即所述內(nèi)部flash內(nèi)需要進行備份的備份數(shù)據(jù)量;if[]表示判斷函數(shù),若括號內(nèi)的算式成立,則判斷函數(shù)的函數(shù)值為1,若括號內(nèi)的算式不成立,則判斷函數(shù)的函數(shù)值為0;
34、步驟s3,利用下面公式(3),根據(jù)所述內(nèi)部flash進行升級后的剩余空間數(shù)據(jù)量以及所述內(nèi)部flash內(nèi)的現(xiàn)有數(shù)據(jù)的數(shù)據(jù)量,得到備份數(shù)據(jù)的壓縮程度,
35、μ=(dz-δd-dj)/db??(3)
36、在上述公式(3)中,μ表示備份數(shù)據(jù)的壓縮程度,即需要將所述內(nèi)部flash內(nèi)的現(xiàn)有數(shù)據(jù)的數(shù)據(jù)量壓縮至原來的1/μ。
37、與現(xiàn)有技術(shù)相比,本發(fā)明具有如下有益效果:
38、本技術(shù)提供的通過多總線接口實現(xiàn)片內(nèi)flash升級的方法在mcu進行系統(tǒng)重啟時,判斷bootloader啟動代碼區(qū)域是否存在升級標志位;根據(jù)升級標志位存在與否的判斷結(jié)果以及所述mcu的接口狀態(tài),對mcu的內(nèi)部flash進行升級處理,并跳轉(zhuǎn)到相應app運行流程;當mcu跳轉(zhuǎn)到相應app運行流程后,判斷相應app是否包含升級指令;再根據(jù)相應app是否包含升級指令的判斷結(jié)果,調(diào)整對應用程序的啟動操作,其利用bootloader引導應用程序完成加載升級,與正常通信串口和網(wǎng)口復用,在升級過程中通信串口和網(wǎng)口用于下發(fā)升級包,不影響通信串口和網(wǎng)口原有的工作模式,使得選擇升級的方式多樣化,方便更新維護和產(chǎn)品更新迭代,其與mcu自帶的引導程序相比,方便本地和遠程完成應用升級,具有低成本和良好交互性。