USB 設備

interface描述符,就是設置描述符,這個描述符的其中一項叫做bInterfaceNumber,指的就是這個設置是屬於哪 個接口。比如一個接口包含2個設置,那麼就會有2個interface描述符,兩個描述符裏的bInterfaceNumber設置都爲0,但是第一個設 置的bAlternateSetting爲0, 第二個設置的bAlternateSetting爲1。這樣就區分開來了。
 
假如一共有5個設置,2個接口。這5個設置,2個屬於接口1, 3個屬於接口2.
則就會有2個struct usb_interface,第一個usb_interface裏的altsetting有2個,第二個有3個。
協議裏規定,接口的默認設置總是0號設置。
 
endpoint描述符,它是屬於設置的,每個設置都會有endpoint描述符,也就是每個接口的設置都表示一種功能,既然是實現了功 能,那就必須通過endpoint來傳輸數據,那到底是用到了幾個endpoint呢?每個endpoint的屬性是?所以每個接口的設置裏就會有 endpoint的描述符。
 
endpoint有個特性,要麼只能input,要麼只能output,但是也有一個特殊的endpoint,就是endpoint 0,每個USB設備都有這麼一個endpoint0,除此endpoint,其他都只能單工的。而且每個endpoint每次傳輸的大小也不一樣,所以就 有了這麼個endpoint描述符來對其進行描述。
 

端點:

端點位於USB 外設內部,所有通信數據的來源或目的都基於這些端點,是一個可尋址的FIFO。

每個USB 外設有一個唯一的地址,可能包含最多十六個端點。主機通過發出器件地址和每次數據傳輸的端點號,向一個具體端點(FIFO)發送數據。

每個端點的地址爲0 到15,一個端點地址對應一個方向。所以,端點2-IN 與端點2-OUT 完全不同。 每個器件有一個默認的雙向控制端點0,因此不存在端點0-IN 和端點0-OUT。


在一個USB設備中會有很多endpoint,最多有16個。而我用的S5PV210處理器中有 16個,分別爲EP0 – EP15。一個EP本質上講是FIFO,也就是一段緩衝區,我們可以這樣理解一個USB OTG設備就是有很多個緩衝區的集合。

雖然有16個端點,但是我們通常只會用到3個。比較常用的做法是EP0用做傳輸配置和控制信息,EP1做IN_EP,EP2做OUT_EP。

IN_EP的作用是用於把數據從Host傳到Device中。而OUT_EP的作用是用於把數據從Device傳送到Host中。即他們分別用做發送和接收。


USB四種傳輸模式

控制傳輸、批量傳輸、中斷傳輸、同步傳輸

USB 有上述四種傳輸類型。枚舉期間外設告訴主機每個端點支持哪種傳輸類型。

USB設備驅動向USB控制器驅動請求的每次傳輸被稱爲一個事務(Transaction),

事務有四種類型:Bulk Transaction、Control Transaction、Interrupt Transaction和Isochronous Transaction

數據包包含部分:

每次事務都會分解成若干個數據包在USB總線上傳輸。每次傳輸必須歷經兩個或三個部分,第一部分——USB控制器向USB設備發出命令,

第二部分——USB控制器和USB設備之間傳遞讀寫請求,其方向主要看第一部分的命令是讀還是寫,第二部分有時候可以沒有。

第三部分——握手信號。

批量(Bulk)傳輸事務

作用:主要應用在數據大量數據傳輸和接受數據上同時又沒有帶寬和間隔時間要求的情況下;

特點:要求保證傳輸。打印機和掃描儀屬於這種類型這種類型的設備

適合於傳輸非常慢和大量被延遲的傳輸,可以等到所有其它類型的數據的傳輸完成之後再傳輸和接收數據。

批量數據傳輸分三個階段:

第一部分——令牌階段。

Host端發出一個Bulk的令牌請求。

如果令牌是IN請求 ,則是從Device到Host的請求;

如果令牌是OUT請求,則是從Host到Device端的請求。

第二部分——傳送數據的階段。

根據先前請求的令牌的類型,數據傳輸有可能是IN方向,也有可能是OUT方向。傳輸數據的時候用DATA0和DATA1令牌攜帶着數據交替傳送。

數據傳輸格式DATA1和DATA0,這兩個是重複數據,確保在1數據丟失時0可以補上,不至於數據丟失。

第三部分——握手階段。

如果數據是IN 方向,握手信號應該是Host端發出;

如果數據是OUT方向,握手信號應該是Device端發出。

握手信號可以爲ACK, 表示正常響應,

NAK, 表示沒有正確傳送。

STALL,表示出現主機不可預知的錯誤。


控制(Control)傳輸

作用:USB系統軟件用來主要進行查詢配置和給USB設備發送通用的命令;

