本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別涉及一種固件升級(jí)的方法和設(shè)備。
背景技術(shù):
現(xiàn)有技術(shù)中,針對(duì)STM32單片機(jī)的固件升級(jí),適用范圍有限,無法適用無大容量的固件文件升級(jí),且操作不方便。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中的缺陷,本發(fā)明提出了一種固件升級(jí)的方法和設(shè)備,用以快捷地進(jìn)行固件升級(jí)。
具體的,本發(fā)明提出了以下具體的實(shí)施例:
本發(fā)明實(shí)施例提出了一種固件升級(jí)的方法,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),該方法包括:
通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將升級(jí)用的固件文件發(fā)送至bootloader;
通過所述bootloader將獲取到的固件文件緩存在RAM中;
通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;
利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該方法還包括:
若STM32單片機(jī)的復(fù)位為普通復(fù)位,將標(biāo)志位的值更新為0;
若STM32單片機(jī)的復(fù)位是基于傳輸固件文件進(jìn)行的復(fù)位,將標(biāo)志位的值更新為1;并對(duì)外部存儲(chǔ)器所接收到的固件文件進(jìn)行完整性的校驗(yàn);
若校驗(yàn)通過,則將標(biāo)志位的值更新為2;
若校驗(yàn)不通過,則將標(biāo)志位的值更新為0;
若檢測(cè)到STM32單片機(jī)中APP固件區(qū)發(fā)生物理損壞,則將標(biāo)志位的值更新為3。
在一個(gè)具體的實(shí)施例中,所述利用外部存儲(chǔ)器中的升級(jí)固件文件進(jìn)行固件升級(jí),具體包括:
確定外部存儲(chǔ)器中的固件文件的標(biāo)志位的值;
若標(biāo)志位的值為2,則確定外部存儲(chǔ)器中對(duì)應(yīng)的固件文件為升級(jí)用的固件文件;
基于確定的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該方法還包括:
若確定標(biāo)志位的值為0,則通過外部存儲(chǔ)器重新接收固件文件;
若確定標(biāo)志位的值為1,則啟動(dòng)APP固件區(qū)以執(zhí)行正常功能;
若確定標(biāo)志位的值為3,則生成報(bào)警信息并發(fā)送給指定的設(shè)備。
在一個(gè)具體的實(shí)施例中,所述網(wǎng)絡(luò)透?jìng)髂K具體包括:無線網(wǎng)絡(luò)透?jìng)髂K。
本發(fā)明實(shí)施例還提出了一種固件升級(jí)的設(shè)備,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),該設(shè)備包括:
發(fā)送模塊,用以通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將固件文件發(fā)送至bootloader;
第一緩存模塊,用以通過所述bootloader將獲取到的固件文件緩存在RAM中;
第二緩存模塊,用以通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;
升級(jí)模塊,用以利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該設(shè)備還包括:
更新模塊,用以當(dāng)STM32單片機(jī)的復(fù)位為普通復(fù)位時(shí),將標(biāo)志位的值更新為0;
當(dāng)STM32單片機(jī)的復(fù)位是基于傳輸固件文件進(jìn)行的復(fù)位時(shí),將標(biāo)志位的值更新為1;并對(duì)外部存儲(chǔ)器所接收到的固件文件進(jìn)行完整性的校驗(yàn);
若校驗(yàn)通過,則將標(biāo)志位的值更新為2;
若校驗(yàn)不通過,則將標(biāo)志位的值更新為0;
當(dāng)檢測(cè)到STM32單片機(jī)中APP固件區(qū)發(fā)生物理損壞時(shí),則將標(biāo)志位的值更新為3。
在一個(gè)具體的實(shí)施例中,所述升級(jí)模塊,具體用于:
確定外部存儲(chǔ)器中的固件文件的標(biāo)志位的值;
若標(biāo)志位的值為2,則確定外部存儲(chǔ)器中對(duì)應(yīng)的固件文件為升級(jí)用的固件文件;
基于確定的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該設(shè)備還包括:處理模塊,用以當(dāng)確定標(biāo)志位的值為0時(shí),通過外部存儲(chǔ)器重新接收固件文件;
當(dāng)確定標(biāo)志位的值為1時(shí),啟動(dòng)APP固件區(qū)以執(zhí)行正常功能;
當(dāng)確定標(biāo)志位的值為3時(shí),生成報(bào)警信息并發(fā)送給指定的設(shè)備。
在一個(gè)具體的實(shí)施例中,所述網(wǎng)絡(luò)透?jìng)髂K具體包括:無線網(wǎng)絡(luò)透?jìng)髂K。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提出了一種固件升級(jí)的方法和設(shè)備,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),其中,該方法包括:通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將升級(jí)用的固件文件發(fā)送至bootloader;通過所述bootloader將獲取到的固件文件緩存在RAM中;通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。以此,通過外部大容量的外部存儲(chǔ)器,實(shí)現(xiàn)了更大的適用范圍,可以應(yīng)對(duì)更大容量固件文件的升級(jí),且通過網(wǎng)絡(luò)透?jìng)髂K進(jìn)行固件文件的傳輸,方便了操作。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對(duì)范圍的限定,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1為本發(fā)明實(shí)施例提出的一種固件升級(jí)的方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提出的一種STM32單片機(jī)的結(jié)構(gòu)的示意圖;
圖3為已有的的一種STM32單片機(jī)的固件升級(jí)所涉及的結(jié)構(gòu)的示意圖;
圖4為本發(fā)明實(shí)施例提出的一種STM32單片機(jī)的固件升級(jí)所涉及的結(jié)構(gòu)的示意圖;
圖5為本發(fā)明實(shí)施例提出的一種固件升級(jí)的設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和出示的本發(fā)明實(shí)施例的組件可以以各種不同的配置來布置和設(shè)計(jì)。因此,以下對(duì)在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
以下,根據(jù)實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明:
如圖1所示,為本發(fā)明實(shí)施例提出的一種固件升級(jí)的方法,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),如圖1所示,該方法包括:
步驟101、通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將升級(jí)用的固件文件發(fā)送至bootloader;
步驟102、通過所述bootloader將獲取到的固件文件緩存在RAM中;
步驟103、通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;
步驟104、利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
其中,一種具體的STM32單片機(jī)的結(jié)構(gòu)如圖2所示,包括bootloader、APP固件區(qū)、RAM(random access memory,隨機(jī)存取存儲(chǔ)器)。
具體的,bootloader用于執(zhí)行代碼執(zhí)行IAP功能,在具體的執(zhí)行過程中,需要JTAG或ISP的燒入;而APP固件區(qū)則執(zhí)行正常的用戶功能,具體是通過bootloader的IAP功能燒入。
如圖3所示,為一種已有的固件升級(jí)方式所涉及到的結(jié)構(gòu)示意圖,在該方式中,STM32單片機(jī)通過USB線與PC機(jī)相連,PC通過UART串口協(xié)議將APP固件文件傳輸給bootloader,bootloader將接收到的APP固件文件緩存到RAM中,接下來bootloader對(duì)APP固件區(qū)進(jìn)行擦除,擦除完成后bootloader將APP固件文件寫入APP固件區(qū)。這樣就完整的實(shí)現(xiàn)了一次固件升級(jí)的操作。
但是,這種方式有以下缺陷:
第一,傳統(tǒng)方案采用RAM進(jìn)行固件文件暫存,固件文件大小受到RAM容量的限制;
第二,傳統(tǒng)方案直接用存儲(chǔ)在RAM中的固件文件來燒錄到APP固件區(qū),一旦系統(tǒng)電源波動(dòng)或掉電,將會(huì)導(dǎo)致固件文件完全丟失和固件升級(jí)失?。?/p>
第三,傳統(tǒng)方案采用USB等有線方式進(jìn)行單片機(jī)和PC機(jī)的通信,給產(chǎn)品的外形設(shè)計(jì)帶來不便,在戶外或一些特殊應(yīng)用場(chǎng)景下操作變得繁瑣;
本發(fā)明人正是考慮到上述缺陷,提出了本發(fā)明的方案,采用兩級(jí)緩存,即固件文件流首先被緩存到RAM中,隨后RAM中的數(shù)據(jù)再被緩存到外部存儲(chǔ)器,具體的,例如為外部FLASH,其中,外部FLASH的容量足夠大,且外部存儲(chǔ)器容易更換,可以根據(jù)需要選取合適的容量,解決了固件文件大小受到RAM容量的限制問題。
本文設(shè)計(jì)采用兩級(jí)緩存,固件文件最終保存在外部FLASH中,掉電數(shù)據(jù)不會(huì)丟失。
此外,具體的網(wǎng)絡(luò)透?jìng)髂K可以為無線網(wǎng)絡(luò)透?jìng)髂K,一個(gè)具體的實(shí)施例中,無線網(wǎng)絡(luò)透?jìng)髂K例如可以為藍(lán)牙無線透?jìng)髂K,以此,可以通過藍(lán)牙的方式來將固件文件傳輸給STM32單片機(jī),這樣產(chǎn)品外形設(shè)計(jì)時(shí)就不用考慮預(yù)留調(diào)試接口,在戶外或一些特殊應(yīng)用場(chǎng)景下只需要將移動(dòng)終端(例如手機(jī))連接到云端和STM32單片機(jī)便可以很方便的升級(jí)固件了。
實(shí)施例1
本發(fā)明實(shí)施例1公開了一種固件升級(jí)的方法,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),如圖1所示,該方法包括:
步驟101、通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將升級(jí)用的固件文件發(fā)送至bootloader;
步驟102、通過所述bootloader將獲取到的固件文件緩存在RAM中;
步驟103、通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;
步驟104、利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該方法還包括:
若STM32單片機(jī)的復(fù)位為普通復(fù)位,將標(biāo)志位的值更新為0;
若STM32單片機(jī)的復(fù)位是基于傳輸固件文件進(jìn)行的復(fù)位,將標(biāo)志位的值更新為1;并對(duì)外部存儲(chǔ)器所接收到的固件文件進(jìn)行完整性的校驗(yàn);
若校驗(yàn)通過,則將標(biāo)志位的值更新為2;
若校驗(yàn)不通過,則將標(biāo)志位的值更新為0;
若檢測(cè)到STM32單片機(jī)中APP固件區(qū)發(fā)生物理損壞,則將標(biāo)志位的值更新為3。
在一個(gè)具體的實(shí)施例中,其過程分別的0、1、2、3個(gè)分支:
STM32單片機(jī)系統(tǒng)被復(fù)位后,從開始位置進(jìn)入bootloader程序區(qū),首先進(jìn)行更新標(biāo)志位的操作:如果是普通復(fù)位,更新標(biāo)志狀態(tài)則取0值,程序從對(duì)應(yīng)的0分支跳轉(zhuǎn)到APP程序區(qū);
如果是傳輸固件文件復(fù)位,更新標(biāo)志狀態(tài)則取1值,
程序從對(duì)應(yīng)的1分支進(jìn)入,通過預(yù)設(shè)的協(xié)議交互,獲取到固件文件的頭部和*.bin固件文件并存入外部FLASH,固件文件接收完成后利用文件頭部對(duì)文件進(jìn)行校驗(yàn),校驗(yàn)通過更新標(biāo)志狀態(tài)則取2值;校驗(yàn)未通過則更新標(biāo)志狀態(tài)則取0值;
如果分支1中正確接收了固件文件,接下來程序進(jìn)入分支2,執(zhí)行APP固件區(qū)擦除和寫入操作;
分支3是預(yù)留給APP固件區(qū)物理損壞時(shí)的異常拋出響應(yīng)。
在一個(gè)具體的實(shí)施例中,所述利用外部存儲(chǔ)器中的升級(jí)固件文件進(jìn)行固件升級(jí),具體包括:
確定外部存儲(chǔ)器中的固件文件的標(biāo)志位的值;
若標(biāo)志位的值為2,則確定外部存儲(chǔ)器中對(duì)應(yīng)的固件文件為升級(jí)用的固件文件;
基于確定的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
具體的,通過上述步驟,固件升級(jí)流程被分為0,1,2,3分支,接收固件操作和燒寫固件操作被分開進(jìn)行,即使發(fā)生系統(tǒng)電源波動(dòng)和掉電后,升級(jí)流程可以接著上一次的斷點(diǎn)或開始點(diǎn)繼續(xù)運(yùn)行。
在一個(gè)具體的實(shí)施例中,該方法還包括:
若確定標(biāo)志位的值為0,則通過外部存儲(chǔ)器重新接收固件文件;
若確定標(biāo)志位的值為1,則啟動(dòng)APP固件區(qū)以執(zhí)行正常功能;
若確定標(biāo)志位的值為3,則生成報(bào)警信息并發(fā)送給指定的設(shè)備。
在一個(gè)具體的實(shí)施例中,所述網(wǎng)絡(luò)透?jìng)髂K具體包括:無線網(wǎng)絡(luò)透?jìng)髂K。
實(shí)施例2
本發(fā)明實(shí)施例2公開了一種固件升級(jí)的設(shè)備,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),如圖5所示,該設(shè)備包括:
發(fā)送模塊201,用以通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將固件文件發(fā)送至bootloader;
第一緩存模塊202,用以通過所述bootloader將獲取到的固件文件緩存在RAM中;
第二緩存模塊203,用以通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;
升級(jí)模塊204,用以利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該設(shè)備還包括:
更新模塊,用以當(dāng)STM32單片機(jī)的復(fù)位為普通復(fù)位時(shí),將標(biāo)志位的值更新為0;
當(dāng)STM32單片機(jī)的復(fù)位是基于傳輸固件文件進(jìn)行的復(fù)位時(shí),將標(biāo)志位的值更新為1;并對(duì)外部存儲(chǔ)器所接收到的固件文件進(jìn)行完整性的校驗(yàn);
若校驗(yàn)通過,則將標(biāo)志位的值更新為2;
若校驗(yàn)不通過,則將標(biāo)志位的值更新為0;
當(dāng)檢測(cè)到STM32單片機(jī)中APP固件區(qū)發(fā)生物理損壞時(shí),則將標(biāo)志位的值更新為3。
在一個(gè)具體的實(shí)施例中,所述升級(jí)模塊204,具體用于:
確定外部存儲(chǔ)器中的固件文件的標(biāo)志位的值;
若標(biāo)志位的值為2,則確定外部存儲(chǔ)器中對(duì)應(yīng)的固件文件為升級(jí)用的固件文件;
基于確定的升級(jí)用的固件文件進(jìn)行固件升級(jí)。
在一個(gè)具體的實(shí)施例中,該設(shè)備還包括:處理模塊,用以當(dāng)確定標(biāo)志位的值為0時(shí),通過外部存儲(chǔ)器重新接收固件文件;
當(dāng)確定標(biāo)志位的值為1時(shí),啟動(dòng)APP固件區(qū)以執(zhí)行正常功能;
當(dāng)確定標(biāo)志位的值為3時(shí),生成報(bào)警信息并發(fā)送給指定的設(shè)備。
在一個(gè)具體的實(shí)施例中,所述網(wǎng)絡(luò)透?jìng)髂K具體包括:無線網(wǎng)絡(luò)透?jìng)髂K。
與現(xiàn)有技術(shù)相比,本發(fā)明實(shí)施例提出了一種固件升級(jí)的方法和設(shè)備,用于對(duì)STM32單片機(jī)的固件進(jìn)行升級(jí),其中,該方法包括:通過移動(dòng)終端獲取升級(jí)用的固件文件,并通過網(wǎng)絡(luò)透?jìng)髂K將升級(jí)用的固件文件發(fā)送至bootloader;通過所述bootloader將獲取到的固件文件緩存在RAM中;通過所述RAM不斷將所獲取到的固件文件轉(zhuǎn)移至外部存儲(chǔ)器中;利用外部存儲(chǔ)器中的升級(jí)用的固件文件進(jìn)行固件升級(jí)。以此,通過外部大容量的外部存儲(chǔ)器,實(shí)現(xiàn)了更大的適用范圍,可以應(yīng)對(duì)更大容量固件文件的升級(jí),且通過網(wǎng)絡(luò)透?jìng)髂K進(jìn)行固件文件的傳輸,方便了操作。
本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施場(chǎng)景的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。
本領(lǐng)域技術(shù)人員可以理解實(shí)施場(chǎng)景中的裝置中的模塊可以按照實(shí)施場(chǎng)景描述進(jìn)行分布于實(shí)施場(chǎng)景的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實(shí)施場(chǎng)景的一個(gè)或多個(gè)裝置中。上述實(shí)施場(chǎng)景的模塊可以合并為一個(gè)模塊,也可以進(jìn)一步拆分成多個(gè)子模塊。
上述本發(fā)明序號(hào)僅僅為了描述,不代表實(shí)施場(chǎng)景的優(yōu)劣。
以上公開的僅為本發(fā)明的幾個(gè)具體實(shí)施場(chǎng)景,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。