來說個新年新驚奇的故事吧。
這篇原本也不知道要放在創業篇呢?還是老工程師的技術生活裡?
後來想一想:文章內容還是比較技術分享,至於其中有沒有創業故事呢?就看
每位看官對文章內容的感觸而定吧。那你說:這種事一個人一輩子可以遇到幾次呢?
我還在今年第一篇文章中,還在開玩笑說:我開發的那個數位CDI 還可以賣多久?
沒想到還沒一個月又有一個更令人驚奇的故事發生啊,因為我離開園區創業的第一個
產品:USB ROM Emulator ,竟然還有客人在問啊。這個東西截至今年:剛好滿二十年。
他的故事比我那個數位CDI 的開發故事更久:
Hinet 網頁系列--- USB ROM Emulator 的故事
這個就是我創業的第一桶金啊,我在過去的許多創業經驗分享中,也交代過它的故事,
基本上就是賣了幾百台,有六位數的收入與獲利。但後來真的是時代的眼淚,我也蠻
隨緣的不再期望市場給我的回饋,幸好手上就剩下幾片庫存,前幾年原本還一度想直接
丟進回收箱,想想:也念它對我的貢獻啊。結果上個月竟然收到通路商的訊息:
你知道這個東西後來也沒有強力的推銷或販賣,就是卡在一個很嚴重的技術問題:
那就是我們原本產品中的USB 驅動程式沒辦法在 Win7/Win 10 等OS 給安裝起來。
因為我們走的USB 驅動介面是採用 Vendor Command(Class) 方式。
你想想:我開發時,還是Windows XP 外加Visual C++ 6.0 而已啊,誰知道後來
作業系統發展會怎樣呢?我的USB 在PC 端驅動程式的開發功力也沒那麼好啊。
投資報酬太低的,錢也賺過了,想直接放棄了。做人(工程師)還是不要有太多堅持啊。
坦白講:就連VC6.0 MFC 也是邊學邊把產品系統要的東西,給拼拼湊湊的給寫起來,
那時功力與此時相去甚遠...甚遠...甚遠...還真的不是普通的遠啊!...幸好,這幾年下來
因為許多工作都需要用到很多PC 端的USB 應用介面,幾年磨練下來,還是有點底子
了啦。--- 這也是要奉勸年輕人們的一句話:整天只想追求高大尚或市場過於偏頗或
狹隘的產品技術,未必是一件好事,畢竟環境是現實的,能真正為你帶來永續的職場
生命力的,往往就是這些普羅大眾,很基礎、通俗的系統應用而已。尤其年紀大了,
整天講過氣或非常專門(偏門)領域的產品市場,真的對你來說:沒有太多幫助的啦。
最實際的還是這些不用太依賴別人協助或資源,就可以整合多項基礎技術為你變現的
普羅技術。等你看我這兩篇文章就可以體會了啦。
----
好吧,既然都已經碰到了,也順便回頭檢視一下自己在USB 這項介面技術有沒有達到
一個全面的境界吧。也就是我上面給通路商的答覆。
我就回頭問(確認)一下當年幫我搞定USB 驅動程式的老同事有沒有其他建議?
所以我們兩個就很快有個共識明確的方向與答案了。那就開始動手吧。
首先先再一次確認在 Win10 系統平台是安裝不起來的。
然後就開始使用微軟通用的 WinUSB 驅動程式:我們可以借用這個 Zadig 公用工具程式。
它可以協助幫我們安裝一些USB 驅動程式的:
除了 WinUSB 之外,還有libusb-w32 (這個太老了...) 、libusbK,基本上這兩個是給非Windows
平台用的。我只需要Windows 作業系統就可以了。然後依照 Zadig 的使用手冊操作就可以了。
它也會將安裝過程中的Log 給你參考:
你也可以修改USB 驅動程式的名稱,也會產生 USB 驅動程式最重要的 INF 檔案給你,
當然也會直接幫你安裝完成的啦。你就可以把這些INF 及 WinUSB.sys 給獨立出來。
放在你的系統或產品的安裝路徑中了。
我們就可以在Win10 上重新安裝我USB ROM emulator 了:
但畢竟我們還不是完全是微軟認證的驅動程式,(當然啊,我們沒有花錢啊!),但基本上
還是可以繼續安裝的:安裝成功。
我們也可以查到安裝位置與相關訊息的:
基本上,我們已經完成第一步USB 驅動程式的安裝了,
接下來就是要簡單寫個USB 小程式來測試一下:我們可以藉由 Keil 公司所提供的一個
USB PC 端的範例程式:Keil WinUSB Test 來跑的。它就是一隻Visual Studio MFC 程式。
不會?那我也沒辦法啊...因為我也是從二十年前忍痛的把她辛苦的啃下來的。我就是
想在USB 系統開發環境裡,能夠完全的自主掌握韌體與PC Host 端的APP 軟體開發啊。
---- 這兩個技術的結合,真的讓我工程師一生受用無窮啊。當然這也是我在二十年來
在這方面都有一直從事相關系統開發,才能完全的深入了解與開發:這真的沒甚麼好
嘴別人的,你也別太羨慕或期望:我說過了,只要有老闆或金主願意花錢讓你一直做,
你不成仙也會成精的啦。只是大家有沒有同樣的際遇或自己如何操作現實生活與技術
兩者之間的取捨而已。這是一種長時間的累積,也需要你有決心的蹲在實際很基礎的
技術環境裡而已啊。(真的不要老是想高大尚或追求新科技、新技術...你一個人沒有
那麼多資源可以一年過一年的慢慢地耗的啦...你要想想你有老婆小孩家庭要養啊。)
----
在USB (其實也包括USB 轉RS232 等相關介面應用裡) PC 端的應用程式要跟作業系統
底層的驅動程式能夠正確的連結靠的就是 Device Interface GUID 。所以我們可以透過
系統安裝完驅動程式時,所給你的 Device Interface GUID,把它輸入到APP 軟體中:
我們就可以看到這隻 Keil WinUSB Test 程式就可以連到我們的 USB 裝置裡了(VID/PID)。
但這時候我們就要回頭看一下我們USB 裝置的韌體裡,到底支援那些 Vendor command
(或是說:Vendor Protocol 吧):
(上圖是我回到Windows XP 平台上,直接抓取二十年前的程式/韌體裡所傳輸內容的)
從上面來看:我們先用一個 40 開頭的 Bulk-out 來對我們USB 裝置下達一組命令:
48 01 ....
然後再透過一組 C0 開頭的 Bulk-in 來跟我們USB 裝置要求回傳一些訊息資料:
01 48 10 02 10 00 ...
這些都可以在 Keil WinUSB Test 程式的中間視窗裡,用手動輸入來Bulk out/Bulk in 命令的。
我們就可以從USB 分析儀裡看到結果的:
結果跟我們在 Windows XP 上的結果是一樣的。(只是Packet 數差很遠,那是因為我是用
手動分兩次下USB Vendor command 的....人手比不上電腦的!)
到此完全完成USB Vendor 驅動程式在 Win10 系統平台上的轉移了。
接下來就是要重新整理一下 USB ROM Emulator 在PC Host 端的更新與升級了。
(VC++ 6.0) 到 Visual Studio 20xx 平台了,這個就簡單多了,留給下集說明。
---
結語:你看我這篇技術文章的解說,就只花我不到兩、三天的時間就搞定了。
但我一定會對外說:這個工作要花個一、兩個月....為什麼?這個就跟網路上的
一個笑話故事一樣:一隻粉筆一塊錢,但畫在哪裡?是九萬九千九百九十九元。
要不然:當你上了年紀,還要整天耗在那裏裡解決、查看問題點嗎?
工程師的技術人生是要越累積、到老才能活得越輕鬆自在啊。
省下的時間與空檔、才是你這個老工程師的退休愜意生活啊。
至於關於最後硬體生意來說:其實我並不是很在乎啦。因為我知道現在在系統
應用上,真的很少會大量使用這種 EEPROM 了啦。我真的也不勉強客人市場
給我很大的回饋。重點還是我所說的:這也只不過回頭檢視一下:我工程師的
技術人生到底累積那些真的實際現實又可以真正變現過晚年生活的日子而已。
要真正的拿技術出來講,真的講不完的啦。
有興趣我也可以拿幾篇文章來講關於如何在PC Host 端寫個簡單卻又非常實際的
RS232(UART) 轉 USB 技術文章啊。這些都很基礎,卻又非常實用也非常現實
變現的東西,市面上的那些通俗的介面工具軟體,也都未必真的符合每個工程師
或公司所需的條件與環境的啦。技術不難~難的就是從系統整合到一個非常友善的
人機介面而已,越難、越複雜的工程技術,可以用平易近人的方式來接觸消費
使用者環境,才老闆眼中一個優秀的工程師啊。
下集再續。謝謝。
沒有留言:
張貼留言