孫曉曄,王 程,成 彬
(1.石家莊開發區冀科雙實科技有限公司,河北 石家莊 050081;2. 河北省科學院應用數學研究所,河北 石家莊 050081; 3.河北省信息安全認證工程技術研究中心,河北 石家莊 050081)
?
基于TFTP協議實現STM32的IAP*
孫曉曄1,2,王 程2,3,成 彬2,3
(1.石家莊開發區冀科雙實科技有限公司,河北 石家莊 050081;2. 河北省科學院應用數學研究所,河北 石家莊 050081; 3.河北省信息安全認證工程技術研究中心,河北 石家莊 050081)
針對嵌入式產品分布廣、位置分散、維護升級困難的問題,提出了一種基于TFTP協議的STM32軟件升級系統的設計方案。該系統主要由STM32F407微控制器、LAN8720A網卡芯片和外擴存儲器W25Q128、IS62WV51216組成,采用IAP技術和以太網TFTP協議來更新無操作系統環境下STM32微控制器的軟件。經測試,該系統能夠保證升級文件數據的正確傳輸和可靠存儲,大大降低了嵌入式系統軟件升級的難度,減少了人工維護的成本。
嵌入式微控制器;在應用編程;以太網;簡單文件傳輸協議
隨著嵌入式技術以及32位嵌入式微處理器的發展,嵌入式系統的應用日益廣泛,嵌入式產品與人們的生產、生活結合得越來越緊密。然而,嵌入式系統的設計不可能一步到位,尤其是嵌入式軟件,需要不斷修改和完善。當程序出錯或用戶需求變更時,傳統的方法是安排技術人員到現場或將設備回收對控制器芯片重新編程。這種方式費時費力,效率低下[1]。采用IAP(In-Application Programming)技術則可以免除拆卸設備、燒錄MCU(Microcontroller Unit)等繁瑣的過程。IAP即“在應用中編程”,是指產品發布后在運行過程中通過預留的通信接口(如USART、I2C、CAN、USB、以太網接口等)對微控制器MCU中的軟件進行更新升級。
支持IAP技術的首要前提是微控制器必須基于可重復編程的閃存。STM32微控制器帶有可編程的內置閃存,擁有在數量上和種類上都非常豐富的外設通信接口,因此在STM32上實現IAP技術是完全可行的[2]。本文針對STM32F407型號的微控制器,基于TFTP(Trivial File Transfer Protocol)協議通過網口實現IAP,可以大大節省維護升級成本, 更方便快捷[3]。
在實現IAP功能時,MCU內部需要有兩塊存儲區,BOOT區和常態存儲區。MCU上電先運行BOOT區代碼,檢測是否需要更新軟件,如果不需要更新,程序指針跳到常態存儲區,開始執行放在常態存儲區的內容;如果需要更新,則先通過外設通信接口接收新的程序代碼,對常態存儲區的內容進行改寫,然后再跳轉執行新寫入的程序[4]。
相應的,軟件程序代碼也分為兩部分:存放在BOOT區的BootLoader程序和存放在常態存儲區的APP程序。BootLoader程序負責通過某種通信方式(如USB、USART等)接收程序或數據,執行對APP程序的更新。 APP程序才是真正的功能代碼,完成嵌入式系統需要的各種業務功能。 BootLoader程序必須通過JTAG(Joint Test Action Group)編程方式或ISP(In-System Programming)方式燒入,APP程序可以和BootLoader程序一起燒入,也可以通過BootLoader程序的IAP功能燒入。
系統硬件電路主要介紹以太網接口電路的設計。 STM32F407自帶MAC控制器,只需外接PHY芯片就可以完成以太網通信。PHY芯片選用LAN8720A,內置10-BASE-T/100BASE-TX全雙工傳輸模塊,支持10 Mb/s和100 Mb/s數據傳輸。STM32F407采用RMII接口與LAN8720A連接, RMII減少了10/100 Mb/s下微控制器以太網外設與外部PHY間的引腳數,僅需10根線連接即可[4]。RMII和PHY共用的參考時鐘必須是50 MHz,且必須由外部提供,如有源晶振或STM32F4的MCO輸出。這里,LAN8720A外接25 MHz石英晶振,通過內部倍頻到50 MHz,給STM32F407的RMII提供50 MHz參考時鐘,輸出參考時鐘給MAC控制器,這樣可以降低BOM(Bill of Material)成本[5]。
本系統中PHY層芯片LAN8720A相當于物理層,STM32F407自帶的MAC層相當于數據鏈路層,而移植的LWIP提供的就是網絡層、傳輸層的功能,應用層需要用戶根據具體功能去實現,即BootLoader和APP程序。
STM32F407的內部閃存地址起始于0x8000000,一般情況下, BootLoader代碼就從該地址開始存放,APP程序存放在Flash中剩余的空間,并且偏移量為0x200的倍數。
3.1 BootLoader程序
BootLoader程序主要完成系統初始化、TFTP數據通信、更新Flash存儲區內容和執行程序的跳轉等功能[6]。其工作流程如圖1所示。

