2019年9月25日 星期三

Hinet 網頁系列 --- USB DIY 系列(二) USB 系統軼事

(補充說明:平常假日有空就會載著"家犬"(牠真的是一條狗啦)去頭前溪旁的狗狗公園走走時,

會遇到某位在"聯x科"上班的菜鳥工程師,有時偶而會聽他講講上班的事,這讓我看到當年

年輕時的我,但一樣不變的是:整天加班做著同樣的 Debug 的工作,甚至有時假日還說:

"待會兒回去,還得趕回公司繼續 Debug ..."

是啊,以前我也曾經這樣子過啊。但人家是大公司,人多資源多,這樣子讓你可以慢慢地玩。

但對於小而美的小公司來說:可不能讓你這麼玩的。大公司做大事業。這是理所當然啊。

只是他說:在大公司做事,常常是搞不清楚自己做的事,到底在整個產品或市場到底是扮演

甚麼角色?是啊!大公司大,分工細,所以常常每個菜鳥工程師,都只是專注一個小小的

領域,而且這個領域可能不知道有多少人經手過,再流落到你手上維護讓你起步練功用的。

像這一篇文章中,我的經驗也是一個剛入行的菜鳥工程師,但我是在小公司哩,所以可以很快

的接觸到產品與市場之間第一手工程問題,大大的縮短學習成長經驗。

以下內容的技術不一定是最新或最重要的東西,更何況現在PC產業也不像以前了。

但文章所呈現的應該就是一個工程師如何透過第一線的實戰經驗,很快的建立與累積自己的

歷練與功力。)

>>>>>>>>>>>>>>>>
文章主題: USB 系統軼事
-----------------------------------------------------------------------------------------------------------------------------
我USB的文章就以這幾個USB的故事說起:來講幾個關於USB好玩的事情。

學USB 會不會很難?!

其實,做USB 的產品最討厭的地方,倒不是寫USB的 Firmware 。 

最討厭的地方:應該是相容性問題!!

        只要是做過USB的產品的工程師多多少少都會做過這些事情--解相容性的問題。 

也是他們心中最大的夢魘。

        USB 規格不是厚厚的一本嗎?(2.0 比1.1 厚得很多。)大家都不是照規格做,

怎麼會有相容性問題呢?

 或許現在USB產品很普遍了,大家也習以為常了,自然都不會留意到這件事。

現在的工程師也比較幸福多了,現在連做IC設計工程師,也不必花太多心思去看規格,

反正現在USB 2.0 IP(智權)的東西都買得到,當然也不會到處亂買,

都得看晶圓代工廠的臉色,調過沒問題才用;而且現在開IC設計公司,

弄一點錢或找個『富爸爸』就搞定這個問題了。

        但早期剛開始做時,是抱著規格書跟IC設計工程師,幾個人邊做邊學,是辛苦一點,

但學得就紮實多了。相對來說,碰到的問題就千奇百怪了。那時還Win98剛出來,

南橋有USB的也不多。最簡單的方法就是買張USB to PCI 卡。而這上面的IC就千奇百怪了。

        先講一個好玩的:我們都知道USB 規格都跟您說在資料傳輸過程中,

若是連續幾個1 或0 的話,USB 必須塞 Bit-Stuff。意思就說原本的資料長度有可能

因為您的資料內容而會所有變化,可怕的是:他會變長!然後USB 中的SOF(Start of Frame)

又是規定每 1 mSec一定會來一個!我在MP3 系統應用中解釋USB時有提到,

Bulk Transfer 會在SOF的間隔中,拼命的傳資料,因為若您能在SOF中塞進 15個乃至

更多 Bulk Transfer Packet, 那您就幾乎搶到近 1MB/Sec 傳輸速率了。

(USB規格號稱12 Mb/Sec, 那還要扣掉SOF ,PID,CRC 等token 的!)

結果大家都沒想到我上提的BitStuff 的問題,靠近SOF的最後一筆BULK 卻因頻寬用盡,

無法回 NAK 或ACK 時,就 主不知從,從也不知主!(那一Packet 資料就人間蒸發了!)

(補充說明:我們以前的經驗是在掃描器碰到所讀取的影像資料剛好是一張全白的紙,所以

它的影像資料剛好都是"0",所以在USB 傳輸過程中,它會不斷的塞入 BitStuff,會讓原本的

影像原始資料長度變長的,當然最終SIE 收進來的資料還是正常的,這問題是有可能會出在

USB SIE 的硬體邏輯架構裡。但往往是搞系統的人才會碰到的...)

兩邊就還傻傻的在那邊傳。這問題連要複製都很難耶~因為跟您傳的內容有關耶!

真是折騰人~這個USB IC 還當初股票火紅的威盛做的。不過,查一下規格書,

倒也沒解釋這種現象。 所以,死無對證!

        結論就是說:規格寫的一定對;沒寫的不代表他不對啊~~

        再來,用USB 最早最透徹的是誰?APPLE 電腦,iMac 七早八早就已經全USB介面了,

