ChamberPlus System Level Studio

  首頁 | Contact to us

 

News
Products
FAQ
Technicality
Links
OldNews

互動區:

留下您的足跡

想討論嗎?

 

USB DIY 講座 (二) --- USB 特質

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

         接下來,我繼續先說明有關USB 的基本認知,或許,您想作的東西,跟我的內容不是很相稱,對不起,我也不知該如何滿足您,說真的, 技術的東西,怎麼講也講不完的,也不可能涵蓋所有的東西,但我相信這些基本的概念,至少讓我做一些相關的東西時,卻是得心應手 ,我不是很厲害,厲害的是訂出規格的人,用這樣一個簡單的規格,卻能讓我們玩出這麼多花樣, 才是真正厲害的人。所以,我常建議有理想有抱負的年輕人,您若有機會出去國外走走或甚至 唸書,請不要客氣。可別只為了貪圖眼前的股票紅利喔。

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

特質三:USB 到底可以多快? (我才不要講規格的東西,眼見為憑!)

      我們是工程師,講的事事求是的精神,上圖是一個 Bulk Out 傳輸內容,兩個SOF (見下面特質6的說明)的間隔是 1mSec ,我們傳了 17 個 Packets ,所以是:17x64 Bytes/1mSec = 1.088 MB/Sec = 8.704 Mbps <12 Mbps,為什麼會小於 12Mbps 呢?因為在傳輸過程中,還要塞進 PID/ACK/CRC 等這些Token ,所以,以我們要傳的資料內容來說,是不可能達到 12 Mbps 的。

        您不要看我上面的傳輸的很漂亮,連一個NAK 都沒出現。您知道嗎?只要您 USB Device 的 MCU (如8051 不管是12 T 或 4T) 只要有任何一點遲疑的話,我指的是像去 Movx 一個Registers 時,就會塞進好幾個 NAK ,您傳輸的速度,當場就會被拉下來,因為USB 的Protocol 是不等您的。這樣您就會瞭解,人家說USB 控制器內的MCU 性能是一項很重要的關鍵了。另外一點是,像我上圖的內容來說:Bulk out 是PC將資料往外傳,如果您 USB Device 的 Data  Buffer 不夠大的話,您也勢必要先對USB 喊暫停(回NAK),再用MCU把資料移走或處理掉,否則,您又會對USB 這條高速公路造成塞車。明顯的,除了USB 內的控制器的MCU 執行速度的快慢會影響USB 速度外,您USB 控制器內的Buffer 容量也是一個重要關鍵。所以,您不真的一味的聽信說:USB 2.0 很快。如果以我上述的問題關鍵您視而不見的話,您還是開一台破車在一條筆直的戰備道上。同理,若您的傳輸方向的Bulk In (PC跟您的 USB Device 要資料),您USB Device 的資料若處理來不及給USB 來抓走的話,也是一樣。PC USB來問完就走了。因為您一定得回NAK,叫他等一等,這樣子,您覺得您可以怪USB 太慢嗎?

 

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

特質四:An Endpoint Is an addressable FIFO

bulletUSB Specification: a source or sink of data   
bullet    CONTROL : endpoint is bi-directional
bullet    Others are uni-directional
bulletFour address bits plus a direction bit selects between 32 buffers (FIFOs)
bulletDifferent USB chips support
bullet    Various numbers of endpoints
bullet    Various buffer sizes

其實,每一個endpoint 您就把他想像成一個水管(在術語上他也是稱為Pipe),然後,他每一個都有自己的方向與所指到的資料記憶體儲存空間。然後,在第一項中所指的CONTROL pipe ,其實,在應用上就很好用了,我再想他大概就可以取代一部份UART的功能了。我們不是喜歡透過 RS232 來下一些命令(甚至帶參數的),然後,再讀一些外面周邊的一些回應嗎?,這個CONTROL pipe 因為是雙向的,所以,就已經很夠用了。講一個您看規格可能看不到的東西:您知道嗎?一次的 Control In 或Control out 最多可以傳 4KBytes (USB 1.1) 的資料。以傳命令來說:夠大了吧。這個現象好像是作業系統底層的關係。您可能要問一下Microsoft ~ 他大概也不會跟您講原因吧?!

