1. 程式人生 > >usb設計中的管道pipe描述

usb設計中的管道pipe描述

usb設計中的管道pipe描述 
在USB設計中,常有描述管道的說明,對應的圖示為: 
圖片來源,USB_20標準:usb pipe

在實際設計中:pipe為一個int數 
定義如下: 
以32位系統為例,int為32 bit.

bit:31-30:為管道傳輸的流型別

  • 00: isochronous flow
  • 01: interrupt flow
  • 02: control flow
  • 03: bulk flow

bit:29-20:暫未使用,為0

bit:19-16: endpoint 地址

注,endpoint共4位, 
bit3-0:endpoint編號

bit15:暫未使用,為0

bit:14-8:usb device number

bit7表示傳輸方向

為0,表示從host到device; 
為1:表示從device到host

bit:6-0:暫未使用,為0

管道傳輸的資料內容有兩種

steam型別,資料型別沒有定義 
message型別,資料型別有被定義

 

---------------------------------------------------------------------------------------------------------------------

管道的概念:

管道是一種最基本的IPC機制,作用於有血緣關係的程序之間,完成資料傳遞。呼叫pipe系統函式即可建立一個管道。有如下特質:

1. 其本質是一個偽檔案(實為核心緩衝區)

2. 由兩個檔案描述符引用,一個表示讀端,一個表示寫端。

3. 規定資料從管道的寫端流入管道,從讀端流出。

管道的原理: 管道實為核心使用環形佇列機制,藉助核心緩衝區(4k)實現。

管道的侷限性:

① 資料自己讀不能自己寫。

② 資料一旦被讀走,便不在管道中存在,不可反覆讀取。

③ 由於管道採用半雙工通訊方式。因此,資料只能在一個方向上流動。

④ 只能在有公共祖先的程序間使用管道。

常見的通訊方式有,單工通訊、半雙工通訊、全雙工通訊。

pipe函式

建立管道

    int pipe(int pipefd[2]); 成功:0;失敗:-1,設定errno

函式呼叫成功返回r/w兩個檔案描述符。無需open,但需手動close。規定:fd[0] → r; fd[1] → w,就像0對應標準輸入,1對應標準輸出一樣。向管道檔案讀寫資料其實是在讀寫核心緩衝區。