張 峰,李海兵,2,羅 騁,2,丁 昊,2,李?;?,劉靜曉
(1.青島海洋科學(xué)與技術(shù)試點國家實驗室,山東青島 266237;2.北京航天控制儀器研究所,北京 100039)
簡單文本傳輸協(xié)議(trivial file transfer protocol,TFTP)是基于用戶數(shù)據(jù)報協(xié)議(user datagram protocol,UDP)實現(xiàn)的以太網(wǎng)通信協(xié)議,用于客戶端與服務(wù)器之間的文件傳輸,常用于傳送長度固定且較小的數(shù)據(jù)文件,是一個非常易用、緊湊的協(xié)議,TFTP客戶端能從服務(wù)器讀、寫文件或者將文件傳送給服務(wù)器。傳統(tǒng)的TFTP客戶端設(shè)計常采用“微控制單元(microcontroller unit,MCU)+軟件協(xié)議?!痹O(shè)計方案,基于軟件協(xié)議棧的以太網(wǎng)通信極大提高了軟件編碼的難度,同時也存在軟件開發(fā)流程復(fù)雜和數(shù)據(jù)傳輸不穩(wěn)定等問題[1]。
以太網(wǎng)芯片W5300集成了傳輸控制協(xié)議/網(wǎng)際協(xié)議(transmission control protocol/internet protocol,TCP/IP) 硬件協(xié)議棧,通過配置W5300內(nèi)部寄存器就可以實現(xiàn)以太網(wǎng)數(shù)據(jù)傳輸,具有傳輸穩(wěn)定、開發(fā)周期短等優(yōu)勢[2-3]。針對TFTP客戶端文件傳輸至服務(wù)器的過程,本設(shè)計采用“FPGA(field programmable gate array)+W5300”模式,既保證了文件傳輸?shù)姆€(wěn)定可靠,也顯著降低了軟件開發(fā)的周期和難度。
TFTP有3種傳輸模式:netASCII模式、octet模式和郵件模式。TFTP協(xié)議基于UDP協(xié)議實現(xiàn),也繼承了IP協(xié)議的數(shù)據(jù)包格式,完整的數(shù)據(jù)包可以劃分為IP首部、UDP首部和TFTP數(shù)據(jù)報文,其中IP首部和UDP首部的內(nèi)容遵循標準的TCP/IP協(xié)議規(guī)范。
TFTP數(shù)據(jù)報文的前2個字節(jié)為操作碼,操作碼取值范圍為0x1~0x5;后面的字節(jié),根據(jù)操作碼的不同劃分為5種類型,包括讀請求報文RRQ、寫請求報文WRQ、數(shù)據(jù)報文DATA、應(yīng)答報文ACK和差錯報文ERROR,如圖1所示。
圖1 TFTP報文
TFTP客戶端文件傳輸至服務(wù)器的過程中需要用到以下3種報文[4]。
(1)寫請求報文:當(dāng)有新文件需要傳輸至服務(wù)器時,TFTP客戶端需要向服務(wù)器的端口號69發(fā)送1條寫請求報文。寫請求報文中的“文件名”和“模式”字段固定設(shè)置為“para”和“octet”。服務(wù)器在正確接收到寫請求報文后,會開啟1個空閑端口號(例如55000),向客戶端發(fā)送1條應(yīng)答報文,表示連接已建立成功,客戶端可以繼續(xù)傳輸報文。
(2)數(shù)據(jù)報文:連接建立成功后,TFTP客戶端可以將待發(fā)送的文件拆分后若干條數(shù)據(jù)報文,然后逐條進行傳輸。在服務(wù)器正確接收到1條數(shù)據(jù)報文后,向客戶端發(fā)送1條應(yīng)答報文,表示該條數(shù)據(jù)報文已接收完成,客戶端可以繼續(xù)傳輸下1條數(shù)據(jù)報文??蛻舳嗣砍晒Πl(fā)送1條數(shù)據(jù)報文,“塊編號”值加1。每條數(shù)據(jù)報文中的“數(shù)據(jù)”字段最長由512個字節(jié)組成。當(dāng)長度不足512時,表示該條數(shù)據(jù)報文為文件的最后1條數(shù)據(jù)報文。如果有新的文件等待傳輸,客戶端需要重新發(fā)送一條寫請求報文,重新與服務(wù)器建立連接。
(3)應(yīng)答報文:在TFTP客戶端傳輸文件至服務(wù)器的過程中,應(yīng)答報文全部由服務(wù)器發(fā)送至客戶端,表示客戶端發(fā)送的報文已被服務(wù)器成功接收。針對寫請求報文,服務(wù)器發(fā)送的應(yīng)答報文的“塊編號”固定為0;針對數(shù)據(jù)報文,服務(wù)器發(fā)送的應(yīng)答報文的“塊編號”與接收到的最新一條數(shù)據(jù)報文的“塊編號”相同。
結(jié)合TFTP的報文類型,TFTP客戶端文件發(fā)送至服務(wù)器的傳輸流程設(shè)計如圖2所示。
圖2 文件傳輸流程
傳輸流程的主要步驟如下:
(1)發(fā)送寫請求報文至服務(wù)器,目標端口號69。
(2)等待服務(wù)器返回應(yīng)答報文,如果超時未接收到正確的應(yīng)答報文,延遲一段時間(例如2 s),跳轉(zhuǎn)步驟(1);如果接收到正確的應(yīng)答報文,記錄服務(wù)器的發(fā)送端口號,跳轉(zhuǎn)步驟(3)。
(3)從當(dāng)前待傳輸?shù)奈募?,選取最新一組待傳輸?shù)臄?shù)據(jù)(不超過512字節(jié)),組成一條數(shù)據(jù)報文發(fā)送至服務(wù)器,目標端口號即為步驟(2)中記錄的端口號。
(4)等待服務(wù)器返回應(yīng)答報文,如果超時未接收到正確的應(yīng)答報文,跳轉(zhuǎn)步驟(5);如果接收到正確的應(yīng)答報文,跳轉(zhuǎn)步驟(6)。
(5)統(tǒng)計當(dāng)前數(shù)據(jù)報文的累計重復(fù)發(fā)送次數(shù),若未超過10次,重新發(fā)送當(dāng)前數(shù)據(jù)報文至服務(wù)器,然后跳轉(zhuǎn)步驟(4);若超過10次,延遲一段時間(例如2 s),跳轉(zhuǎn)步驟(1)。
(6)判斷當(dāng)前待傳輸?shù)奈募欠褚褌鬏斖瓿?,若未完成,跳轉(zhuǎn)步驟(3),繼續(xù)傳輸文件的剩余數(shù)據(jù)。若已完成,查看是否存在新的文件需要傳輸,若存在,跳轉(zhuǎn)步驟(1);若不存在,結(jié)束整個文件傳輸工作。
在TFTP客戶端等待服務(wù)器返回應(yīng)答報文的處理中,F(xiàn)PGA編碼中引入了超時重傳的處理機制,進一步提高了流程運行的穩(wěn)定性。
W5300是一款集成了硬件TCP/IP協(xié)議的CMOS技術(shù)的單芯片[5],專用于互聯(lián)網(wǎng)嵌入式應(yīng)用,具有穩(wěn)定、高性能等優(yōu)勢。同時支持8個獨立的硬件SOCKET,每一個SOCKET有獨立的接收/發(fā)送FIFO,用戶通過端口控制和寄存器讀寫就可以實現(xiàn)以太網(wǎng)通信[6-7]。系統(tǒng)硬件組成如圖3所示。
圖3 系統(tǒng)硬件組成框圖
系統(tǒng)采用外部PHY(physical,端口物理層)芯片替代W5300內(nèi)置PHY,便于后期的網(wǎng)絡(luò)接口擴展。W5300受控管腳及其對應(yīng)的功能如表1所示。
表1 W5300受控管腳及功能說明
系統(tǒng)硬件組成的關(guān)鍵部分為FPGA和W5300,F(xiàn)PGA通過控制W5300管腳,實現(xiàn)對W5300的硬件復(fù)位、寄存器讀寫等操作,實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的收發(fā)通信[8-9]。
FPGA軟件架構(gòu)采用模塊化的編碼設(shè)計方法,如圖4所示。首先,硬件復(fù)位模塊完成對W5300的硬復(fù)位和端口配置;然后,通用寄存器配置模塊和套接口寄存器配置模塊分別完成對通用寄存器和套接口寄存器的初始化配置;最后,TFTP通信處理模塊、TFTP數(shù)據(jù)發(fā)送模塊和TFTP數(shù)據(jù)接收模塊之間相互配合,實現(xiàn)文件傳輸至服務(wù)器的過程。
圖4 FPGA軟件編碼架構(gòu)
TFTP通信處理模塊將待發(fā)送的文件拆分成數(shù)據(jù)報文,利用TFTP報文發(fā)送模塊實現(xiàn)報文的依次發(fā)送。TFTP通信處理模塊根據(jù)TFTP報文發(fā)送模塊反饋的發(fā)送完成標識,判斷報文是否發(fā)送成功;同時通過監(jiān)測TFTP報文接收模塊反饋的接收完成標識,判斷是否接收到正確的應(yīng)答報文。
基于層次化、模塊化的編碼設(shè)計理念,模塊之間通過各自的輸入輸出信號進行信息傳遞,降低了編碼的耦合度,提高了代碼的可維護性。
首先,F(xiàn)PGA需要對中斷寄存器IR、中斷屏蔽寄存器IMR、本機硬件地址寄存器SHAR、網(wǎng)關(guān)IP地址寄存器GAR、子網(wǎng)掩碼寄存器SUBR、本機IP地址寄存器SIPR、重傳超時寄存器RTR和重傳重新計數(shù)寄存器RCR依次進行初始化配置[10]。
然后,F(xiàn)PGA需要對SOCKET0套接口寄存器進行初始化配置,包括源端口寄存器S0_PORTR、模式寄存器S0_MR和通用寄存器S0_CR,使SOCKET0進入UDP模式。通過查詢狀態(tài)寄存器S0_SSR,可以判斷UDP模式是否已配置成功。
當(dāng)UDP模式配置成功后,就可以進行報文收發(fā)操作。報文發(fā)送過程中需要使用TX剩余空間寄存器S0_TX_FSR、目標IP地址寄存器S0_DIPR、目標端口寄存器S0_DPORTR、TX FIFO寄存器S0_TX_FIFOR、SOCKET通用寄存器S0_CR、TX寫入大小寄存器S0_TX_WRSR和SOCKET中斷寄存器S0_IR;報文接收過程中需要使用SOCKET通用寄存器S0_CR、RX FIFO寄存器S0_RX_FIFOR和RX接收大小寄存器S0_RX_RSR。
TFTP客戶端發(fā)送寫請求報文和數(shù)據(jù)報文的流程如圖5所示。
圖5 TFTP客戶端報文發(fā)送流程
當(dāng)有報文需要發(fā)送時,TFTP報文發(fā)送模塊讀取S0_TX_FSR寄存器獲取發(fā)送緩沖區(qū)的剩余空間。當(dāng)發(fā)送緩沖區(qū)剩余空間大于待發(fā)送的報文長度時,說明可以執(zhí)行發(fā)送操作;否則TFTP報文發(fā)送模塊需要重復(fù)讀取S0_TX_FSR寄存器,直至剩余空間滿足要求或者超時退出。
在執(zhí)行發(fā)送操作時,TFTP報文發(fā)送模塊需要先向S0_DIPR寄存器和S0_DPORTR寄存器寫入目標服務(wù)器的IP地址和端口號;然后向S0_TX_FIFOR寄存器和S0_TX_WRSR寄存器寫入待發(fā)送報文內(nèi)容和字節(jié)數(shù);最后向S0_CR寄存器寫入SEND命令,啟動報文發(fā)送。
TFTP報文發(fā)送模塊查詢S0_IR寄存器中的SENDOK標志位,當(dāng)SENDOK標志位為1,表示發(fā)送已完成,TFTP報文發(fā)送模塊生成報文發(fā)送完成標識;當(dāng)SENDOK保持為0或者查詢超時,表示發(fā)送未完成,TFTP報文發(fā)送模塊生成數(shù)報文發(fā)送失敗標識。TFTP通信處理模塊通過報文發(fā)送標識的狀態(tài),判讀報文是否發(fā)送成功。
在查詢S0_TX_FSR和S0_IR寄存器時,TFTP報文發(fā)送模塊引入查詢超時處理機制,進一步提升了流程運行的穩(wěn)定性和可靠性。
TFTP客戶端接收應(yīng)答報文的流程如圖6所示。
圖6 TFTP客戶端應(yīng)答報文接收流程
TFTP報文接收模塊查詢S0_RX_RSR寄存器獲取接收緩沖區(qū)的字節(jié)數(shù)。當(dāng)字節(jié)數(shù)大于0時,TFTP報文接收模塊查詢S0_RX_FIFIOR寄存器獲取接收數(shù)據(jù)的長度和內(nèi)容,并將數(shù)據(jù)內(nèi)容存入FPGA的內(nèi)部FIFO中。通過檢索FIFO存放的數(shù)據(jù),TFTP報文接收模塊判斷接收到的應(yīng)答報文是否正確,判斷依據(jù)是應(yīng)答報文的“塊編號”與最近一次發(fā)送的數(shù)據(jù)報文的“塊編號”是否相同。若相同,則生成接收有效脈沖,若不相同,則不生成接收有效脈沖。
TFTP通信處理模塊通過監(jiān)測接收有效脈沖是否存在判斷服務(wù)器返回的應(yīng)答報文是否正確。最后,TFTP報文接收模塊向S0_CR寄存器寫入RECV命令,完成本次數(shù)據(jù)接收。
系統(tǒng)關(guān)鍵模塊通過完成對W5300的寄存器配置,將以太網(wǎng)控制策略簡化為報文接收與發(fā)送的寄存器讀寫操作,降低了軟件設(shè)計的難度。
為測試本系統(tǒng)的實際工況,在計算機端搭建TFTP服務(wù)器模擬上位機軟件。利用本系統(tǒng)將文件通過TFTP協(xié)議上傳至傳輸至服務(wù)器。計算機通過上位機軟件統(tǒng)計分析接收到的文件,如圖7所示。同時使用Wireshark軟件抓取分析網(wǎng)口的實時數(shù)據(jù)包,如圖8所示。
圖7 上位機軟件
圖8 Wireshark網(wǎng)絡(luò)數(shù)據(jù)包
文件傳輸過程累計運行超過24 h,傳輸過程穩(wěn)定,計算機端收到的文件大小和格式與實際相符,未出現(xiàn)數(shù)據(jù)丟失或亂碼的現(xiàn)象。Wireshark軟件抓取的網(wǎng)口實時數(shù)據(jù)包也顯示TFTP通信過程持續(xù)穩(wěn)定正常。
基于W5300的TFTP客戶端文件傳輸系統(tǒng),在硬件設(shè)計上加入外部PHY,增強了系統(tǒng)的擴展性。軟件設(shè)計采用模塊化方式,實現(xiàn)了“高內(nèi)聚、低耦合”的FPGA編碼。簡化后的寄存器控制操作極大降低了以太網(wǎng)通信編碼設(shè)計的難度。同時,通過引入多維的超時重傳和超時處理等工作機制進一步優(yōu)化了系統(tǒng)流程,實現(xiàn)了穩(wěn)定性好、可靠性高的文件傳輸。目前,本文設(shè)計的TFTP客戶端文件傳輸系統(tǒng)已在空間站的某型號航天技術(shù)試驗項目中得到了實際應(yīng)用,實現(xiàn)了持續(xù)穩(wěn)定的文件傳輸。