一個價值百萬的BUG

背景介紹

最近幫人友情解決了某個PCBA廠家ATE設備的BUG,這個BUG導致DUT硬件板卡ADC數據轉換結果不穩定甚至不準確。這個頑疾已經存在9個年頭,爲此這條產線多配置了一個測試員,專門負責這個BUG的調試工作,每當DUT的ADC測試結果異常時,用熱風槍加熱一下,重新測試,大概率能夠通過功能測試,然後貼上檢驗合格的標籤,方能送往包裝區並出廠。如果加熱這招不管用,那就只能懷疑是ADC器件本身的問題,測試員需要手工更換ADC芯片並重新測試。手氣差的時候,一塊PCBA測試可能一天都搞不定,費時費力費錢。由於這塊PCBA年用量較大(約100k),每塊DUT有2~4塊ADC芯片,判定失效的器件數也是挺可觀的。一個專用測試員將近10年的人力成本,加上調試佔用機臺的設備成本以及各種耗材,粗略估計這個BUG價值百萬一點也不爲過。
一般來說,大型的PCBA廠家都配置有自己的ATE開發團隊,這家公司也有,而且研發水平也還不錯,配置有項目經理、機械工程師、軟件工程師和測試技師等。不巧的是,本地ATE開發團隊成立時間不長,工廠的大部分ATE裝置都是從國外轉移過來的,簡單交接後,總部的ATE開發團隊居然就地解散了。大量老舊的ATE裝置的維護更新只能依靠本地工程師,本來技術還沒喫透,問題又多,一時間測試車間雞飛狗跳、熱鬧非凡。我這個悲催的哥們帶着幾個小弟負責這一堆ATE設備的維護,爲此大傷腦筋,簡直夜不能寐。某次宵夜燒烤,照例又是喋喋不休的吐槽,然後給大夥每人一份他的簡歷。我不由得惻隱之心一動,順口安慰道:彆着急,把資料發過來,我幫你看看吧。觥籌交錯間,我看到那小子嘿嘿的壞笑着,心想這次怕是上了他的賊船。
人的第一感覺往往是對的,我果然接了個燙手的山芋。花了大半年時候斷斷續續幫忙修復了3個類似的BUG,連續搭進去了好幾個週末,這些時間我本來可以陪娃逛超市打遊戲,增進親子感情的!現在想來,真是腸子都要悔青。花點時間記下來吧,就當買了個教訓:不要輕易許諾!不要輕易許諾!不要輕易許諾!

復現故障

毫不誇張的講,復現故障是排除故障過程中最爲關鍵的一步,特別是如果能在實驗室或者人爲設定的條件下復現,那就太完美了。因爲故障如果能夠被複現的話,那就可以輕易的收集到故障發生時的各種狀態數據,從中找出異常,進而推斷錯誤產生的真正原因。此外,我們還可以用來驗證後續的故障修復。不幸的是,這個BUG就像某些精神病人一樣間歇性發作,PCBA良品率時高時低,毫無規律;幸運的是,某個PCBA一旦出現故障,多次測試復現的概率會很大。不過由於距離的關係,我也懶得往現場跑;ATE機臺笨重且昂貴,也不太方便運到我家。於是我寫了個故障收集的腳本,扔給測試工程師跑了一堆數據,然後拿回來慢慢分析。

瞭解系統

ATE機臺是一個Agilent(老東家哦,電子測試測量部門已經是Keysight啦)的測試機櫃,裏面有多個測試儀表如電源\信號源\示波器\頻譜儀等,通過各種線纜連接到這款PCBA的測試治具。機臺具體結構無非就是結構件+電源+總線+儀器儀表,而且相當的不便宜。測量儀器儀表價格不菲,一旦購置就成了固定資產,而且每年都需要校準維護,對企業來說也是一筆不小的開支。很多玩波的初創公司買不起高端儀表,只好租借或者直接去Keysight的開放實驗室蹭飯,也是一個無奈的選擇。
話題扯的有點遠了,在定位問題前,我花了些時間學習這塊PCBA的測試治具。系統結構圖大致如下圖,包括各種電源和儀表提供信號激勵\接收反饋、一塊DSP接口轉接卡和上位機,其中DUT和DSP轉接卡通過PCI通信,上位機和接口轉接卡通過串口通信,測試腳本運行在上位機。
在這裏插入圖片描述

定位問題

於是乎請現場工程師用示波器查看ADC芯片SPI通信接口的波形,果然發現了問題所在:FPGA似乎沒有檢測BUSY信號是否有效,在ADC轉換未完成之前,可能就開始讀取測試結果。有興趣的朋友可以讀一下AD7663的文檔,基本的轉換時序圖如下。CNVST的每次拉低都會觸發一次ADC轉換 --> BUSY隨後拉高,表示正在進行模數轉換 --> BUSY電平變低,ADC轉換結果可有效讀出,同時進入採樣狀態。對比示波器觀測到的正常工作和故障產生時採數波形圖,可以很清楚的看到FPGA只是在CNVST拉低後固定延時一段時間,然後就開始讀ADC轉換結果。當ADC芯片品控不好或者受環境溫度影響較大時,並不能嚴格滿足文檔上的時序指標,FPGA讀到的ADC結果偶爾是錯誤的,良品率就變低。
在這裏插入圖片描述
在這裏插入圖片描述

解決辦法

找到AD7663接口程序,在狀態機上添加對BUSY信號判斷的狀態,問題基本就解決了。小批量測試後,問題不再復現。竊喜,以爲大功告成。殊不知大坑還在後面等着。上位機和DSP之間系統地址定義不一致的問題,FPGA管腳驅動能力弱帶來的問題,甚至硬件板卡串擾的問題,折騰了好些時間。Mark一下好了,不一一絮絮叨叨。下回有時間分析下Bug修復前後的FPGA代碼,應該也蠻有意思的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章