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