端點:
端點位於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
-
查看USB詳細信息
[root@zcwyou ~]# lsusb -v
-
樹狀輸出信息
[root@zcwyou ~]# lsusb -t
列出指定設備信息
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口。