基于USB2.0協(xié)議的通用測控通信接口設計
隨著(zhù)我國航空航天技術(shù)的迅速發(fā)展,對地面遙控遙測接收機的實(shí)時(shí)性和高速數據傳輸性能的要求越來(lái)越高。越來(lái)越多的遙測遙控地面信道處理器都采用了實(shí)時(shí)能力更強的高速DSP/FPGA架構設計方案?;贒SP/FPGA架構的設計方案表現出強大的處理能力和高度的靈活性。但是,在研發(fā)中發(fā)現對FPGA以及DSP/FPGA之間的接口調試很費時(shí)間和精力。究其原因是FPGA在線(xiàn)調試功能的支持很局限,所以本文設計一種通用的適于DSP/FPGA架構的遙測接收機的調試和測控通信接口,從而方便在研發(fā)中進(jìn)行調試和可靠的傳輸測控中所需的實(shí)時(shí)參數?,F有文獻的通常做法是使用網(wǎng)絡(luò )接口來(lái)完成數據和控制指令的傳輸,但是在建立連接之后,數據傳輸中,一旦出現掉電或重啟就會(huì )丟失數據,甚至會(huì )出現程序跑飛現象。通用串行總線(xiàn)(USB)因具有傳輸速度快、支持熱插拔、易于擴展以及即插即用等優(yōu)點(diǎn),已經(jīng)成為計算機與外部設備進(jìn)行數據交換的常用接口。USB控制器是一種集成了USB總線(xiàn)協(xié)議的微控制器,利用USB控制器,用戶(hù)可以在不深入了解USB協(xié)議的情況下設計完整的USB接口,這也促進(jìn)了USB接口的廣泛應用。
本文引用地址:http://dyxdggzs.com/article/201610/306191.htm為了滿(mǎn)足更高的測控及數據傳輸速率的要求,提出并設計一種基于CY7C68013A的通用測控通信接口。該系統穩定可靠、普適性好,并且可傳輸高質(zhì)量的圖像數據,具有很好的應用前景。
1 系統總體設計
該系統總體結構圖如圖1所示,系統大致可分為3個(gè)部分。其中FPGA主要完成通信接收機的信號捕獲跟蹤、載波恢復、定時(shí)同步、圖像數據下傳、測控指令上傳以及USB芯片端點(diǎn)FIFO的讀寫(xiě)控制。PC端的控制終端主要完成圖像數據的接收和處理、測控指令的生成、GUI交互界面的更新、重要參數的記錄和備份。Cypress FX2LP芯片主要完成數據的雙向傳遞以及與PC間的“問(wèn)答”邏輯的實(shí)現。Cypress FX2LP芯片一方面要配置端點(diǎn)相關(guān)寄存器和讀寫(xiě)緩存中的數據,另一方面通過(guò)端點(diǎn)0“回答”PC終端程序關(guān)于內部緩存中數據狀態(tài)情況的查詢(xún),而且在數據不滿(mǎn)足傳輸指定格式的時(shí)候,還要將數據包修改成符合傳輸設定的格式的數據包。

