學會一個東西,或是想很快的完成甚麼一件事,當然有這樣子的積極進取心是很好的。
但有些事情卻未必都可以用這樣子的想法或方法。有時候,或許你可以試著靜下心來,
讓自己沉澱一下,或許你可以"靜思一得",換個角度就可以看到不同的事物與想法。
像我當年在工作上會搞USB 系統,也會寫一些韌體程式,但就是一直埋頭苦幹,寫程式、
Debug。跑客人~市場。然後不斷的一步一步像陀螺般地完成上級老闆所交付的任務。
我也拿到我應該拿到的薪酬。煩了~老闆還會問你說:你想不想換個產品線做啊?
(這還算比較好的老闆,也可能是聽完你的抱怨之後,安慰你的一句話吧!)
後來我覺得我真的該找個時間與空間的讓自己好好的沉澱思考一下。所以,
我真的就花了三~五個月的時間,讓自己不管是從生活或自己學習的方式,讓自己有個
屬於自己想做而一直沒有完成的事,可以以自己的步調一步一步地完成,
我就選了 USB ROM Emulator 一個產品目標的,把他從硬體、韌體及MFC 應用軟體好好地
走一遍。我做到了。老天爺也非常照顧我。我不但賺回我這幾個月的原本的薪酬,
而且也讓我更有信心地用自己眼光與角度去面對自己的人生。
所以,有時候,真的不能從每天從像個陀螺般地轉,以為只要天天有薪水領,那就一份
好的工作或是一個好人生。因為再好的人事物,也總有散席的時候,那你要自己如何面對呢?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
USB DIY 講座 (三) --- USB 特質(續)
------------------------------------------------------------------------------------------------
我會利用這個章節,很快的把USB 的基本幾個我認為比較實務的特質講完後,
下一個章節就直接切入實務操作面,當然,在這個章節裡,我也會稍微提到相關的
應用觀念。最早,我進入USB時,也是很惶恐,尤其我也不是真正念電子電機出身的,
但或許真的進入的比較早,大家都是從頭學起,所以,也就沒什麼感覺了。
所以從此我真的可以深深的體會到,唯有新領域新東西,才有新的研發動力。
否則,若已經進入大量生產時,就沒什麼研發了,剩下的就是生產管理。
這也就是為什麼喜歡浸淫在研發工作的原因。但是一般人的觀念都是:
看到哪一家公司成名了,在想進去,其實,那時最辛苦的,因為多多少少多了
一點生產管理,少了那麼一點研發的氣息了。
不多說,就開始下一個章節單元。
-----------------------------------------------------------------------------------------------
特質七:USB Data Travels in Packets
<<>> Identified by "Packet ID"(PID)。規格第八章,看了您也不懂在講什麼?因為您不是作IC設計的。
<<>> Token packet tells what's coming。有點像傳輸的表頭。
<<>> Data packets deliver bytes。協定的最終的目的就是傳資料。
<<>> Handshake 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 傳
一些資料給我,我該怎麼辦?答案如下:
這張圖裡還透露了許多您用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
<<>> Success = ACK token。您MCU大部分會有中斷訊息被告知。
<<>> Error = No response (timeout)。千萬不要有這個問題發生。
<<>> Busy = NAK token (try again later)。您的MCU性能不好的話,可以多加利用。規格沒有規定NAK一定在某一個時間內得結束。您愛用NAK檔到明天也不會有事。
看了我上面那張圖就什麼也不必附加說明了。
------------------------------------------------------------------------------------------------------------
特質九:USB Projects Require a Significant Code Development Effort
<<>> Device Side。
<<<>>> USB housekeeping firmware。這一部份我想您要寫得好,USB功力要一定的程度。
<<<>>> Application firmware。就是寫一般8051 ,要我講,就是污辱您了。
<<>> Host side。
<<<>>> Driver (maybe)。這一部份一般都用Microsoft DDK 寫。
<<<>>> Application software。這一部份我都是用Visual C++ 寫,因為跟底層好連接。
我想這一部份大概就是想 USB DIY 最痛苦的地方了,我們中國人就是歹命,
有時認為跟別人很難溝通,又溝通不來,最好什麼都自己作,結果,現在的東西要學
的實在太多了,好不容易搞懂 USB 的東西後,竟然還有 PC的東西要搞清楚,
偏偏現在 PC 的作業系統儼然像隻大怪獸一樣。MFC 看起來很容易,
(因為程式小小的卻可以做出漂漂亮亮的視窗程式),但都抓不到頭緒。
唉~說真的,說到這兒,我也不知道該如何教您了。就求求老天爺給您一天 48 小時,
外加兩個頭腦。否則,我也不知道有更好的方法嗎?
-----------------------------------------------------------------------------------------------------------
特質十:Conform to a standard USB device class, and you won't need
to write a driver
<<>> BIG incentive。您因為大家不想歹命啊。
<<>> Spend effort making firmware class-compliant。這是老外的看法,我想K英文規格還不如動手寫程式還比較快一點。
<<>> In Win 98 。您大概不會想理他了。
<<<>>> HID (Human Interface Device)。您拿USB只作這個?太辛苦了吧。(PS:這句話,我當年講錯了!)
<<<>>> Speakers。ISO 的東西,您還要我講什麼呢?
<<>> Additional Win 2000 and Millennium device。
<<<>>> Mass Storage (MSDC)。我也做過,就是照表操課,玩過一次就好。
<<<>>> Still image。有時為了配合上層的應用程式,還是很辛苦。
最後這兩項說明了在USB DIY過程中,您將面臨很大的心裡掙扎,我要不要學軟體?
說真的,標準Class 驅動程式好像很吸引人,但我跟您說:這是留給做大量產品用的。
給那些人多勢眾的公司作的,不要以為用這些驅動程式的公司裡就不必養軟體工程師,
我跟您說:養的才多呢。因為要去分析到底Microsoft 在驅動程式裡埋了那些機關?
又這些標準的驅動程式的上層應用程式也未必比較好寫。
我是覺得您既然要用USB 就是只是想拿他作一個介面,也不想搞這麼多支枝旁節的,
所以,就套一個簡單方便,又別人認證過的東西最快。這樣子,您懂嗎?!
-----------------------------------------------------------------------------------------------------------------
最後的總結:
我講這麼多一些基本實務上的概念性的東西,倒不是在賣弄學問,規格書白紙黑字,
大家都可以人手一本好好的K他好幾遍,但是,當您碰到實際問題時,您根本對不到
問題是指向規格的哪一部份?或甚至說,規格沒提到我怎麼辦?!
規格是死的,應用是靈活的。我提的那些細節的東西都是很實際的問題。
同樣是依循同一個規格,為什麼人家作出來的東西這麼好,我的東西就比較差?!
這是因為您只是輕描淡寫的去面對您所面對的問題。
當然,當您真正動手作的時候,尤其是DIY 時,您就不得不自己去面對許多技術上的
問題,不會的可以問人家,但是問不到或連要問也不知道怎麼問的時候您怎麼辦?!
相信我所相信的:若許多東西,如果沒有一點訣竅在裡面的話,很多東西也輪不到您作了。
為什麼?您台大畢業,人家也是台大畢業,您一天24 小時,別人也是一天24 小時,
您覺得您的優勢在哪?!您可能要好好的思考這個問題,因為接下來我就要開始動手作了。
沒有留言:
張貼留言