張航
摘 要:隨著科學(xué)技術(shù)的不斷發(fā)展,STM32也需要不斷的進行更新、升級,才能跟上時代的發(fā)展?;诖?,本文通過對介紹IAP的寫入途徑,從IAP技術(shù)工作的基本過程、中斷處理方式、IAP技術(shù)實現(xiàn)程序更新的關(guān)鍵點等方面論述了IAP技術(shù)在STM32程序更新中的應(yīng)用。
關(guān)鍵詞:STM32用戶;IAP;程序更新技術(shù)
DOI:10.16640/j.cnki.37-1222/t.2018.21.123
0 前言
在開發(fā)嵌入式系統(tǒng)時,最終的目的都是將編寫好的結(jié)構(gòu)代碼下載到預(yù)定的微控制芯片上。對于微控制片來說,大部分生產(chǎn)廠家的下載方式都是不同的。現(xiàn)階段,在對用戶程序進行加載時,所采用的方式大多是在線編程。很多生產(chǎn)芯片的公司將用戶更新程序中的方式和接口進行開放式設(shè)計,以此使整個系統(tǒng)能夠安全可靠的運行,同時提高其可維護性。
1 IAP寫入途徑
IAP的寫入途徑主要有三種:
第一,從串口寫入。從串口寫入是指在程序升級時,所需的固件是從串口寫入產(chǎn)品的。這種方法的使用,在開發(fā)引導(dǎo)程序過程中是比較簡單的,不用在額外的添加其他的文件系統(tǒng),只需要將串口驅(qū)動加入即可。從串口寫入的方法也有一定的缺點,在升級固件時,需要串口軟件、PC機以及串口線等,這些裝備很多用戶都不具備,應(yīng)用范圍比較小,同時操作的難度也是比較大的。第二,從U盤或者SD卡寫入。從U盤或者SD卡寫入是指在升級固件之前,先用U盤或者SD卡將固件拷貝下來,然后直接進行升級操作就可以將固件升級。這種方法的使用,使用這種方法的缺點是所需要的代碼數(shù)量比較多,程序的開發(fā)引導(dǎo)比較復(fù)雜,需要的存儲空間比較大。如用U盤時,需要將USB協(xié)議和文件系統(tǒng)嵌入程序中;在用SD卡時需要將SD卡中的驅(qū)動程序和文件系統(tǒng)嵌入到程序中。第三,從網(wǎng)絡(luò)直接升級。從網(wǎng)絡(luò)上直接升級的應(yīng)用對于用戶來說是最方便的,在升級過程中,并不需要使用任何設(shè)備。產(chǎn)品在聯(lián)網(wǎng)狀態(tài)下,IAP技術(shù)會實現(xiàn)自動升級。但是這種方法的應(yīng)用也有一定的缺點,在程序開發(fā)引導(dǎo)過程中,所需的代碼數(shù)量非常多且比較復(fù)雜。
2 IAP技術(shù)在STM32程序更新中的應(yīng)用
2.1 IAP技術(shù)工作的基本過程
IAP有兩部分項目代碼,其一是引導(dǎo)程序代碼;其二是產(chǎn)品功能程序代碼。其中在開發(fā)引導(dǎo)程序時,是需要利用專門的設(shè)備寫入的,如JTAG和串口等,這樣在開發(fā)過程中,需要寫的代碼數(shù)量就會大大降低,同時節(jié)省了存儲空間;在開發(fā)產(chǎn)品功能程序時,上述的三種寫入方法都可實現(xiàn)。這兩個程序在燒錄時,必須是同時的且在User Flash中。當(dāng)芯片通電之后,IAP技術(shù)的基本工作過程如下:第一步,引導(dǎo)程序開始運行;第二步,對STM32中的代碼進行檢查,檢查之后,識別出那些代碼需要更新;第三步,如果檢查之后,發(fā)現(xiàn)STM32中的代碼沒有需要更新的,那么就會自動轉(zhuǎn)接到第五步;第四步,檢查需要有更新的代碼,會執(zhí)行更新任務(wù),利用U盤、SD卡等寫入方式將固件升級,用戶只需要有U盤或者SD卡就可以完成升級,操作起來非常的簡單,且比較方便。然后存儲到User Flash中;第五步,如果沒有需要更新的代碼,那么會直接執(zhí)行產(chǎn)品功能程序代碼。
2.2 IAP中斷處理
在User Flash中,存在兩個程序,在開機之后,設(shè)備默認(rèn)的執(zhí)行順序是先從引導(dǎo)程序開始,因此需要更改產(chǎn)品功能程序的中斷向量。例如:在對STM32F4系列進行更新過程中,它的內(nèi)部閃存地址起始于0x08000000,文件開始執(zhí)行時,以此地址為起點。在運行過程中,會經(jīng)過以“中斷向量表”,這個中斷向量表起到響應(yīng)中斷的作用。在程序啟動之后,IAP技術(shù)會在表中將復(fù)位中斷向量取出,然后執(zhí)行復(fù)位中斷程序,以此將IAP啟動。這個表的地址是0x08000004,當(dāng)即將要進行中斷處理時,STM32F4內(nèi)部的各種硬件以及機制會自動的定位PC指針,將其定位到“中斷向量表”處。同時會在中斷的源頭處取出執(zhí)行過程中的中斷服務(wù)程序。這時,產(chǎn)品功能程序中的中斷向量表,會移動到程序的起始地址位置處[1]。
2.3 IAP技術(shù)實現(xiàn)程序更新的關(guān)鍵點
想要實現(xiàn)IAP技術(shù)對程序更新,需要做到以下幾點:
第一,對產(chǎn)品功能程序的中斷向量地址和起始地址進行更改。在聯(lián)網(wǎng)狀態(tài)下,則需要使用網(wǎng)卡芯片,同時還需要將網(wǎng)絡(luò)協(xié)議和驅(qū)動程序嵌入到程序中,如LEIP。例如:IAP中引導(dǎo)程序所占的空間是64K,對于產(chǎn)品功能程序來說,它的起始地址就應(yīng)該更改成0x08010000。對于程序文件system_stm32f4xx.c來說,文件內(nèi)部的flash向量地址應(yīng)該修改為SCB->VTOR=FLASH_BASE|0x10000[2]。第二,要燒錄程序內(nèi)部的flash,在聯(lián)網(wǎng)狀態(tài)下,則需要使用網(wǎng)卡芯片,同時還需要將網(wǎng)絡(luò)協(xié)議和驅(qū)動程序嵌入到程序中,如LEIP。仍然以STM32F4為例,由于它的扇區(qū)比較大,在保存扇區(qū)數(shù)據(jù)過程中,無法利用內(nèi)部的RAM,因此,在這種情況下,在寫地址時,都會現(xiàn)將扇區(qū)中的數(shù)據(jù)擦除,然后再寫入數(shù)據(jù),而不管是什么數(shù)據(jù)都會占用一個扇區(qū)。如果扇區(qū)中的數(shù)據(jù)特別重要,要注意先保存?zhèn)浞?。這樣就能夠?qū)崿F(xiàn)IAP技術(shù)對STM32系列的更新。
3 結(jié)論
綜上所述,IAP技術(shù)的寫入方法很多,合理的應(yīng)用這些方法可以使程序更新更加方便、快捷。經(jīng)過上文分析可得,我們IAP 技術(shù)在對STM32系列進行更新時,首先要了解IAP技術(shù)的基本工作過程。其次,它的中斷處理過程是非常重要的。最后實現(xiàn)程序更新需要把握兩個關(guān)鍵點。因此,IAP技術(shù)對于STM32系列的更新有非常重要的意義。
參考文獻:
[1]陳亮.基于STM32處理器的存儲器IAP編程技術(shù)[J].電子測試,
2017(10):77-78.
[2]唐玉兵,龍艦涵.基于STM32系列處理器IAP技術(shù)研究[J].科技展望,2015,25(21):122.