主機有USB Root Hub不稀奇,鍵盤上有USB Hub ,連螢幕的前前後後都有,

好像都不用錢似的。更討厭的是:他不是MicroSoft 作業系統。

完全跟人家玩不一樣的,存心玩要死我們這些工程師。做USB IC設計公司裡都會

多多少少買iMac 或iBook ,都不是好玩,都是為了測他的相容性。

APPLE 靠這樣賣電腦的啊?!

            當USB Device 插進Host 我們都知道,HOST 都會 Assign 一個Address 給USB Device 。

一般習慣上,(所謂習慣上,指的就是MicroSoft 啊!)Address 0 與 1 都會保留給

主機板的南橋用。然後,USB Device 會從 Address 2 排列起。它 iMac 就不是這樣

給您玩的,他偏偏給您來個亂數取樣,一下子給您個 192 或是 201 的!

然後,又因為他又給您用了一大推USb Hub 在上面,意思說,先天上您的USB 裝置

在串列上,已經有一大堆人,排在您前面了。您要怎麼死的都不知道。

我們曾經碰過,iMac 螢幕上前後USB Hub 是不一樣呢。結果相容性一個會過,

另一個卻不會過!傷腦筋呢~~人家APPLE 又不會鳥您,最後我們只好跟會客戶解釋,

萬一,若有終端使用者碰到問題時,請他麻煩照『正常體位』來,請他插前面。

(對不起,有點顏色!)

        我事後想,或許APPLE 也會想到類似的問題,才會前前後後提供這麼多 USB Hub ,

又擔心早期作Hub 的品質沒那麼好,只好前後不一樣的,至少不會全掛了吧!

        不過,歷經這幾年下來~市場的淘汰,或是說因為IC的IP(智權的成熟度的關係),

其實,現在USB IC要出這種奇奇怪怪的問題應該很少見了,但問題是否因而減少呢?!

結果,還有另一些延伸問題會跑到PC 軟體這邊。就是軟體相容性問題!!

        我想這是最困擾USB團隊的問題,注意喔~我講的是USB團隊喔。因為USB要寫韌體

也要驅動程式也要應用軟體,(有時還包括測試工程師。)這些都不是一兩個人可以

完成的。

        首先是PC 端的驅動程式,寫驅動程式可不是我們一般拿VC++或VB來寫的~

雖然有許多驅動程式套裝軟體,但讓工程師最愛的,應該還是MicroSoft 的DDK 。

(DDK:Driver Development Kits),(補充說明:現在微軟稱這個東西為 WDK, 

Windows Driver Kits,但不變的是一樣有不同的作業系統平台的不同版本啊。)

可能跟他招牌有關:MicroSoft 。

另外是,驅動程式是躲在一般人看不到的地方,出問題也最難解決,

有時還不小心來個Blue Screen ,連OS 都死當。

以我的經驗來說:整個作USB的產品來說:最辛苦的就屬這一項工程師。

您知道嗎?DDK 還分 98DDK、2000DDK及 XP DDK 等。什麼意思?

代表寫驅動程式要考慮跨不同OS 平台問題。作產品,您可不能說:我只支援XP 而已~

您想,連微軟都得分98DDK 、2000DDK 您就知道連微軟本身都搞不太定跨平台

驅動程式的問題,您覺得公司內那個小小工程師如何應付得了呢?!

        所以,微軟也不希望客戶太多抱怨,所以,現在USB 盡量以Class 來解決這個問題,

但畢竟Class 方式也只能盡量涵蓋多一點運用或向前相容。但對一些DIY族來說,

就是最痛苦了,因為不是主流,所以,也最會被忽略。如果,您只是想用傳統DIY

觀念來玩USB的話,您可要三思一下,對您來說:最大的挑戰絕對不是來自USB 

控制晶片,而是軟體問題。

 若您是要作產品的話~那就得有更大的決心,因為還有Mac OS 中的USB驅動程式。

據我所知,會寫Mac OS 中的驅動程式者,都快變成需要保護的稀有動物了。

有些公司連養都不一定想養~就另尋外包公司解決。

 而這些不管是硬體或軟體 ,相容性的問題也都一直在困擾著這些系統工程師們,

每每看到做USB 產品的公司裡,那一大排的個人電腦,上面標示著不同的語系與

不同版本的作業系統,甚至乃至不同品牌的主機板。

還一副生人莫近的警告牌時就心有戚戚焉~~,

結果呢!?下次,客戶 Call 您說,USB 相容性有問題時,搞了老半天搞不定,

只好硬著頭皮跟客戶說:您這台電腦能不能借我個幾天?! 

辛辛苦苦的把他雙手捧回公司。真的,做相容性的電腦多一台都不嫌少啊!!

~~祝福作USB系統的工程師們 幸福美滿,長命百歲!

沒有留言:

張貼留言