劉曉旭 陳振杰 張建偉 馬國駒
摘要:針對外場環境中無法使用JTAG調試口對數字信號處理器(DSP)代碼進行在線升級的問題,對YModem數據傳輸協議及遠程加載基本原理進行簡要介紹。提出了一種基于YModem協議的極簡遠程加載實現方法,可以用最小的代碼量,利用串口對DSP代碼進行遠程升級,解決外場升級DSP的障礙。通過實驗證明了極簡遠程加載實現方法的完整性及可用性。
關鍵詞:YModem協議;遠程加載;數字信號處理器;Bootloader
中圖分類號:TP316文獻標志碼:A文章編號:1008-1739(2020)18-57-4

0引言
DSP是一種在數字信號處理技術基礎上發展起來的微處理器,因具有強大的數字信號處理能力而在各種測控終端中獲得廣泛應用,主要應用是實時快速地實現各種數字信號處理算法[1]。在DSP的開發設計過程中,一般采用JTAG口完成軟件調試及應用程序的加載固化。
隨著電子技術的發展和用戶需求的提升,對已投入使用的DSP設備的升級越來越頻繁,傳統的升級方法是取下設備通過JTAG仿真器在線更新程序[2]。該方式簡單方便,但當DSP安裝于密封、遠程及高空等難以拆卸的設備中時,就十分不便,因此開發高效便捷的遠程升級技術迫在眉睫。
較早的遠程加載方法一般不采用任何協議,通過Bootloader直接進行串口數據的接收及存儲,此類方法雖然簡單直接,但是一旦傳輸過程中出現誤碼,需要將全部數據重新傳輸一次,效率較低。基于高效且準確的遠程加載需求,提出一種基于YModem協議的極簡遠程加載實現方法,用最小的內存空間實現DSP應用程序的遠程加載更新,并成功進行了工程驗證。
1 YModem協議
XModem及YModem是應用十分廣泛的異步文件傳輸協議。其中,XModem協議結構簡單,但每包數據幀最長僅能傳輸128 Byte數據,效率較低;YModem是由Xmodem改進的一種穩定快速的傳輸協議,單包傳輸數據長度提升至1 024 Byte,傳輸效率更高且可以實現批量傳輸,因而應用更為廣泛。
YModem是一種半雙工協議,不能同時雙向收發控制信號,有助于控制流量、減少緩沖區超限問題。YModem是一種握手協議,發送之后需等待回應:發送方每發送一幀數據,都要等待接收方的確認應答,收到應答后再發送新的一幀數據。如果接收方由于某種原因未能正確接收到此幀數據,會向發送方發送重新傳輸數據幀的申請,則發送方會重新發送此幀數據,直到接收方正確接收。這種機制與CRC校驗共同保證了數據傳輸的準確性。同時,分包傳輸、分包校驗的傳輸機制,可以及時發現誤碼,及時重新傳輸出錯數據包,提高數據傳輸效率。
依據YModem協議,每一幀的發送數據由幀頭、數據段以及幀尾組成,具體格式如表1所示,其中數據段長度可以是128 Byte(幀頭為SOH),也可以是1 024 Byte(幀頭為STX),采用1 024 Byte數據一幀的傳輸方式,可以大大提高傳輸速度[3-4]。

YModem協議傳輸的完整握手流程如圖1所示。

YModem通信協議握手流程如下:
①接收方發送字符C通知發送方,啟動握手流程,進入等待SOH狀態,如果沒有回應,則重新開啟或超時退出;
②發送方開始時處于等待過程中,等待接收方的啟動信號C,收到接收方發送的字符C后,發送方發送幀頭為SOH的文件信息包,包含序號以及文件名、文件大小等信息,然后進入等待字符ACK狀態;
③接收方收到文件信息包,進行CRC校驗,如校驗成功,則發送ACK確認,發送方收到ACK后,進入等待文件傳輸開啟信號,即等待字符C狀態;如果CRC校驗失敗,則發送NAK字符,請求發送方重新發送此數據包;
④接收方發送字符C,通知發送方啟動文件發送,進入等待SOH或STX狀態;
⑤發送方接收到字符C后,進入正式文件發送流程,發送數據包,等待接收方回復ACK后繼續發送下一包;
⑥文件發送完畢后,發送方發出EOT結束信號,接收方回復ACK后,發送方發送以全0填充、序號為0的SOH數據包,接收方回復ACK,至此握手過程結束。
如上文所述,利用YModem協議完善的握手機制和出錯管理機制,引導程序可以準確無誤又快速地接收到包含應用程序的數據包。
2遠程加載基本原理
DSP遠程加載的實現共涉及三部分程序:引導程序(Bootloader)、應用程序以及上位機程序。其中,Bootloader和上位機程序是固定不變的,是遠程升級系統的主要組成部分,應用程序是DSP開發者編寫的用以完成指定功能的代碼,會隨應用需求的變化而變化。
2.1 Bootloader
Bootloader是提前固化在DSP指定空間、在DSP內核啟動前運行的一段程序,對應用程序編程用戶保護、不可被修改,主要作用有:
①初始化硬件設備及內存分配;
②與上位機進行數據交互,接收上位機發送的待升級程序固件與程序存儲地址等信息,并將固件燒錄至Flash指定地址;
③完成程序升級后,跳轉至應用程序。
Bootloader的功能相對簡單且固定,因而具有很好的通用性,易于移植。遠程升級的實質就是通過Bootloader來固化應用程序,不用改變DSP芯片的啟動方式,直接采用默認的片上Flash啟動方式即可。
2.2上位機程序
上位機程序的主要作用是對應用程序編譯生成的文件進行格式轉換、信息提取以及打包發送等功能[5-8]。
由DSP開發工具編譯生成的可執行文件地址不連續,且對象文件格式無法直接用于Flash燒寫,因而需要通過上位機程序將應用程序編譯生成的.out文件轉換成.hex文件,再將轉換后的.hex文件打包發送給Bootloader。
2.3遠程加載實現
遠程加載的工作流程如圖2所示。
①上位機程序對.out文件進行格式轉換和信息提取;
②Bootloader及上位機程序通過特定協議進行可燒錄的應用程序的數據傳輸;
③Bootloader將應用程序數據燒寫至Flash的指定區域,并跳轉至應用程序入口,啟動DSP。

