好吧,我們接下來就實際把原廠所附的USB原始程式給跑起來,
然後實際的操作一遍。....以利我們觀察一下結果。
原則上,我們都不對原廠所附的程式作任何修改,直接組譯下載。
結果呢,我們可以很快到的看到在電腦裝置裡,出現該USB 裝置。
(圖)
我們用的USB 驅動程式也是原廠所給的....不過呢?!原廠也有附上
驅動程式的原始碼,可以供使用者自行修改之。
只不過,使用者要有Window XP DDK 2600 ,才能完成組譯。
我把他所附的驅動程式組譯之後,竟然發現兩者之間的程式大小不一樣!!
先不管了...我們還是先採用原廠的驅動程式...
-----------------
當我們看到電腦出現USB 裝置時,一般的初學者,都會有一股小小的成就感,
覺得好像學USB 就是這麼簡單嘛!....我也會了....
(這好像一般時下一些菜鳥工程師常犯的毛病,大陸工程師也是如此,
只不過,寫過一兩個程式,或是向這般跑一次範例程式,就到處炫耀跟別人說:
USB 這種東西很簡單啊... 我也做過....就是怎樣?怎樣的簡單啊....)
但事實真的如此嗎?!....我們把原廠所給的韌體程式所產生的Enumeration過程給抓下來看:
(圖)
乖乖....我們這種老鳥明眼人一看就發現不對勁?!
不對...缺一個ACK Token ...這鐵定有問題,跟您們說:別想騙Microsoft 的OS...
雖然微軟的OS常讓別人罵爽的...但是您也別想呼籠他...
這個原廠的韌體在回 Enumeration 是不對的....否則 OS 不可能不回ACK 的!
再仔細一看:人家系統USB 明明要 0x0A 個Bytes 資料,
USB 韌體竟然回個 32 Bytes ....而且還是亂碼....太離譜了!
雖然外表好像煞有其事的正常顯示出USB 裝置...但不代表您的USB 韌體是對的 !
夠詭異吧 ....這是要玩USB 要先有的心理建設,您不要以為原廠給的東西就是對的!
因為原廠的工程師也是人啊...也有菜鳥工程師啊...也有摸魚打混的人啊!
我們就查了一下:這個Setup Token 是要Device Description中的 Device Qualifier 。
這是USB 2.0 才有的東西 ...USB 1.1 沒有支持這個東西 。
但人家微軟的作業系統一定很清楚是USB 1.1 或是2.0 的東西 ...
人家OS 會來問,一定是USB 韌體本身自己搞的鬼....
往USB Enumeration前面一點看: 果然不錯...自己在USB 的宣告中:自稱USB 2.0 。
(圖)
這叫白癡啊...明明自己韌體程式不支援USB 2.0 的這個命令,
自己還擺爛的回人家說自己是 USB 2.0 !這不是找罪受?!耍白癡嗎?!
這果然跟我們台灣政治人物一般...只是喊爽的而已...又不是真正的 USB 2.0 !
又再一次的證明版主常掛在嘴邊的一句話:不是最好,最快的就是好東西!
只有適合自己用的,才是好東西---才更能凸顯自己的價值啊 !
(像我們這老鳥工程師們平時打屁時說的:在硬體設計時,
所有的元器件都用最好,最貴的...做出來的東西跟人家說自己多會設計電路...
我們常開玩笑說:他應該生在美國,長在美國才對啊! ...這樣的東西有什麼好炫耀的!)
----
好吧 ...我們就原廠的程式把他修改宣告為 USB 1.1 後,再試一次!
(圖)
從上圖中我們發現我們已經回USB 1.1了 !
我再看一次相關的 USB Enumeration 過程.....
(圖)
看到沒?!...漂漂亮亮的完成 USB Get Device Description...
再 Set Configuration....完成整個USB Enumeration 。
完美的Touch-down !--- USB 2.0 有什麼用?!錯的啦...
人家USB1.1 雖然笨一點,老一點...但人家微軟給一百分滿分啊...
------
沒想到,才一開始想用原廠的 程式來修改USB 的應用程式,竟然一開始就發生這種烏龍事件。
當然啊...如果是您呢?!...只要電腦Show出您的 USB 裝置時,
您就高興的非常有成就感?!....您在被陷害您不知道而已. !
等下回人家微軟嚴謹的抓您的USB Bug 時,您該不會一句說:不會啊!
以前我都用得很順利啊...怎麼會有問題呢?!這是一些工程師常慣用的藉口啊 。
您我捫心自問....我們真的有真正的去面對這種類似的問題嗎?! ...我們真的很有用心的去學習嗎?!
這真的需要花您好幾天的時間嗎?!....而您卻想百般的逃避與不想面對他?!...
這真的不是學技術好的態度的....
-----
接下來呢?!...很不幸的,我RUN 原廠的應用程式,來實際 USB Bulk In/Out...
答案想當然爾---- 也是不對的啦....唉...這到底我比較賤手呢?!
還是真的原廠也是在耍白癡嗎?!...要讓學習者從抓他們的Bug 來學習嗎?!
雖然學技術,是從抓Bug 基礎扎根起來的....這的確是不諱言的。
但看樣子...接下來還有得玩呢!....
(待續)
-------------------
1. 改寫原廠的USB應用程式
2. 改寫原廠的USB應用程式(續一)
我一直以為那的標榜規格的描述元可以亂填耶~原來是不可亂填的.因為我一直認為電氣特性決定了一切, 所以才會覺得描述元的某些欄位是沒意義的..亂填也可以.剛剛仔細看了規格書,才發現描述元型態除了1~5, 還有 678..看樣子我資掉k的不夠熟...需再加強..
回覆刪除USBLAB Miller