孫曉曄,王 程,成 彬
(1.石家莊開(kāi)發(fā)區(qū)冀科雙實(shí)科技有限公司,河北 石家莊 050081;2. 河北省科學(xué)院應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081; 3.河北省信息安全認(rèn)證工程技術(shù)研究中心,河北 石家莊 050081)
?
基于TFTP協(xié)議實(shí)現(xiàn)STM32的IAP*
孫曉曄1,2,王 程2,3,成 彬2,3
(1.石家莊開(kāi)發(fā)區(qū)冀科雙實(shí)科技有限公司,河北 石家莊 050081;2. 河北省科學(xué)院應(yīng)用數(shù)學(xué)研究所,河北 石家莊 050081; 3.河北省信息安全認(rèn)證工程技術(shù)研究中心,河北 石家莊 050081)
針對(duì)嵌入式產(chǎn)品分布廣、位置分散、維護(hù)升級(jí)困難的問(wèn)題,提出了一種基于TFTP協(xié)議的STM32軟件升級(jí)系統(tǒng)的設(shè)計(jì)方案。該系統(tǒng)主要由STM32F407微控制器、LAN8720A網(wǎng)卡芯片和外擴(kuò)存儲(chǔ)器W25Q128、IS62WV51216組成,采用IAP技術(shù)和以太網(wǎng)TFTP協(xié)議來(lái)更新無(wú)操作系統(tǒng)環(huán)境下STM32微控制器的軟件。經(jīng)測(cè)試,該系統(tǒng)能夠保證升級(jí)文件數(shù)據(jù)的正確傳輸和可靠存儲(chǔ),大大降低了嵌入式系統(tǒng)軟件升級(jí)的難度,減少了人工維護(hù)的成本。
嵌入式微控制器;在應(yīng)用編程;以太網(wǎng);簡(jiǎn)單文件傳輸協(xié)議
隨著嵌入式技術(shù)以及32位嵌入式微處理器的發(fā)展,嵌入式系統(tǒng)的應(yīng)用日益廣泛,嵌入式產(chǎn)品與人們的生產(chǎn)、生活結(jié)合得越來(lái)越緊密。然而,嵌入式系統(tǒng)的設(shè)計(jì)不可能一步到位,尤其是嵌入式軟件,需要不斷修改和完善。當(dāng)程序出錯(cuò)或用戶(hù)需求變更時(shí),傳統(tǒng)的方法是安排技術(shù)人員到現(xiàn)場(chǎng)或?qū)⒃O(shè)備回收對(duì)控制器芯片重新編程。這種方式費(fèi)時(shí)費(fèi)力,效率低下[1]。采用IAP(In-Application Programming)技術(shù)則可以免除拆卸設(shè)備、燒錄MCU(Microcontroller Unit)等繁瑣的過(guò)程。IAP即“在應(yīng)用中編程”,是指產(chǎn)品發(fā)布后在運(yùn)行過(guò)程中通過(guò)預(yù)留的通信接口(如USART、I2C、CAN、USB、以太網(wǎng)接口等)對(duì)微控制器MCU中的軟件進(jìn)行更新升級(jí)。
支持IAP技術(shù)的首要前提是微控制器必須基于可重復(fù)編程的閃存。STM32微控制器帶有可編程的內(nèi)置閃存,擁有在數(shù)量上和種類(lèi)上都非常豐富的外設(shè)通信接口,因此在STM32上實(shí)現(xiàn)IAP技術(shù)是完全可行的[2]。本文針對(duì)STM32F407型號(hào)的微控制器,基于TFTP(Trivial File Transfer Protocol)協(xié)議通過(guò)網(wǎng)口實(shí)現(xiàn)IAP,可以大大節(jié)省維護(hù)升級(jí)成本, 更方便快捷[3]。
在實(shí)現(xiàn)IAP功能時(shí),MCU內(nèi)部需要有兩塊存儲(chǔ)區(qū),BOOT區(qū)和常態(tài)存儲(chǔ)區(qū)。MCU上電先運(yùn)行BOOT區(qū)代碼,檢測(cè)是否需要更新軟件,如果不需要更新,程序指針跳到常態(tài)存儲(chǔ)區(qū),開(kāi)始執(zhí)行放在常態(tài)存儲(chǔ)區(qū)的內(nèi)容;如果需要更新,則先通過(guò)外設(shè)通信接口接收新的程序代碼,對(duì)常態(tài)存儲(chǔ)區(qū)的內(nèi)容進(jìn)行改寫(xiě),然后再跳轉(zhuǎn)執(zhí)行新寫(xiě)入的程序[4]。
相應(yīng)的,軟件程序代碼也分為兩部分:存放在BOOT區(qū)的BootLoader程序和存放在常態(tài)存儲(chǔ)區(qū)的APP程序。BootLoader程序負(fù)責(zé)通過(guò)某種通信方式(如USB、USART等)接收程序或數(shù)據(jù),執(zhí)行對(duì)APP程序的更新。 APP程序才是真正的功能代碼,完成嵌入式系統(tǒng)需要的各種業(yè)務(wù)功能。 BootLoader程序必須通過(guò)JTAG(Joint Test Action Group)編程方式或ISP(In-System Programming)方式燒入,APP程序可以和BootLoader程序一起燒入,也可以通過(guò)BootLoader程序的IAP功能燒入。
系統(tǒng)硬件電路主要介紹以太網(wǎng)接口電路的設(shè)計(jì)。 STM32F407自帶MAC控制器,只需外接PHY芯片就可以完成以太網(wǎng)通信。PHY芯片選用LAN8720A,內(nèi)置10-BASE-T/100BASE-TX全雙工傳輸模塊,支持10 Mb/s和100 Mb/s數(shù)據(jù)傳輸。STM32F407采用RMII接口與LAN8720A連接, RMII減少了10/100 Mb/s下微控制器以太網(wǎng)外設(shè)與外部PHY間的引腳數(shù),僅需10根線連接即可[4]。RMII和PHY共用的參考時(shí)鐘必須是50 MHz,且必須由外部提供,如有源晶振或STM32F4的MCO輸出。這里,LAN8720A外接25 MHz石英晶振,通過(guò)內(nèi)部倍頻到50 MHz,給STM32F407的RMII提供50 MHz參考時(shí)鐘,輸出參考時(shí)鐘給MAC控制器,這樣可以降低BOM(Bill of Material)成本[5]。
本系統(tǒng)中PHY層芯片LAN8720A相當(dāng)于物理層,STM32F407自帶的MAC層相當(dāng)于數(shù)據(jù)鏈路層,而移植的LWIP提供的就是網(wǎng)絡(luò)層、傳輸層的功能,應(yīng)用層需要用戶(hù)根據(jù)具體功能去實(shí)現(xiàn),即BootLoader和APP程序。
STM32F407的內(nèi)部閃存地址起始于0x8000000,一般情況下, BootLoader代碼就從該地址開(kāi)始存放,APP程序存放在Flash中剩余的空間,并且偏移量為0x200的倍數(shù)。
3.1 BootLoader程序
BootLoader程序主要完成系統(tǒng)初始化、TFTP數(shù)據(jù)通信、更新Flash存儲(chǔ)區(qū)內(nèi)容和執(zhí)行程序的跳轉(zhuǎn)等功能[6]。其工作流程如圖1所示。
圖1 BootLoader軟件工作流程
系統(tǒng)初始化主要完成外部總線控制器的初始化、堆棧的初始化、定時(shí)器配置和LAN8720A網(wǎng)卡芯片的初始化、LWIP內(nèi)核初始化等操作。之后,通過(guò)監(jiān)測(cè)外部按鍵,判斷是否進(jìn)入IAP模式進(jìn)行升級(jí),若超時(shí),則跳轉(zhuǎn)到常態(tài)存儲(chǔ)區(qū),執(zhí)行原來(lái)的APP程序[7-8]。
升級(jí)過(guò)程中文件的傳送采用TFTP協(xié)議。TFTP是一個(gè)工作在UDP頂層的簡(jiǎn)單文件傳輸協(xié)議,基于C/S結(jié)構(gòu)。一個(gè)TFTP客戶(hù)端向TFTP服務(wù)器發(fā)起一個(gè)文件傳輸請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求,文件傳輸開(kāi)始。數(shù)據(jù)以固定尺寸(本系統(tǒng)采用512 B)的幀進(jìn)行傳輸。在下一個(gè)數(shù)據(jù)幀傳輸前,接收方必須對(duì)剛剛收到的數(shù)據(jù)幀進(jìn)行回應(yīng)。如果接收到的數(shù)據(jù)幀大小小于指定的數(shù)據(jù)幀大小,說(shuō)明當(dāng)前傳輸?shù)臄?shù)據(jù)幀是最后一個(gè)數(shù)據(jù)幀,傳輸結(jié)束。這里PC機(jī)作為客戶(hù)端,嵌入式平臺(tái)實(shí)現(xiàn)TFTP服務(wù)器,TFTP服務(wù)器響應(yīng)PC TFTP客戶(hù)端發(fā)送的寫(xiě)文件請(qǐng)求。由于TFTP基于不可靠的UDP協(xié)議, 因此,在程序中添加能夠保證數(shù)據(jù)有效傳輸?shù)臋C(jī)制來(lái)及時(shí)處理數(shù)據(jù)丟失的情況。在接收到每個(gè)以太網(wǎng)數(shù)據(jù)幀后進(jìn)行CRC校驗(yàn),如果有錯(cuò)誤則通知客戶(hù)端重新發(fā)送該數(shù)據(jù)幀, 這樣能有效提高程序更新的可靠性。
3.2 APP程序
APP程序的生成需注意以下幾點(diǎn):
(1)起始地址和存儲(chǔ)空間大小設(shè)置;
(2)中斷向量表偏移量設(shè)置;
(3)生成.bin文件,用于IAP更新。MDK開(kāi)發(fā)工具默認(rèn)生成的文件是.hex,但利用IAP寫(xiě)入的程序文件不能是.hex格式,可利用MDK自帶的格式轉(zhuǎn)換工具fromelf.exe轉(zhuǎn)換成.bin文件。
3.3 系統(tǒng)軟件設(shè)計(jì)需注意的問(wèn)題
系統(tǒng)在軟件設(shè)計(jì)中需注意以下幾點(diǎn):
(1)存儲(chǔ)空間的分配。Boot區(qū)和常態(tài)存儲(chǔ)區(qū)的大小可以根據(jù)應(yīng)用的具體情況人為分配,但分配時(shí)盡可能使常態(tài)存儲(chǔ)區(qū)最大化,為以后程序的升級(jí)留出余量。
(2)BootLoader代碼設(shè)計(jì)時(shí)應(yīng)盡量簡(jiǎn)潔,避免使用中斷、復(fù)雜的底層驅(qū)動(dòng)及算法。
(3)BootLoader代碼在使用外設(shè)后,啟動(dòng)APP代碼之前一定要先初始化該外設(shè),即要讓APP代碼認(rèn)為MCU只是剛上電運(yùn)行,而不是跑完一個(gè)系統(tǒng)再調(diào)用自己。如果BootLoader代碼沒(méi)有執(zhí)行該動(dòng)作,當(dāng)APP代碼運(yùn)行時(shí),MCU的外設(shè)處于不確定狀態(tài)(尤其是中斷未關(guān)閉),可能會(huì)帶來(lái)一些預(yù)料不到的錯(cuò)誤。
(4)數(shù)據(jù)通信過(guò)程中, 向STM32發(fā)送程序文件時(shí)需考慮STM32對(duì)Flash的寫(xiě)入速度,保證每次傳送的數(shù)據(jù)包都能正確寫(xiě)入。
(5)傳輸過(guò)程中,升級(jí)文件分段傳送,可能存在數(shù)據(jù)丟失、網(wǎng)絡(luò)不穩(wěn)定等現(xiàn)象。對(duì)每段數(shù)據(jù)編號(hào),根據(jù)編號(hào)判斷是否有數(shù)據(jù)包丟失,并增加CRC校驗(yàn),保證每段數(shù)據(jù)傳輸?shù)恼_性。對(duì)于錯(cuò)誤或丟失的數(shù)據(jù)包,采取重傳機(jī)制,提高IAP的成功率[9]。
本文對(duì)基于TFTP協(xié)議的STM32軟件更新進(jìn)行了研究,充分利用以太網(wǎng)的傳輸能力和便捷性,設(shè)計(jì)并實(shí)現(xiàn)了IAP升級(jí)系統(tǒng)。通過(guò)實(shí)驗(yàn)測(cè)試,基于TFTP 協(xié)議的STM32軟件遠(yuǎn)程升級(jí)系統(tǒng)能夠保證數(shù)據(jù)的正確傳輸和存儲(chǔ),大大降低了對(duì)嵌入式系統(tǒng)軟件的升級(jí)維護(hù)難度,應(yīng)用廣泛。
[1] 溫世堅(jiān),張偉波.基于STM32的遠(yuǎn)程升級(jí)系統(tǒng)的設(shè)計(jì)[J].科技廣場(chǎng),2013,26(5):97-100.
[2] 李興鶴,蔡亮,宋吉波,等.STM32用戶(hù)基于IAP的程序更新技術(shù)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2012,12(1):74-75.
[3] 王程,周安琳.基于Autofac對(duì)乳制品安全風(fēng)險(xiǎn)預(yù)警系統(tǒng)的擴(kuò)展設(shè)計(jì)[J]. 河北省科學(xué)院學(xué)報(bào),2013,30(1):1-4,14.
[4] 李婉婉,李宏.單片機(jī)IAP升級(jí)方法在血液分析儀中的應(yīng)用[J]. 微型機(jī)與應(yīng)用,2014,33(21):16-18.
[5] 王娜,成彬,郝友帥.水流量遠(yuǎn)程智能監(jiān)測(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 河北省科學(xué)院學(xué)報(bào),2011,28(2):34-39.
[6] 武輝林.模數(shù)轉(zhuǎn)換器AD7791及其應(yīng)用格式[J].河北省科學(xué)院學(xué)報(bào), 2011,28(2):26-29.
[7] 李俊,王金海.基于TFTP協(xié)議的ARM軟件遠(yuǎn)程更新系統(tǒng)[J].工礦自動(dòng)化,2010,37(7):22-25.
[8] 游侃民.嵌入式系統(tǒng)網(wǎng)絡(luò)化BOOTLOADER的設(shè)計(jì)與實(shí)現(xiàn)[D].廣州:華南理工大學(xué),2010.
[9] 許青青.一種輕量級(jí)Bootloader(LWBL)的設(shè)計(jì)與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2012.
STM32 in-application programming based on TFTP
Sun Xiaoye1,2, Wang Cheng2,3, Cheng Bin2,3
(1.Shijiazhuang Development Zone JKSS Science & Technology Co., Ltd, Shijiazhuang 050081, China;2.Institute of Applied Mathematics, Hebei Academy of Sciences, Shijiazhuang 050081, China;3.Hebei Information Security Certification Engineering Technology Research Center, Shijiazhuang 050081, China)
Aiming at the problems of wide-range distribution, dispersed location, weak maintenance and difficult upgrade for embedded products, a resolving scheme of remote update system of STM32 software based on Trivial File Transfer Protocol (TFTP) is put forward in this paper. The system is mainly composed of STM32F407 microcontroller, LAN8720A network card chip, W25Q128 FLASH and IS62WV51216 SRAM. It can remotely update application software of STM32 microcontroller without operating system by using IAP technology and TFTP protocol of Ethernet. The testing results show that the system can ensure correct transmission and reliable storage of upgrade file data, and reduce the difficulty of upgrade and maintenance of STM32 embedded system software greatly.
embedded microcontroller; in-application programming (IAP); Ethernet; trivial file transfer protocol
河北省科學(xué)院科技計(jì)劃項(xiàng)目(15604)
TP39
A
1674-7720(2016)07- 0076- 03
孫曉曄,王程,成彬. 基于TFTP協(xié)議實(shí)現(xiàn)STM32的IAP[J].微型機(jī)與應(yīng)用,2016,35(7):76-78.
2015-11-04)
孫曉曄(1981-),女,本科,電子工程師,主要研究方向:嵌入式系統(tǒng)。
王程(1978-),男,本科,副研究員,主要研究方向:大數(shù)據(jù)分析與處理。
成彬(1973-),男,碩士,研究員,主要研究方向:云計(jì)算與大數(shù)據(jù)。