另外是,因為每一個 Endpoint 在傳輸過程中,都會指向某一個記體體空間,所以,我是認為Endpoint 夠用就好了,否則,是很浪費空間的。Cypress 的USB 控制晶片,好像他的Endpoint 都不少,所以,他賣得貴不是沒道理的。

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

特質五:USB Supports Four Transfer Types

bulletBulk: "巨量? 怪怪的翻譯"
bullet    Guaranteed accuracy , but delivery time is variable. 作Tools 介面最好了。
bullet    Best for "bursty" data
bulletIsochronous: 相對"巨量"來說,這才是巨量。只不過,用"同步"比較傳神。
bullet    Guaranteed delivery time,  but accuracy is not guaranteed. 這就是同步:像影音資料。稍縱即逝。
bulletControl :
bullet    Enumeration and device control.簡單來說,就是下命令用的。(您也可以拿來傳資料。)
bulletInterrupt:
bullet    Predictable polling time.低速用的,不過您可只為了這個功能犧牲掉您USB 的Performance。

對於這四種傳輸方式來說,對一般人來說,應該還是主要是Control 及Bulk ,以相對取代RS232 或Parallel 來說,也是這兩個。但許多人,不知是為了貪便宜呢?還是真的不是很瞭解USB ,還真的常用Interrupt 。說真的,我們都知道,所謂HID 或為了Polling 外面周邊像按鍵來說:除非就像鍵盤,笨得只是按鍵用。否則,一般的應用還有許多功能,您可別忘了,USB Device 是要寫程式的,所以,對鍵盤這種東西,我們還是會以傳統方式來Debounce 來讀鍵盤,然後,再將讀到的擲回傳給主機。您想想:Setup Control token 至少每 3mSec 就會來一次,您覺得用主機來作比較有效率呢?還是直接用Device 的單晶片來作比較好呢?!另外,若是Isochronous 的傳輸來說,因為您在主機上還有一個很上層的應用程式,您若軟體的功力不足的話,就算您USB 速度夠,您寫出來的應用程式,還會有所謂影音不同步,或是像社會新聞中,那種定格監視器拍到的東西一樣,能看嗎?!所以,以一般來說,我還是以大眾需求為主,講Control 及Bulk 就好了。若您要問我其他的∼抱歉!沒興趣。

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

特質六:USB Transfers Occur in 1ms Frames (USB 1.1)

bulletHost Sends "SOF" (Start of Frame) token every 1mSec . 這是鐵律!
bullet Host schedules packets inside frames.  您一定要有這個觀念。
bullet Isochronous data FIFOS "ping-pong" every SOF. 記住,這個東西是很會搶頻寬的。

      從上圖,您就會很明瞭的發現了。注意喔,USB 裝置是串接的,當同一PORT上面接了這幾種傳輸介面時,是會搶頻寬的。就可憐的就是Bulk ,撿人家剩下的。這是由主機決定的。但在早期還分OHCI 及UHCI 兩大陣營時,現象是有一點不太一樣,但基本觀念是一樣的。(註:所謂OHCI 指的是主機板南橋規格:像ALI 及SIS 就是;而UHCI指的就是INTEL及VIA 南橋晶片)據我所知,有多USB 控制晶片也有提供所謂SOF 中斷向量,以我的經驗是,這是留給萬一USB 控制晶片有碰到一些相容性問題時,動用的,否則,您一旦打開(Enabel,致能)這個中斷功能,包您的Device 的單晶片,什麼事都不用作了,您想一想,就算是您的8051是4T的,光push/pop 進進出出中斷,就可憐了,更何況您用高階C語言。

 

      再動一下滑鼠換頁吧。           

回到頁首

首頁 | News | Products | FAQ | Technicality | Links | OldNews

Telephone : 886-3-5439918    FAX : 886-3-5437632

Copyright(C) 2005 . ChamberPlus System Level Studio All rights reserved.  Last Update: 2008年01月18日。