FPGA采用Xilinx公司的Spartan-6系列芯片,考慮到遙測指令和圖像數據的優(yōu)先級別,采用中斷模式控制器對USB的端點(diǎn)FIFO進(jìn)行讀寫(xiě)控制。當沒(méi)有遙測指令需要上傳的時(shí)候,FPGA中的FIFO讀寫(xiě)控制器不斷的將圖像數據寫(xiě)入到USB的端點(diǎn)FIFO中;當FIFO讀寫(xiě)控制器檢測到USB端有遙測指令需要上傳的時(shí)候,即暫緩圖像數據的寫(xiě)入,將圖像數據緩存在內部RAM中,釋放讀寫(xiě)總線(xiàn),然后開(kāi)啟讀取FIFO的控制進(jìn)程將遙測指令讀入到FPGA的暫存FIFO中。
2 系統硬件設計
2.1 CY7C68013A芯片簡(jiǎn)介
CY7C68013A為Cypress公司的一款高性能的USB2.0微控制器,其內部集成了USB2.0收發(fā)器、增強型的8051核、智能串行接口引擎(SIE)、4個(gè)片上FIFO和16KBRAM、通用可編程接口(GPIF)。該芯片支持全速(12 Mbps)和高速(480Mbps)兩種速率的數據傳輸。其內嵌的增強的8051處理器支持兩個(gè)USART、3個(gè)定時(shí)器/計數器、擴展的中斷系統以及I2C協(xié)議總線(xiàn)外設。CY7C68013A支持3種接口模式和外部器件進(jìn)行通信,分別是:Ports模式,GPIF Master模式和Slave FIFO模式。
2.2 FPGA接口模塊設計
在本系統中的CY7C68013A采用異步SlaveFIFO的工作模式。圖2給出了CY7C68013A和Spartan-6的硬件連接圖。其中,USB_FLAGA(B/C)為CY7C68013A輸出的狀態(tài)標志信號,在USB固件中可以靈活的將它們配置為端點(diǎn)FIFO的狀態(tài)滿(mǎn)、空或者任意可編程的標志位;USB_SLOE、USB_ SLRD、USB_WR組合完成對CY7C68013A端點(diǎn)FIFO的讀寫(xiě)時(shí)序控制;USB_FD為雙向的數據總線(xiàn);USB_PKEND為數據打包控制信號。

FPGA接口模塊設計主要包含上行緩存、下傳緩存、雙向FIFO邏輯控制邏輯設計。其中雙向的FIFO邏輯控制完成對CY7C68013A的端點(diǎn)FIFO進(jìn)行數據的讀寫(xiě)操作,并且完成從下傳緩存中讀取數據以及把上傳的數據寫(xiě)入到上傳緩存的時(shí)序控制。本設計中采用兩個(gè)并行的狀態(tài)機來(lái)控制,兩個(gè)狀態(tài)機分別實(shí)現從USB端點(diǎn)FIFO讀取數據并寫(xiě)入到上行緩存,從下行緩存中讀取數據并將數據寫(xiě)入到相應的端點(diǎn)FIFO中??紤]到下行圖像數據和上行遙測控制指令的優(yōu)先級,將兩個(gè)狀態(tài)機之間的信息交互設計成在中斷模式下運行,以此來(lái)解決對數據總線(xiàn)的共享問(wèn)題。
讀取USB端點(diǎn)FIFO控制狀態(tài)機如圖3所示。圖中小圓圈標注的狀態(tài)轉換條件的意義為:a表示USB端點(diǎn)FIFO中沒(méi)有需要讀取的數據或者上行緩存阻塞;b表示沒(méi)有檢測到讀取請求ACK的有效信號;c表示檢測到USB端點(diǎn)FIFO中無(wú)待讀取數據;d表示在狀態(tài)S4的情況下,檢測到USB端點(diǎn)FIFO中無(wú)待讀數據的次數超過(guò)預先設定的閾值VT。該控制狀態(tài)機共包含了8個(gè)狀態(tài)。其中,Idle為初始狀態(tài);S2狀態(tài)完成是否接收到讀取請求ACK信號,如果收到則轉入S3進(jìn)入讀取數據的流程,反之,則停留在該狀態(tài)等待回應;S3狀態(tài)為讀取數據準備地址信號,并輸出地址信號;S4狀態(tài)再次確定是否有數據需要讀取;S5完成從USB端點(diǎn)FIFO中讀取數據到內部寄存器中;S6完成將內部寄存器的數據寫(xiě)入到上行緩存中;S7完成判斷是否需要(能)繼續讀取數據,若需要(能)繼續讀取,轉入狀態(tài)S5,反之,回到Idie狀態(tài)等待下次讀取的啟動(dòng)。