3基于YModem協議的極簡遠程加載實現
3.1實現方法
提出一種基于YModem協議的極簡遠程加載實現方法,和普通遠程加載方法相比,本文方法主要有以下改進:
(1)數據傳輸協議的更新
使用YModem協議進行Bootloader與上位機軟件之間的數據傳輸,握手機制以及分包傳輸和分包校驗的操作流程,提高了數據傳輸的效率及準確率。
(2)Bootloader的優化
由于Bootloader與應用程序共同占用DSP內存空間,而DSP內存空間畢竟有限,因此Bootloader要設計的盡量小。
在Bootloader與上位機之間的數據交互過程中,如果將所有數據幀內的有效數據都存入寄存器中,待數據傳輸完成之后再一起進行Flash燒寫,那么勢必需要在Bootloader中開辟一個很大的存儲空間。本著節省內存空間的原則本例只開辟收、寫2個獨立的1 KB寄存器空間,一個寄存器用來存放當前收到的一幀1 KB數據內容;另一個寄存器存放待寫入Flash的數據。當收寄存器收到數據并校驗無誤后,將其寫入寫寄存器,同時清空收寄存器,用以繼續接收上位機軟件發送的數據;寫寄存器判斷有數據寫入后,開始向Flash寫入,具體實現流程如圖3所示。通過分析,以燒錄一個大小為1 MB的應用程序為例,此極簡加載方法可以節約DSP中原本為存儲數據而開辟的950 300 Byte的RAM內存空間。

3.2實現過程
經過以上改進,提出的基于YModem協議的極簡遠程加載實現方法可以在占用最少內存資源的前提下,實現較傳統遠程加載方法更高效更準確的傳輸。
SecureCRT是較為常用的上位機軟件,可實現XModem、YModem以及ZModem協議的數據傳輸,本例使用SecureCRT作為上位機軟件,以TI公司的OMPL138為硬件平臺,對提出的基于YModem協議的極簡遠程加載實現方法進行工程驗證。
利用上位機軟件SecureCRT向Bootloader發送.hex文件,Bootloader依據YModem協議校驗解析數據幀并存入寄存器,再將寄存器中的.hex文件燒錄至Flash中,即完成遠程加載。數據傳輸完成后SecureCRT應用界面如圖4所示,數據傳輸完成100%且0 Errors,表示數據傳輸全部完成且未出現傳輸錯誤,對以OMAPL138為核心的終端設備斷電重啟,軟件顯示已更新至新版本。至此,提出的基于YModem協議的極簡遠程加載實現方法已在硬件平臺上完成驗證。

4結束語
提出了一種基于YModem協議的極簡遠程加載實現方法,經工程驗證,此方法可以用最小的內存代價快速穩定地實現DSP應用程序的遠程加載。不僅如此,由于YModem協議規定發送方需要向接收方發送數據的文件名和大小,這就使得采用YModem協議進行的遠程加載還可以根據實際應用需求對本文提出的方法進行改進,如實現Flash分區存儲不同的應用程序,用戶可以根據需求選擇不同的應用程序運行。
參考文獻
[1]劉瑞.DSP系統的CAN總線遠程升級方法[J].微型機與應用,2016,35(13):71-72,75.
[2]李無言.一步步寫嵌入式操作系統[M].北京:電子工業出版社,2011.
[3]吳兆芝.ARM平臺多進程微內核嵌入式操作系統Ymodem下載功能設計與實現[J].南京曉莊學院學報,2013,29(3): 79-83,89.
[4]戈潤棟,馬旭東.CAN總線分布式系統程序的以太網在線更新[J].工業控制計算機,2013,26(11):19-20,24.
[5]雷衛延,敖振浪,周欽強.基于STM32的在線應用編程(IAP)開發[J].電子測量技術,2015,38(5):62-66.
[6] MENG H,PAN L.Realization of Remote Update Technology for Embedded Equipment based onμC/OS-Ⅱ[J].Journal of Measurement Science and Instrumentation,2014(3):69-72.
[7]羅文,王莉娜,肖鯤.基于GPRS的嵌入式系統遠程監控和升級[J].電子技術應用,2010,36(5):159-162.
[8]吳佳敏.嵌入式遠程工業監控系統的終端設備軟件設計與實現[D].成都:電子科技大學,2010.