圖1 BootLoader軟件工作流程
系統初始化主要完成外部總線控制器的初始化、堆棧的初始化、定時器配置和LAN8720A網卡芯片的初始化、LWIP內核初始化等操作。之后,通過監測外部按鍵,判斷是否進入IAP模式進行升級,若超時,則跳轉到常態存儲區,執行原來的APP程序[7-8]。
升級過程中文件的傳送采用TFTP協議。TFTP是一個工作在UDP頂層的簡單文件傳輸協議,基于C/S結構。一個TFTP客戶端向TFTP服務器發起一個文件傳輸請求,服務器響應請求,文件傳輸開始。數據以固定尺寸(本系統采用512 B)的幀進行傳輸。在下一個數據幀傳輸前,接收方必須對剛剛收到的數據幀進行回應。如果接收到的數據幀大小小于指定的數據幀大小,說明當前傳輸的數據幀是最后一個數據幀,傳輸結束。這里PC機作為客戶端,嵌入式平臺實現TFTP服務器,TFTP服務器響應PC TFTP客戶端發送的寫文件請求。由于TFTP基于不可靠的UDP協議, 因此,在程序中添加能夠保證數據有效傳輸的機制來及時處理數據丟失的情況。在接收到每個以太網數據幀后進行CRC校驗,如果有錯誤則通知客戶端重新發送該數據幀, 這樣能有效提高程序更新的可靠性。
3.2 APP程序
APP程序的生成需注意以下幾點:
(1)起始地址和存儲空間大小設置;
(2)中斷向量表偏移量設置;
(3)生成.bin文件,用于IAP更新。MDK開發工具默認生成的文件是.hex,但利用IAP寫入的程序文件不能是.hex格式,可利用MDK自帶的格式轉換工具fromelf.exe轉換成.bin文件。
3.3 系統軟件設計需注意的問題
系統在軟件設計中需注意以下幾點:
(1)存儲空間的分配。Boot區和常態存儲區的大小可以根據應用的具體情況人為分配,但分配時盡可能使常態存儲區最大化,為以后程序的升級留出余量。
(2)BootLoader代碼設計時應盡量簡潔,避免使用中斷、復雜的底層驅動及算法。
(3)BootLoader代碼在使用外設后,啟動APP代碼之前一定要先初始化該外設,即要讓APP代碼認為MCU只是剛上電運行,而不是跑完一個系統再調用自己。如果BootLoader代碼沒有執行該動作,當APP代碼運行時,MCU的外設處于不確定狀態(尤其是中斷未關閉),可能會帶來一些預料不到的錯誤。
(4)數據通信過程中, 向STM32發送程序文件時需考慮STM32對Flash的寫入速度,保證每次傳送的數據包都能正確寫入。
(5)傳輸過程中,升級文件分段傳送,可能存在數據丟失、網絡不穩定等現象。對每段數據編號,根據編號判斷是否有數據包丟失,并增加CRC校驗,保證每段數據傳輸的正確性。對于錯誤或丟失的數據包,采取重傳機制,提高IAP的成功率[9]。
本文對基于TFTP協議的STM32軟件更新進行了研究,充分利用以太網的傳輸能力和便捷性,設計并實現了IAP升級系統。通過實驗測試,基于TFTP 協議的STM32軟件遠程升級系統能夠保證數據的正確傳輸和存儲,大大降低了對嵌入式系統軟件的升級維護難度,應用廣泛。
[1] 溫世堅,張偉波.基于STM32的遠程升級系統的設計[J].科技廣場,2013,26(5):97-100.
[2] 李興鶴,蔡亮,宋吉波,等.STM32用戶基于IAP的程序更新技術[J].單片機與嵌入式系統應用, 2012,12(1):74-75.
[3] 王程,周安琳.基于Autofac對乳制品安全風險預警系統的擴展設計[J]. 河北省科學院學報,2013,30(1):1-4,14.
[4] 李婉婉,李宏.單片機IAP升級方法在血液分析儀中的應用[J]. 微型機與應用,2014,33(21):16-18.
[5] 王娜,成彬,郝友帥.水流量遠程智能監測系統的設計與實現[J]. 河北省科學院學報,2011,28(2):34-39.
[6] 武輝林.模數轉換器AD7791及其應用格式[J].河北省科學院學報, 2011,28(2):26-29.
[7] 李俊,王金海.基于TFTP協議的ARM軟件遠程更新系統[J].工礦自動化,2010,37(7):22-25.
[8] 游侃民.嵌入式系統網絡化BOOTLOADER的設計與實現[D].廣州:華南理工大學,2010.
[9] 許青青.一種輕量級Bootloader(LWBL)的設計與實現[D].上海:華東師范大學,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
河北省科學院科技計劃項目(15604)
TP39
A
1674-7720(2016)07- 0076- 03
孫曉曄,王程,成彬. 基于TFTP協議實現STM32的IAP[J].微型機與應用,2016,35(7):76-78.
2015-11-04)
孫曉曄(1981-),女,本科,電子工程師,主要研究方向:嵌入式系統。
王程(1978-),男,本科,副研究員,主要研究方向:大數據分析與處理。
成彬(1973-),男,碩士,研究員,主要研究方向:云計算與大數據。