寫(xiě)端點(diǎn)FIFO控制狀態(tài)機如圖4所示。圖中小圓圈標注的狀態(tài)轉換條件的意義為:a表示讀取USB端點(diǎn)FIFO的標志有效,說(shuō)明數據總線(xiàn)被占用;b表示檢測到USB端點(diǎn)接收數據FIFO中的數據已填滿(mǎn)。該狀態(tài)機中共包含了8個(gè)狀態(tài),其中Idle為初始狀態(tài),判斷是否有讀取數據請求信號,若有轉入對讀取請求中斷處理狀態(tài)S1,反之,轉入狀態(tài)S3開(kāi)始數據的寫(xiě)入進(jìn)程;S2狀態(tài)等待讀取數據結束,釋放數據總線(xiàn),轉入狀態(tài)S3;S4從下行緩存中讀取數據,存入到內部寄存器中;S6將內部寄存器中的數據寫(xiě)入到USB端點(diǎn)FIFO中;S7判斷是否需要(并且數據總線(xiàn)空閑、端點(diǎn)FIFO中未滿(mǎn))繼續讀取數據,若需要(能)繼續讀取,轉入狀態(tài)S4,反之,將打包信號USB_PKTEND置為有效并且回到Idle狀態(tài)啟動(dòng)下一次寫(xiě)狀態(tài)機的運行。

航空航天測控設備因為其特殊的應用環(huán)境,常常遭受強磁場(chǎng)、空間強粒子流或者單粒子翻轉效應等特殊干擾的影響。所以在上面的狀態(tài)機的設計中,對重要的觸發(fā)信號和標志位信號進(jìn)行了多次間隔性冗余保護確認。如在讀取控制狀態(tài)機中,在S4狀態(tài)下再次對USB端點(diǎn)FIFO中是否有需要讀取的數據進(jìn)行判斷,是為了防止因為PCB電氣特性不穩定或者偶然的空間電磁干擾導致之前啟動(dòng)讀取數據的進(jìn)程為誤判,而在此再次確定該信號的有效性,這樣設計增強了系統的容錯性和抗干擾能力。類(lèi)似的容錯思想在寫(xiě)端點(diǎn)FIFO控制狀態(tài)機的S1狀態(tài)也可以體現出來(lái)。
2.3 USB驅動(dòng)程序
Cypress FX2開(kāi)發(fā)包中提供了通用的驅動(dòng)程序,通用驅動(dòng)程序完成與外設和用戶(hù)應用程序的通信和控制,微處理器根據新的設置安裝通用驅動(dòng)程序,重新枚舉外設為一個(gè)新的USB設備。
3 系統軟件設計
3.1 固件程序設計
CY7C68013A芯片的固件程序運行在芯片內部,主要完成對芯片工作模式的配置以及處理主機的USB設備請求。Cypress提供了固件程序的開(kāi)發(fā)框架,開(kāi)發(fā)人員只需要按應用背景和需求對所給框架內的程序做細化和修改即可。USB傳輸可分成數據傳輸和控制傳輸,其中數據傳輸由大端點(diǎn)(EP2/4/6/8)完成,控制傳輸由小端點(diǎn)(EPO)完成。在固件程序中,TD_Poll()為數據處理程序,處在主函數的While()循環(huán)中。該函數包含實(shí)現特殊任務(wù)的代碼,設備運行時(shí)將被重復調用。
在本系統中,我們將EP2配置為Bulk傳輸模式的OUT端點(diǎn),其端點(diǎn)緩存為512Byte,兩級緩存;EP6配置為Bulk傳輸模式的IN端點(diǎn),其端點(diǎn)緩存為512Byte,四級緩存。并且把EP6FIFO配置為AUTIN模式,其AUTOINLEN配置為512Byte。固件程序還必須完成對PC控制終端發(fā)送來(lái)的USB控制傳輸請求的響應。端點(diǎn)0是CY7C68013A中唯一的控制端點(diǎn),它是一個(gè)可完成雙向控制傳輸的端點(diǎn),只有它才能處理SETUP指令。完成主機USB控制傳輸請求的固件程序段,只需要在所給固件框架下的函數DR_VendorCmnd()中返回EP2468STAT寄存器的值即可實(shí)現。
3.2 控制上位機設計
該測控接口的上位機軟件設計采用MFC編程,MFC封裝了大部分的windows API函數,采用消息循環(huán)機制處理事件。在MFC框架生成的工程中,添加上Cypress提供的CyAPI庫文件,即可在工程中調用庫中已經(jīng)封裝好的類(lèi)的成員變量以及成員函數。在上位機的設計中采用了多線(xiàn)程編程,系統軟件設計的流程圖如圖5所示。

