作者:merlin2007 當工程師的都知道“debug”這個詞,意思是“排除故障”。英文的字面意思是“抓臭蟲”。但我覺得這不太貼切。臭蟲雖然討厭,但大不了就是咬一口,叮個包,總歸還要不了命。而且有時就在表面,抓起來并不困難?稍诠こ淘O計中要是留下個隱患,有時可要出大亂子。從這個意義上講,說是“捉鬼”可能更恰當。鬼不但嚇人,還可能要命啊。 從事硬件設計多年,捉的鬼不少了。本來嘛,硬件工程師的工作無非是倆部分:前期的工程設計,以及實驗室里或現(xiàn)場的故障排除。而每個故障的表現(xiàn)盡管千奇百怪,但原因無外乎:設計錯誤,元器件失效,使用不當。對新產(chǎn)品設計而言,則主要在前兩種。硬件工程師排除的自然是硬件故障,然而事情有時并非如此簡單。在今天這樣高度集成的電子設備中,這個界限越來越模糊。做個工程師,必須拳打腳踢,那樣都不能含糊。要不然,麻煩就要上身。 說說我的一次捉鬼的經(jīng)歷吧。 遇見鬼 在C公司工作期間,一直做大型路由器接口模塊的硬件設計。大約是在04年開始的一個項目用到了QDR靜態(tài)存儲器。當時這款存儲器還屬新品,生產(chǎn)廠家不多。開始時只有CYPRESS一家的可用。但C公司的產(chǎn)品設計要求是:除非功能特殊的器件,一般器件必須要有倆個以上的供應商,以防止因供應商的原因造成器件短缺影響生產(chǎn)。對存儲器這種常規(guī)器件更要如此。于是一邊設計一邊要找這種存儲器的替代廠家。最后,在設計基本完成時,又從K公司找到了同樣的器件。至此全部器件的選型都滿足了設計要求。公司器件數(shù)據(jù)庫將這兩家的器件列入同一器件編號下,表示可以相互通用。因當時K公司還不能提供器件樣品,所以產(chǎn)品的測試只用了CYPRESS的器件。完成設計,樣機制作,實驗室調(diào)機,通過測試,為軟件團隊的軟件開發(fā)提供支持,指導試生產(chǎn),。。。,一系列的辛苦不必再說。最終,產(chǎn)品順利投產(chǎn)。公司的產(chǎn)品目錄上又多了一個,每年公司巨額的收入賬上,又加入了新的一筆。。。。而我又轉(zhuǎn)入了下一個輪回,開始了新項目的設計,命啊。。。 大約兩年后,就在我已經(jīng)漸漸淡忘了這個項目時,某一天,一個負責新品生產(chǎn)的工程師突然找到我,通報了一個嚴重情況:兩年前投產(chǎn)的那個產(chǎn)品在近期的生產(chǎn)中突然發(fā)現(xiàn)大批的成品不能通過測試。問題全部集中在QDR存儲器上。開始時工廠試圖通過更換器件來解決問題但是無效。更可怕的是:這一故障情況不穩(wěn)定,同一塊板子,這次測試通過了,下次重復再測可能就通不過。這是最讓搞硬件的肝兒顫的“軟故障”。 聽完情況介紹,哥們的冷汗就下來了。通常情況下,我們在投產(chǎn)前已經(jīng)對工廠的技術人員進行了培訓,常見的問題都有處理的措施。只有在無法解決的情況下才會聯(lián)系我們,F(xiàn)在因為這個故障已經(jīng)造成停產(chǎn),大批的成品堆在那無法出廠。更為嚴重的是幾年來已有上千件成品交付用戶使用,很多現(xiàn)在處于運行狀態(tài)。如果這些已經(jīng)交付的產(chǎn)品中也存在同樣問題,在使用中發(fā)生故障,造成用戶數(shù)據(jù)流中斷,停機,用戶要求返修,退貨,這麻煩可就大了去了。別說我這個小小的工程師,上面幾級的頭頭腦腦都要有好看的。而事實也證明了我的猜想, 很快部門經(jīng)理和高一級的主管就打電話或發(fā)來電郵詢問情況,同時再三強調(diào):這是目前壓倒一切的中心任務,必須盡快破案。ê呛牵斎徊皇窃,但意思是對的,聽著有點兒像這兩天公安部急著抓殺人犯的口氣,這中外當頭兒都差不多)。 當時的感覺就是:遇見鬼了! 抓鬼 等一驚一炸的功夫兒過去后,我冷靜下來,開始思考各種可能性。產(chǎn)品已經(jīng)投產(chǎn)兩年,一直沒聽說有質(zhì)量問題。突然暴出這個問題,肯定哪有了變化。于是我找到新品工程師仔細的詢問了情況,果然發(fā)現(xiàn)了線索:該產(chǎn)品在投產(chǎn)后一直使用CYPRESS的QDR存儲器,一切正常。前不久K公司的存儲器開始供貨,所以近期的生產(chǎn)使用的是K公司的器件。而問題就是在換器件后爆發(fā)的。很明顯,問題與K公司器件的使用有直接關系。 想到這兒我心里有了底:有目標就好辦!于是我要求馬上從工廠的測試通不過的板子中給我發(fā)5個過來,用來查找問題。與此同時,我還得恢復所需的測試設備。時間已經(jīng)過去了兩年,原來的測試平臺或是已經(jīng)拆除,或是轉(zhuǎn)做它用,現(xiàn)在再恢復起來又是一番辛苦,自然是不在話下。 很快工廠發(fā)來的板子到了。放到系統(tǒng)上一測,果然,存儲器的測試不斷出錯,而且出錯的地址和數(shù)據(jù)不固定,完全是隨機狀態(tài)。按照存儲器的技術指標反復核對了板子上的器件時間參數(shù)狀態(tài),沒有發(fā)現(xiàn)問題。這說明問題不是由于時間關系計算錯誤引起的。這讓我松了一口氣。如果是這種問題,要解決就只能重新做板子了。那我基本上就死定了。這種隨機狀態(tài)的錯誤讓我感覺,這并不是由于器件的物理故障所引起,而更像工作狀態(tài)混亂造成的。我從廠家網(wǎng)站上下載了最新版本的技術文件,查找其中任何可能導致器件工作不穩(wěn)定的原因。終于在有關數(shù)字鎖相環(huán)(DLL)的內(nèi)容中,發(fā)現(xiàn)了一段描述: 1. 必須在控制線DOFF為低電平情況下加電。 2. 器件核心部分必須先于接口部分加電。 3. 待電源電壓及時鐘穩(wěn)定后再恢復DOFF為高電平。 4. 如果做不到上面三條,則必須將輸入時鐘中斷30NS后再恢復。所有這些都是為了保證DLL的正常工作。 看了這段內(nèi)容讓我很興奮,因為我清楚地記得以前的技術文件沒有這些要求。我有個習慣,每開始一個項目設計,便將有關的技術文件放在一個獨立的文件夾里。有問題抓過來一翻很方便。找到那個項目的文件夾,翻到原來保存的老版本的K公司存儲器技術文件,果然找不到這部分內(nèi)容,這就對了。在初始設計時,電源時序是個重要內(nèi)容。所有的器件都核對過是否對此有要求。以便分配相應的供電線路。 不過即使如此,恐怕也很難按此要求辦,該存儲器的兩路電源同為1.8V, 總不能為了兩個存儲器再多加一路電源和時序控制吧,那也太不經(jīng)濟了。 如果是這樣,很有可能就不選它的器件了,因為同樣的產(chǎn)品,CYPRESS并沒有這些要求。文件中的這段描述,更像是在器件出來后發(fā)現(xiàn)了DLL的初始穩(wěn)定性的問題而采取的一種補救措施。DLL是其內(nèi)部工作的時鐘源,如果它工作不穩(wěn)定,其余電路的工作無從談起,F(xiàn)在雖然還不能最后肯定,但直覺告訴我:它就是那個鬼! |