ChamberPlus System Level Studio

  首頁 | Contact to us

 

News
Products
FAQ
Technicality
Links
OldNews

互動區:

留下您的足跡

想討論嗎?

                                                   

 USB DIY 講座 (三) --- USB 特質(續)

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

     我會利用這個章節,很快的把USB 的基本幾個我認為比較實務的特質講完後,下一個章節就直接切入實務操作面,當然,在這個章節裡,我也會稍微提到相關的應用觀念。最早,我進入USB時,也是很惶恐,尤其我也不是真正念電子電機出身的,但或許真的進入的比較早,大家都是從頭學起,所以,也就沒什麼感覺了。所以從此我真的可以深深的體會到,唯有新領域新東西,才有新的研發動力。否則,若已經進入大量生產時,就沒什麼研發了,剩下的就是生產管理。這也就是為什麼喜歡浸淫在研發工作的原因。但是一般人的觀念都是:看到哪一家公司成名了,在想進去,其實,那時最辛苦的,因為多多少少多了一點生產管理,少了那麼一點研發的氣息了。

        不多說,就開始下一個章節單元。

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

特質七:USB Data Travels in Packets

bulletIdentified by "Packet ID"(PID)規格第八章,看了您也不懂在講什麼?因為您不是作IC設計的。
bulletToken packet tells what's coming有點像傳輸的表頭。
bulletData packets deliver bytes協定的最終的目的就是傳資料。
bulletHandshake packets report success or otherwise 就協定就是有來有往。

我想一般USB的書都會給您這張圖:您應該不陌生!

            請問有多少人看了這張圖有感覺或會體會的到呢?您有發現他是3X3 所構成的東西嗎?什麼? 3x3 ?就是上圖中有三種顏色,每個顏色裡又分成三大packets 。這就是USB protocol 最基本的精神。說真的,您若看不懂這張圖,您大概就不太會寫USB Device 的程式了。因為絕大部分的USB Controller IC 都是依據這個Protocol 發訊息中斷給您的8051 。因為在許多不同的應用中,有可能您USB沒有 Isochronous/Interrupt/Bulk 傳輸介面,但一定要有Control Token ! 所以,才有這張圖。看不太懂?!我換個方式您就懂:

    這張圖SHOW是一個Vendor Command ,(就是下一個我自己定義的命令給我的 USB Device ),所以,他是Setup-Out-In ! 什麼是Vendor Command ? 就是Setup 裡面那個0x40 (規格書裡的第九章)。Out 的內容是我的命令參數或資料。最後一個 Null In ,把整個Protocol 給完成掉。至於我下完命令後,USB Device 怎麼回答我呢?或是我的命令中要USB Device 傳一些資料給我,我該怎麼辦?答案如下:

再下一個Setup-In-Out 的Control Token !就可以把資料抓進來了。

        這張圖裡還透露了許多您用USB 產品時您所不知的玄機:

第一:每一個小protocol 都是在SOF 之後,這就是我所說的:UHCI 介面的USB 南橋。所以,就可以看出他是Intel 授權(或他本身)的南橋晶片。那OHCI是長什麼樣子呢?就是這3x3 全擠在兩個SOF之間。所以,您要用USB Controller 時就得小心,因為OHCI的Procotol 會很快,您USB Controller IC 最好強壯一點。所以,是要跟您說的是USB Controller IC 不要隨便用,要不然相容性問題會讓您作不完。

第二:您有沒有留意到我圖中,Packet # 都是連號的!哈∼哈∼因為我USB Controller 中的MCU 性能好,所以沒不會有任何遲疑。別人的可能都還要回幾個NAK 讓PC 主機等一下。

第三:就是我上述所說的第二點:每一個ACK 都可以不用急得回 HOST PC 。既然MCU 速度不夠就讓他等,但是,Setup 後面那的ACK不能用NAK擋∼否則,您USB 裝置當場就會被PC給踢出去!(要重新插拔,甚至要重新開機)。放心好了,您不用擔心,這個問題IC會把您解決掉這個問題的。也輪不到您擔心

第四:很明顯的,一般USB Controller IC 會在每一個ACK 時發個中斷訊息給您的。所以,我才跟您說:看不懂這張圖,就不用寫USB Device Firmware 了。

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