特點:控制傳輸是雙向傳輸,數據量通常較小;數據傳送是無損性的。

數據寬度:控制傳輸方式可以包括8、16、32和64字節的數據,這依賴於設備和傳輸速度。

控制傳輸典型地用在主計算機和USB外設之間的端點0(EP0)之間的傳輸

控制傳輸也分爲三個階段,即令牌階段、數據傳送階段、握手階段

中斷(Interrupt)傳輸事務

作用:主要用於定時查詢設備是否有中斷數據要傳輸;

特點:設備的端點模式器的結構決定了它的查詢頻率從1到255ms之間。

典型的應用在少量的分散的不可預測數據的傳輸鍵盤操縱桿和鼠標就屬於這一類型

(數據量很小)

中斷方式傳輸是單向的並且對於host 來說只有輸入(IN)的方式

在中斷事務中,也分爲三個階段,即令牌階段、數據傳輸階段、握手階段

同步(Isochronous)傳輸事務

作用:用於時間嚴格並具有較強容錯性的流數據傳輸,或者用於要求恆定的數據傳輸率的即時應用中。例如執行即時通話的網絡電話。

特點:保證傳輸的同步性。保證每秒有固定的傳輸量。

(與Bulk傳輸不同)同步傳輸允許有一定的誤碼率。(這樣符合視頻會議等傳輸的需求,因爲視頻會議首先要保證實時性,在一定條件下,允許有一定的誤碼率。)

同步傳輸事務有隻有兩個階段,即令牌階段、數據階段,因爲不關心數據的正確性,故沒有握手階段,

 

  • 查看USB設備彙總信息

[root@zcwyou ~]# lsusb

linux安裝lsusb

 

  • 查看USB詳細信息

[root@zcwyou ~]# lsusb -v

linux安裝lsusb

  • 樹狀輸出信息

[root@zcwyou ~]# lsusb -t

linux安裝lsusb

列出指定設備信息

 root@Widora32:~#  lsusb -D /dev/bus/usb/001/003
Device: ID 05a3:9310 ARC International  
 Device Descriptor:
   bLength                18
   bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x05a3 ARC International   
  idProduct          0x9310
  bcdDevice            0.00
  iManufacturer           2 HD Camera Manufacturer
  iProduct                1 USB 2.0 Camera
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          963
   ...

 

在設備開發中,常用到基於USB的虛擬串口,此類接口在linux平臺上被枚舉爲ttyUSB設備。

當有多個ttyUSB設備時,常常導致分不清是哪個功能接口。

  其實還是可以很容易分出來的,在sysfs中通過以下步驟查看可以輕而易舉的搞得一清二楚。

  查看sys目錄,會看到bus子目錄

/#: ls /sys
block     class     devices   firmware  kernel    pmu       zte
bus       dev       dwc_usb   fs        module    power
1.
2.
3.
  查看bus子目錄,會有USB子目錄

/#: ls /sys/bus
clocksource  i2c          rpmsg_zx29   serio        usb
cpu          platform     scsi         spi          usb-serial
1.
2.
3.
  查看USB子目錄,會有devices和drivers子目錄

/ # ls sys/bus/usb
devices            drivers_autoprobe  uevent
drivers            drivers_probe
1.
2.
3.
  在devices目錄下,即是所有的USB設備

/ # ls sys/bus/usb/devices
1-0:1.0  1-1      1-1:1.0  1-1:1.1  1-1:1.2  1-1:1.3  1-1:1.4  1-1:1.6  usb1
1.
2.
  任選一個查看,比如選擇1-1:1.2,可以看到該設備的諸多屬性

/ # ls sys/bus/usb/devices/1-1:1.2
bAlternateSetting     driver                subsystem
bInterfaceClass       ep_03                 supports_autosuspend
bInterfaceNumber      ep_83                 ttyUSB0
bInterfaceProtocol    interface             uevent
bInterfaceSubClass    modalias
bNumEndpoints         power
1.
2.
3.
4.
5.
6.
7.
  同時可以看到,它所對應的ttyUSB設備是ttyUSB0,但是這個是哪個接口,是什麼功能呢?

其實1-1:1.2這個名字已經表明了是接口2,但是對於普通人來說很難去記,還是進一步查看確認一下才好。查看接口號:

 bInterfaceNumber代表接口號,可以看到是02

/ # cat sys/bus/usb/devices/1-1:1.2/bInterfaceNumber
02
1.
2.
查看對應的功能接口描述,interface代表功能接口描述,可以看到是USB-AT,表明是AT口

/ # cat sys/bus/usb/devices/1-1:1.2/interface
USB-AT
1.
2.
由此可知,ttyUSB0對應的是AT口。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章