在上位機軟件設計中,主線(xiàn)程主要完成在消息循環(huán)機制下檢測面板上的點(diǎn)擊事件,以及對子線(xiàn)程做出的相應的控制。在主線(xiàn)程的初始化中,首先生成CCyUSBDevice對象,然后讀取硬件配置信息以及設備的必要識別信息并顯示在前操作面板上,最后建立RXfer子線(xiàn)程。在主線(xiàn)程中,當檢測到Send按鈕被點(diǎn)擊時(shí)。即開(kāi)始發(fā)送上行指令。此處采用同步數據傳輸,保證了數據傳輸的準確性。當主線(xiàn)程中檢測到Start按鈕被點(diǎn)擊時(shí),根據RXfer線(xiàn)程的不同狀態(tài),執行相應的操作。在RXfer子線(xiàn)程中,主要完成下行數據的接收、下行數據寫(xiě)入數據文檔以及管理隊列中的請求等工作。在下行數據接收線(xiàn)程中,我們采用了異步數據傳輸方式。在異步傳輸方式下,上位機軟件發(fā)出數據請求之后,不需要等待回應,即可立即發(fā)出下一次的數據請求,這樣可極大的提高上位機軟件的數據吞吐速率,保證數據傳輸的高效率。多次的異步數據請求是利用數據請求隊列來(lái)完成的,在線(xiàn)程函數的開(kāi)始,開(kāi)辟適當長(cháng)度的數據請求隊列,并且給他們分配相應的內存空間,然后進(jìn)入到線(xiàn)程的循環(huán)體中。在循環(huán)體中,完成當前的隊列元素中的請求數據傳輸并把相應數據寫(xiě)入數據文檔之后,立即將新的數據請求塞入到該隊列元素中,并且把指針更新到下一個(gè)隊列元素。當數據請求失敗、接受數據不成功或者循環(huán)接收數據標志位False時(shí),首先完成隊列中其他已經(jīng)成功請求數據傳輸的數據,然后關(guān)閉文件句柄,釋放相應的資源,最后終止線(xiàn)程。
4 系統測試結果
該通用測控通信接口用于實(shí)際測控數據的下傳,實(shí)際測試面板如圖6所示。在進(jìn)行測試時(shí),首先運行該測試應用軟件,完成初始化之后,在設備信息顯示框中顯示USB設備信息,其中包括設別的PID和VID、EndPoint配置情況、設備描述信息等信息。然后通過(guò)點(diǎn)擊“start”按鈕,建立起RXfer線(xiàn)程,開(kāi)始接收下行傳輸數據。若需發(fā)送指令,在Send按鈕左邊的輸入框中輸入適當的遙測遙控指令,然后點(diǎn)擊Send即可發(fā)送。測試系統中所接收到的數據如圖7所示。在此數據中采用了符合CCSDS航天測控標準數據格式,幀頭為EB90,接下來(lái)的三個(gè)Byte為幀計數(圖中顯示的是000007),幀結尾標志位13AB,幀結尾標志的前兩個(gè)Byte為RS譯碼報告輸出(譯碼前數據是否出錯,錯誤是否可糾)。

對該通用測控通信接口的速率和可靠性進(jìn)行了測試,測試結果如表1所示。對比表中數據看出,該接口的最高的可靠的傳輸速率可達為8.1MB/s,對2.3MB/s和8.1MB/s的速率進(jìn)行了可靠性測試,測試的結果都顯示,在該速率下所設計的測控通信接口可以完成數據的可靠傳輸。
5 結論
該測控通信接口系統采用USB2.0協(xié)議芯片CY7C68013A和FPGA搭建了硬件平臺,在FPGA狀態(tài)機設計中采用中斷模式的雙狀態(tài)機和關(guān)鍵標志冗余設計的思想,軟件設計采用多線(xiàn)程的設計思想,提高了通信接口的可靠性和傳輸速率。該測控通信接口已用于實(shí)際測控通信系統中,實(shí)際應用表明該測控通信接口具有速率高、穩定可靠、人機界面友好等特點(diǎn),達到系統設計要求,具有推廣應用的價(jià)值。
評論