劉曉旭 陳振杰 張建偉 馬國駒
摘要:針對外場環(huán)境中無法使用JTAG調(diào)試口對數(shù)字信號處理器(DSP)代碼進(jìn)行在線升級的問題,對YModem數(shù)據(jù)傳輸協(xié)議及遠(yuǎn)程加載基本原理進(jìn)行簡要介紹。提出了一種基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法,可以用最小的代碼量,利用串口對DSP代碼進(jìn)行遠(yuǎn)程升級,解決外場升級DSP的障礙。通過實(shí)驗(yàn)證明了極簡遠(yuǎn)程加載實(shí)現(xiàn)方法的完整性及可用性。
關(guān)鍵詞:YModem協(xié)議;遠(yuǎn)程加載;數(shù)字信號處理器;Bootloader
中圖分類號:TP316文獻(xiàn)標(biāo)志碼:A文章編號:1008-1739(2020)18-57-4
0引言
DSP是一種在數(shù)字信號處理技術(shù)基礎(chǔ)上發(fā)展起來的微處理器,因具有強(qiáng)大的數(shù)字信號處理能力而在各種測控終端中獲得廣泛應(yīng)用,主要應(yīng)用是實(shí)時(shí)快速地實(shí)現(xiàn)各種數(shù)字信號處理算法[1]。在DSP的開發(fā)設(shè)計(jì)過程中,一般采用JTAG口完成軟件調(diào)試及應(yīng)用程序的加載固化。
隨著電子技術(shù)的發(fā)展和用戶需求的提升,對已投入使用的DSP設(shè)備的升級越來越頻繁,傳統(tǒng)的升級方法是取下設(shè)備通過JTAG仿真器在線更新程序[2]。該方式簡單方便,但當(dāng)DSP安裝于密封、遠(yuǎn)程及高空等難以拆卸的設(shè)備中時(shí),就十分不便,因此開發(fā)高效便捷的遠(yuǎn)程升級技術(shù)迫在眉睫。
較早的遠(yuǎn)程加載方法一般不采用任何協(xié)議,通過Bootloader直接進(jìn)行串口數(shù)據(jù)的接收及存儲,此類方法雖然簡單直接,但是一旦傳輸過程中出現(xiàn)誤碼,需要將全部數(shù)據(jù)重新傳輸一次,效率較低?;诟咝覝?zhǔn)確的遠(yuǎn)程加載需求,提出一種基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法,用最小的內(nèi)存空間實(shí)現(xiàn)DSP應(yīng)用程序的遠(yuǎn)程加載更新,并成功進(jìn)行了工程驗(yàn)證。
1 YModem協(xié)議
XModem及YModem是應(yīng)用十分廣泛的異步文件傳輸協(xié)議。其中,XModem協(xié)議結(jié)構(gòu)簡單,但每包數(shù)據(jù)幀最長僅能傳輸128 Byte數(shù)據(jù),效率較低;YModem是由Xmodem改進(jìn)的一種穩(wěn)定快速的傳輸協(xié)議,單包傳輸數(shù)據(jù)長度提升至1 024 Byte,傳輸效率更高且可以實(shí)現(xiàn)批量傳輸,因而應(yīng)用更為廣泛。
YModem是一種半雙工協(xié)議,不能同時(shí)雙向收發(fā)控制信號,有助于控制流量、減少緩沖區(qū)超限問題。YModem是一種握手協(xié)議,發(fā)送之后需等待回應(yīng):發(fā)送方每發(fā)送一幀數(shù)據(jù),都要等待接收方的確認(rèn)應(yīng)答,收到應(yīng)答后再發(fā)送新的一幀數(shù)據(jù)。如果接收方由于某種原因未能正確接收到此幀數(shù)據(jù),會向發(fā)送方發(fā)送重新傳輸數(shù)據(jù)幀的申請,則發(fā)送方會重新發(fā)送此幀數(shù)據(jù),直到接收方正確接收。這種機(jī)制與CRC校驗(yàn)共同保證了數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。同時(shí),分包傳輸、分包校驗(yàn)的傳輸機(jī)制,可以及時(shí)發(fā)現(xiàn)誤碼,及時(shí)重新傳輸出錯(cuò)數(shù)據(jù)包,提高數(shù)據(jù)傳輸效率。
依據(jù)YModem協(xié)議,每一幀的發(fā)送數(shù)據(jù)由幀頭、數(shù)據(jù)段以及幀尾組成,具體格式如表1所示,其中數(shù)據(jù)段長度可以是128 Byte(幀頭為SOH),也可以是1 024 Byte(幀頭為STX),采用1 024 Byte數(shù)據(jù)一幀的傳輸方式,可以大大提高傳輸速度[3-4]。
YModem協(xié)議傳輸?shù)耐暾帐至鞒倘鐖D1所示。
YModem通信協(xié)議握手流程如下:
①接收方發(fā)送字符C通知發(fā)送方,啟動(dòng)握手流程,進(jìn)入等待SOH狀態(tài),如果沒有回應(yīng),則重新開啟或超時(shí)退出;
②發(fā)送方開始時(shí)處于等待過程中,等待接收方的啟動(dòng)信號C,收到接收方發(fā)送的字符C后,發(fā)送方發(fā)送幀頭為SOH的文件信息包,包含序號以及文件名、文件大小等信息,然后進(jìn)入等待字符ACK狀態(tài);
③接收方收到文件信息包,進(jìn)行CRC校驗(yàn),如校驗(yàn)成功,則發(fā)送ACK確認(rèn),發(fā)送方收到ACK后,進(jìn)入等待文件傳輸開啟信號,即等待字符C狀態(tài);如果CRC校驗(yàn)失敗,則發(fā)送NAK字符,請求發(fā)送方重新發(fā)送此數(shù)據(jù)包;
④接收方發(fā)送字符C,通知發(fā)送方啟動(dòng)文件發(fā)送,進(jìn)入等待SOH或STX狀態(tài);
⑤發(fā)送方接收到字符C后,進(jìn)入正式文件發(fā)送流程,發(fā)送數(shù)據(jù)包,等待接收方回復(fù)ACK后繼續(xù)發(fā)送下一包;
⑥文件發(fā)送完畢后,發(fā)送方發(fā)出EOT結(jié)束信號,接收方回復(fù)ACK后,發(fā)送方發(fā)送以全0填充、序號為0的SOH數(shù)據(jù)包,接收方回復(fù)ACK,至此握手過程結(jié)束。
如上文所述,利用YModem協(xié)議完善的握手機(jī)制和出錯(cuò)管理機(jī)制,引導(dǎo)程序可以準(zhǔn)確無誤又快速地接收到包含應(yīng)用程序的數(shù)據(jù)包。
2遠(yuǎn)程加載基本原理
DSP遠(yuǎn)程加載的實(shí)現(xiàn)共涉及三部分程序:引導(dǎo)程序(Bootloader)、應(yīng)用程序以及上位機(jī)程序。其中,Bootloader和上位機(jī)程序是固定不變的,是遠(yuǎn)程升級系統(tǒng)的主要組成部分,應(yīng)用程序是DSP開發(fā)者編寫的用以完成指定功能的代碼,會隨應(yīng)用需求的變化而變化。
2.1 Bootloader
Bootloader是提前固化在DSP指定空間、在DSP內(nèi)核啟動(dòng)前運(yùn)行的一段程序,對應(yīng)用程序編程用戶保護(hù)、不可被修改,主要作用有:
①初始化硬件設(shè)備及內(nèi)存分配;
②與上位機(jī)進(jìn)行數(shù)據(jù)交互,接收上位機(jī)發(fā)送的待升級程序固件與程序存儲地址等信息,并將固件燒錄至Flash指定地址;
③完成程序升級后,跳轉(zhuǎn)至應(yīng)用程序。
Bootloader的功能相對簡單且固定,因而具有很好的通用性,易于移植。遠(yuǎn)程升級的實(shí)質(zhì)就是通過Bootloader來固化應(yīng)用程序,不用改變DSP芯片的啟動(dòng)方式,直接采用默認(rèn)的片上Flash啟動(dòng)方式即可。
2.2上位機(jī)程序
上位機(jī)程序的主要作用是對應(yīng)用程序編譯生成的文件進(jìn)行格式轉(zhuǎn)換、信息提取以及打包發(fā)送等功能[5-8]。
由DSP開發(fā)工具編譯生成的可執(zhí)行文件地址不連續(xù),且對象文件格式無法直接用于Flash燒寫,因而需要通過上位機(jī)程序?qū)?yīng)用程序編譯生成的.out文件轉(zhuǎn)換成.hex文件,再將轉(zhuǎn)換后的.hex文件打包發(fā)送給Bootloader。
2.3遠(yuǎn)程加載實(shí)現(xiàn)
遠(yuǎn)程加載的工作流程如圖2所示。
①上位機(jī)程序?qū)?out文件進(jìn)行格式轉(zhuǎn)換和信息提??;
②Bootloader及上位機(jī)程序通過特定協(xié)議進(jìn)行可燒錄的應(yīng)用程序的數(shù)據(jù)傳輸;
③Bootloader將應(yīng)用程序數(shù)據(jù)燒寫至Flash的指定區(qū)域,并跳轉(zhuǎn)至應(yīng)用程序入口,啟動(dòng)DSP。
3基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)
3.1實(shí)現(xiàn)方法
提出一種基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法,和普通遠(yuǎn)程加載方法相比,本文方法主要有以下改進(jìn):
(1)數(shù)據(jù)傳輸協(xié)議的更新
使用YModem協(xié)議進(jìn)行Bootloader與上位機(jī)軟件之間的數(shù)據(jù)傳輸,握手機(jī)制以及分包傳輸和分包校驗(yàn)的操作流程,提高了數(shù)據(jù)傳輸?shù)男始皽?zhǔn)確率。
(2)Bootloader的優(yōu)化
由于Bootloader與應(yīng)用程序共同占用DSP內(nèi)存空間,而DSP內(nèi)存空間畢竟有限,因此Bootloader要設(shè)計(jì)的盡量小。
在Bootloader與上位機(jī)之間的數(shù)據(jù)交互過程中,如果將所有數(shù)據(jù)幀內(nèi)的有效數(shù)據(jù)都存入寄存器中,待數(shù)據(jù)傳輸完成之后再一起進(jìn)行Flash燒寫,那么勢必需要在Bootloader中開辟一個(gè)很大的存儲空間。本著節(jié)省內(nèi)存空間的原則本例只開辟收、寫2個(gè)獨(dú)立的1 KB寄存器空間,一個(gè)寄存器用來存放當(dāng)前收到的一幀1 KB數(shù)據(jù)內(nèi)容;另一個(gè)寄存器存放待寫入Flash的數(shù)據(jù)。當(dāng)收寄存器收到數(shù)據(jù)并校驗(yàn)無誤后,將其寫入寫寄存器,同時(shí)清空收寄存器,用以繼續(xù)接收上位機(jī)軟件發(fā)送的數(shù)據(jù);寫寄存器判斷有數(shù)據(jù)寫入后,開始向Flash寫入,具體實(shí)現(xiàn)流程如圖3所示。通過分析,以燒錄一個(gè)大小為1 MB的應(yīng)用程序?yàn)槔藰O簡加載方法可以節(jié)約DSP中原本為存儲數(shù)據(jù)而開辟的950 300 Byte的RAM內(nèi)存空間。
3.2實(shí)現(xiàn)過程
經(jīng)過以上改進(jìn),提出的基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法可以在占用最少內(nèi)存資源的前提下,實(shí)現(xiàn)較傳統(tǒng)遠(yuǎn)程加載方法更高效更準(zhǔn)確的傳輸。
SecureCRT是較為常用的上位機(jī)軟件,可實(shí)現(xiàn)XModem、YModem以及ZModem協(xié)議的數(shù)據(jù)傳輸,本例使用SecureCRT作為上位機(jī)軟件,以TI公司的OMPL138為硬件平臺,對提出的基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法進(jìn)行工程驗(yàn)證。
利用上位機(jī)軟件SecureCRT向Bootloader發(fā)送.hex文件,Bootloader依據(jù)YModem協(xié)議校驗(yàn)解析數(shù)據(jù)幀并存入寄存器,再將寄存器中的.hex文件燒錄至Flash中,即完成遠(yuǎn)程加載。數(shù)據(jù)傳輸完成后SecureCRT應(yīng)用界面如圖4所示,數(shù)據(jù)傳輸完成100%且0 Errors,表示數(shù)據(jù)傳輸全部完成且未出現(xiàn)傳輸錯(cuò)誤,對以O(shè)MAPL138為核心的終端設(shè)備斷電重啟,軟件顯示已更新至新版本。至此,提出的基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法已在硬件平臺上完成驗(yàn)證。
4結(jié)束語
提出了一種基于YModem協(xié)議的極簡遠(yuǎn)程加載實(shí)現(xiàn)方法,經(jīng)工程驗(yàn)證,此方法可以用最小的內(nèi)存代價(jià)快速穩(wěn)定地實(shí)現(xiàn)DSP應(yīng)用程序的遠(yuǎn)程加載。不僅如此,由于YModem協(xié)議規(guī)定發(fā)送方需要向接收方發(fā)送數(shù)據(jù)的文件名和大小,這就使得采用YModem協(xié)議進(jìn)行的遠(yuǎn)程加載還可以根據(jù)實(shí)際應(yīng)用需求對本文提出的方法進(jìn)行改進(jìn),如實(shí)現(xiàn)Flash分區(qū)存儲不同的應(yīng)用程序,用戶可以根據(jù)需求選擇不同的應(yīng)用程序運(yùn)行。
參考文獻(xiàn)
[1]劉瑞.DSP系統(tǒng)的CAN總線遠(yuǎn)程升級方法[J].微型機(jī)與應(yīng)用,2016,35(13):71-72,75.
[2]李無言.一步步寫嵌入式操作系統(tǒng)[M].北京:電子工業(yè)出版社,2011.
[3]吳兆芝.ARM平臺多進(jìn)程微內(nèi)核嵌入式操作系統(tǒng)Ymodem下載功能設(shè)計(jì)與實(shí)現(xiàn)[J].南京曉莊學(xué)院學(xué)報(bào),2013,29(3): 79-83,89.
[4]戈潤棟,馬旭東.CAN總線分布式系統(tǒng)程序的以太網(wǎng)在線更新[J].工業(yè)控制計(jì)算機(jī),2013,26(11):19-20,24.
[5]雷衛(wèi)延,敖振浪,周欽強(qiáng).基于STM32的在線應(yīng)用編程(IAP)開發(fā)[J].電子測量技術(shù),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的嵌入式系統(tǒng)遠(yuǎn)程監(jiān)控和升級[J].電子技術(shù)應(yīng)用,2010,36(5):159-162.
[8]吳佳敏.嵌入式遠(yuǎn)程工業(yè)監(jiān)控系統(tǒng)的終端設(shè)備軟件設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2010.