基於USB的SpaceWire網絡即插即用基礎協議的製作方法
2023-10-22 04:11:37 2
本發明屬於數據傳輸
技術領域:
,涉及一種基於usb的spacewire網絡即插即用基礎協議,使得pc可以通過本發明的基礎協議控制主控設備和spacewire網絡,並和spacewire網絡中的設備通訊。
背景技術:
:spacewire是由esa(歐洲空間局)提出的一種在航天航空工程中應用的星載傳輸總線,它的特點包括高速、低功耗、低延遲、全雙工、點對點串行連接等方面,而且因為蟲洞交換機制間接節省了成本,非常適合在太空環境中使用。即插即用是計算機術語,廣義上是指設備在硬體連接後不需要用戶幹涉,就可以在很短時間內自動配置好,供用戶使用。而usb是一種應用極為廣泛的即插即用底層傳輸協議。技術實現要素:為解決spacewire網絡和pc之間的通訊需求,並實現即插即用功能,本發明將spacewire和usb結合起來使得pc可以通過一個主控設備控制spacewire網絡,並且和網絡中的節點通訊,使pc和主控設備通訊配置自動化。本發明提供的基於usb的spacewire網絡即插即用基礎協議包括主控設備和pc、spacewire網絡。其中主控設備由fpga、spacewire網絡接口和usb晶片組成。usb是應用最廣泛的即插即用協議。該協議保證了數據層的快速可靠傳輸,並提供了幾種可以同時工作的傳輸模式。本發明使用usb的中斷傳輸和批量傳輸在pc和fpga之間交換指令和數據。本發明與現有技術相比有如下優點:本發明採用usb作為底層,保證可靠、快速以及擴展性。同時usb是所有pc和大部分中高端晶片都會兼容的協議,因此可以應用於許多設備。本發明針對具體的應用場景細分了指令和數據,並且由於它們使用不同的底層usb傳輸管道,指令和數據不會互相干擾,同時保證指令的優先性。附圖說明圖1為本發明的基於usb的spacewire網絡即插即用基礎協議的拓撲結構示意圖。具體實施方式下面就結合附圖對本發明進行詳細說明。本發明提供一種基於usb的spacewire網絡即插即用基礎協議,所述的基礎協議涉及到的組件包括spacewire網絡、主控設備和pc,如圖1所示。主控設備是核心部分,同時與pc和spacewire網絡通訊。主控設備由以下幾個模塊組成:fpga、usb晶片、spacewire網絡接口。fpga程序代碼存儲在eeprom中,每次重新上電可直接進入協議狀態機而無需重新下載。fpga和usb晶片採用一樣的時鐘,spacewire網絡接口則採用更高速的時鐘。usb晶片的程序代碼存在另一塊eeprom中,上電後處於slavefifo模式。fpga通過data線、read和write信號、addr選址線等和usb晶片通訊,進而通過幾個usb管道和pc通訊。pc上使用usb晶片提供的基礎驅動作為底層,封裝一層數據api之後實現協議,並向上層應用軟體提供協議api。基於usb的spacewire網絡即插即用基礎協議中的通用數據單元如表1所示。各欄位的作用:protocolversion為協議版本號,固定在一個字節,用來標識當前協議版本,使協議可以升級和兼容;opcode為數據包的操作碼分類標識,固定一個字節;packetid為標識包的序列號或者響應包的序列號;length為長度信息,標識後續payload部分的字節數;payload為需要傳送的內容,可以嵌套更上層的協議。表1通用數據單元格式在通用數據單元中payload欄位下嵌套的指令數據單元如表2所示。各欄位的作用:commandcode為長度一個字節的指令代碼,用以區分指令類型;extra為長度不定的指令附加信息。表2指令數據單元格式commandcodeextra1byte?bytes在本發明的基礎協議中,包含如下指令類型:1)查詢請求指令:發起一次新的查詢會話,參與者為pc和主控設備。實現pc讀取主控設備狀態信息的功能。查詢會話是由pc發起,正常情況下由一次基本通訊構成的會話。pc向主控設備發送一個查詢請求包。主控設備收到後處理該查詢請求包,之後立即向pc返回一個響應包代表處理結果,如果需要還應該在響應包的extra欄位中附帶此次查詢會話中需要返回給pc的狀態信息數據。2)io請求指令:發起一次新的spacewire數據傳輸io會話,參與者為pc、主控設備和spacewire網絡。實現pc通過主控設備向spacewire網絡發送數據、pc通過主控設備從spacewire網絡接收數據的功能。通用數據單元payload為io請求時,指令數據單元中extra欄位下嵌套的io數據單元格式如表3所示。各欄位的作用:action:只有在type為stream時有效,標誌stream型io傳輸開始或結束;type:message標誌固定數據長度的io會話,message會話中數據頭部帶有2bytes的數據長度信息,指定本次message型io會話中有效數據載荷的長度。stream標誌不固定長度數據流的io會話,會話發起後進行持續的數據傳輸,在最後通過一個action為stop的io請求指令結束本次會話。direction:output為從pc向主控設備或者spacewire網絡的發送標識,input為pc從主控設備或者spacewire網絡的讀取標識。表3io數據單元格式actiontypedirection1startmessageoutput0stopstreaminputio會話可以由pc或者主控設備發起,當pc通過主控設備向spacewire網絡發送數據時,pc為發起者,主控設備為響應者,pc通過io會話將需要發送的數據傳至主控設備,主控設備再將此次會話攜帶的有效數據載荷轉發到spacewire網絡中去;當pc通過主控設備從spacewire網絡接收數據時,主控設備為發起者,pc為響應者,主控設備將從spacewire網絡中收到的數據通過io會話傳至pc,pc再將這些數據交給應用程式做進一步處理。io會話分為兩種類型:message類型的會話:pc或者主控設備中的發起者向響應者發送一個iorequest包,其中io數據單元中的type位應為message。響應者收到這個io請求包後會確認當前的緩衝區狀態、spacewire的fifo狀態、spacewire的鏈路狀態等信息,如果準備好接收數據,就返回一個responsestatus表示「成功」的response包。如果無法接收數據,就返回攜帶相應錯誤碼的response包。發起者收到response包後,如果responsestatus代表「成功」,應立即發送一個準備好的data包,否則應等待一定時間或者立即重發一個新的iorequest(packetid不同)。響應者收到data包之後,進行相應的動作(如主控設備向spacewire網絡轉發)後,再次返回一個表示「成功」的response。本次會話即告結束。stream類型的會話:pc或者主控設備中的發起者向響應者發送一個iorequest包,其中io數據單元中的type位應為stream,action位應為start。響應者收到io請求後,作出與message類型會話中類似的狀態確認與response包回復動作。接著,發起者發送一個data包的頭部,其中length欄位表示的是每一次最多傳送的字節數,然後開始循環發送數據,每次發送的數據不應多於length。響應者讀取完data包頭部後即開始讀取數據,每當讀空緩衝區或者讀夠length個字節的數據時,應檢查在中斷傳輸中是否有stop請求。發起者將數據全部發送完之後,向響應者發送一個iorequest,其type為stream,action為stop。響應者收到stop請求後,向發起者發送一個針對stop請求的response,表示已成功停止;當響應者對讀取到的數據執行完相應的步驟後(如pc將數據轉交給應用程式處理),向發起者發送一個針對data包的response。本次會話即告結束。當前第1頁12