特質八:Bulk/Ctrl/Int Transfers Have Error Recovery

bulletSuccess = ACK token您MCU大部分會有中斷訊息被告知。
bulletError = No response (timeout)千萬不要有這個問題發生。
bulletBusy = NAK token (try again later)您的MCU性能不好的話,可以多加利用。規格沒有規定NAK一定在某一個時間內得結束。您愛用NAK檔到明天也不會有事。

看了我上面那張圖就什麼也不必附加說明了。

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

特質九:USB Projects Require a Significant Code Development Effort

bulletDevice Side
bullet        USB housekeeping firmware。這一部份我想您要寫得好,USB功力要一定的程度。
bullet        Application firmware。就是寫一般8051 ,要我講,就是污辱您了。
bulletHost side
bullet        Driver (maybe)。這一部份一般都用Microsoft DDK 寫。
bullet        Application software。這一部份我都是用Visual C++ 寫,因為跟底層好連接。
bullet 

    我想這一部份大概就是想 USB DIY 最痛苦的地方了,我們中國人就是歹命,有時認為跟別人很難溝通,又溝通不來,最好什麼都自己作,結果,現在的東西要學的實在太多了,好不容易搞懂USB的東西後,竟然還有PC的東西要搞清楚,偏偏現在 PC 的作業系統儼然像隻大怪獸一樣。MFC 看起來很容易,(因為程式小小的卻可以做出漂漂亮亮的視窗程式),但都抓不到頭緒。唉∼說真的,說到這兒,我也不知道該如何教您了。就求求老天爺給您一天 48 小時,外加兩個頭腦。否則,我也不知道有更好的方法嗎?

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

特質十:Conform to a standard USB device class, and you won't need to write a driver

bulletBIG incentive您因為大家不想歹命啊。
bulletSpend effort making firmware class-compliant這是老外的看法,我想K英文規格還不如動手寫程式還比較快一點。
bulletIn Win 98 您大概不會想理他了。
bullet        HID (Human Interface Device)。您拿USB只作這個?太辛苦了吧。
bullet        Speakers。ISO 的東西,您還要我講什麼呢?
bulletAdditional Win 2000 and Millennium device
bullet        Mass Storage (MSDC)。我也做過,就是照表操課,玩過一次就好。
bullet        Still image。有時為了配合上層的應用程式,還是很辛苦。

最後這兩項說明了在USB DIY過程中,您將面臨很大的心裡掙扎,我要不要學軟體?說真的,標準Class 驅動程式好像很吸引人,但我跟您說:這是留給做大量產品用的。給那些人多勢眾的公司作的,不要以為用這些驅動程式的公司裡就不必養軟體工程師,我跟您說:養的才多呢。因為要去分析到底Microsoft 在驅動程式裡埋了那些機關?又這些標準的驅動程式的上層應用程式也未必比較好寫。我是覺得您既然要用USB 就是只是想拿他作一個介面,也不想搞這麼多支枝旁節的,所以,就套一個簡單方便,又別人認證過的東西最快。這樣子,您懂嗎?!

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

最後的總結:

        我講這麼多一些基本實務上的概念性的東西,倒不是在賣弄學問,規格書白紙黑字,大家都可以人手一本好好的K他好幾遍,但是,當您碰到實際問題時,您根本對不到問題是指向規格的哪一部份?或甚至說,規格沒提到我怎麼辦?!規格是死的,應用是靈活的。我提的那些細節的東西都是很實際的問題。同樣是依循同一個規格,為什麼人家作出來的東西這麼好,我的東西就比較差?!這是因為您只是輕描淡寫的去面對您所面對的問題。

        當然,當您真正動手作的時候,尤其是DIY 時,您就不得不自己去面對許多技術上的問題,不會的可以問人家,但是問不到或連要問也不知道怎麼問的時候您怎麼辦?!相信我所相信的:若許多東西,如果沒有一點訣竅在裡面的話,很多東西也輪不到您作了。為什麼?您台大畢業,人家也是台大畢業,您一天24 小時,別人也是一天24 小時,您覺得您的優勢在哪?!您可能要好好的思考這個問題,因為接下來我就要開始動手作了。

首頁 | 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日。