ChamberPlus System Level Studio

  首頁 | Contact to us

 

News
Products
FAQ
Technicality
Links
OldNews

互動區:

留下您的足跡

想討論嗎?

 

 USB DIY 講座 (五) --- Enumeration

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

         Enumeration 這個字要怎麼翻譯會比較得體呢? 答案是:照原文唸。說真的,有些英文照原來字面上來念還比較懂,但是您硬要拗成中文就很難傳達原來的神韻了。您不要覺得凡是所有的字都要翻成中文(我不是在說彼岸那邊),除非所有的規格是我們訂的。否則,說真的,我們頭腦裡面的思維模式不是用英文式的,所以,根本無法很傳神的表達他原來的意思,這些專有名詞有時還是滿好用的,比如您跟老外討論工程時,句子講得不怎麼樣,但這一兩個專有名詞就可以很清楚告訴他您想說什麼了?就像您聽一個老外說中文時,雖然他說的『二二六六』的時,但有時您還是知道他要說的是什麼一件事的道理是一樣的。怎麼上起英文課了?!

        USB DIY 第一個步驟就是USB Plug and Play,第一個動作就是Enumeration 。但很多人都被他搞得痛苦。因為規格寫的是死的,所以,這部分也完全照規格。沒有多大應用上的變化,自然很多人反而搞不懂。就是照著規格第九章作就對了,這也是最有名的『Chapter 9』,一般USB Controller IC 大部分都已經幫您做完大部分的工作了,所以,說真的您也不需要花太多心思。您只要稍微瞭解一下他的動作步驟就可以了,怎麼瞭解?不要在K規格了,再K就要K人了。直接看圖說故事:

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

(麻煩自己點一下圖放大看)

我就把幾個重點講一下就好了,您也不要問我為什麼?因為這順序步驟規格書裡沒說,是Microsoft 他愛怎麼玩就怎麼玩,反正您把Chapter 9 所有的命令都準備好就是了。(若不清楚的,還可以參考一下我另一篇USB 文章 : MP3 系統應用--USB篇)

bulletGet Device Descriptor  : 反正一開始,也不知道字串長度,就來個0x40,後來才知道0x12 (搞不懂微軟?規格不是明明說好是18 長度?您還用64 問?我還沒看過不是18 的,有看到的麻煩傳一份給我參考!)
bulletSet Address : 一開始先給零再Assign 2,從此就是 2 了。這個位置有沒有意義?不知道,以前作IC時,是拿來DEBUG用的,後來,就再也沒用到了。(您的IC若連這個2 都看不懂,就完了-- 串列上別人的Token 搶過來亂傳。)
bullet定義有多少Endpoint ?方向為何?(您的功力可不可以不用翻規格就可以從螢幕內容他是什麼?哈∼。)
bullet定義USB裝置的描述字串。(注意:他是 Unicode,對不起,除了英文識別碼外,我還沒看過別的!)
bullet省略的原因是:煩死了,來來回回好幾遍,也不知道Microsoft 是什麼意思?存心要玩死別人似的。
bullet最後一個:Set Configuration (是告訴您,可以了,Enumeration 完成。別太高興,這中間過程中,軟體的驅動程式是要掛起來的!否則,您就沒得玩。然後,當然您也可以騙微軟,隨便掛一個,但您的應用程式找不到驅動程式,也不關微軟的事。)

        話說這個Enumeration 過程是蠻平凡的,實在不值一提,不講,人家還以為我只是呼攏您而已。不過,對我們USB DIY 一族來說:當您用自己的String desciptor 外加自己改寫的驅動程式裡的 inf 檔掛起來,看到微軟的『裝置管理員』把您的字串SHOW出來時,那種成就感是別人無法比擬的。這是比作那些RS232 或Parallel 好玩的地方。(另外,我是不知道一般USB DIY一族中 您們的VID是用誰的? CYPRESS ? 這個可不能隨便自己取的,這是登記有案的,當您去參加所謂『插拔大會』(不知道這年頭誰還有興趣去做?),可是要有自己的VID 的。

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

        若講完上面那一部份就結束,那我也不會特定寫這麼一篇囉。當然,雖然在USB Device 端的韌體或軟體針對這部分是沒什麼好講的,但您知道嗎?在硬體上他確有一個很好玩的應用。USB 裝置他厲害的地方(相對RS232 或 Parallel 來說),他是可以供電給我們USB Device 的。在Enumeration 您會回是Bus Power 或Self-Power 。但有些應用是我們可能要先從USB BUS上先取得電源,為我們的系統作Initialize 的動作,卻不太想理有關USB 的 Protocol 的東西(因為會有太多中斷影響我們程式),例子喔?!很簡單:MP3 產品就是囉。因為MP3 系統裡有個類似DOS 的File System,他的 Initialize 是比較長的時間(當然有時您也會感覺不出來,但對USB來說算是慢了),那我們該怎麼作?答案也是看圖:

        這張圖說明了整個步驟,USB 的電源先進來,系統 Initialize 過程中檢查一下那根 Input pin,有被拉成LOW,就代表您的電源是由USB供的。當您所有的事情全作完了,想跟您HOST PC上應用程式溝通時,再把那根 Output 拉High(注意我圖上那的R30 標的是N.C. 喔) ,PC 就會對您作Enumeration 了,講完了,江湖一點訣,講破沒意思∼我說了會怎樣?我跟您說:您USB Controller IC 您還是不敢隨便用的耶。因為USB 的東西有太多您看不到的盲點,我講了這些也只不過冰山一角了。(注意:這根Output pin 您最好是找一根default 是tri-state 的 ,否則在USB BUS 上您還是會看到一個:

        雖然可能馬上變成RESET 狀態,但終究這樣的現象是不合理的。USB 的速度真的很快的(就算是 1.1 也是的),只要您稍微讓D+  稍微High 一下,南橋IC立刻發訊號並通知OS 。我想這是您在所有的地方都不會跟您說的。就算您用錯了,您可能也不知道。因為您也沒發現,但哪天出問題了∼您就頭大了。所以,為何USB Controller IC 大家喜歡用Cypress ,因為,錯誤他都幫您扛了。當然,用我的方案也不會有這個問題。我一開始就會留意的

        所以,人家前輩(CYPRESS)開宗明義就跟您說:USB is not simple  !! 他講的還只不過是韌體或軟體而已。還沒跟您硬體呢!!您知道您 USB Device Suspend Current 有沒有超過 500 uA ?! 對不對?!您的USB Device  Suspend 之後,會不會一覺不醒?回不來(resume)?這些都是跟硬體有關的耶。好好加油。

   

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