中國電子科技集團公司第三十研究所 楊小鈳
產品中試過程中離不開對樣機的調試檢測,從而達到對產品進行優化的目的。本文針對一款2.5G SDH 信道產品在進行調試過程中出現的開機啟動故障進行排查分析,通過循序漸進的方式最終找出故障原因并開展優化設計,將產品研發中的問題扼殺在量產前。通過該文,可以了解電子產品故障排除的基本思路。
本文通過對一臺2.5G SDH 信道傳輸設備樣機在測試過程中出現的開機啟動故障進行分析,對整個故障排查過程進行描述,總結出產品調試、維修的一些基本思路和方法。
設備故障排除的關鍵是如何準確定位故障點,只有準確定位故障點才能進行硬件維修或軟件升級。
故障定位一般應遵循先外部,后內部;先整體,后局部的原則,故障排查思路如圖1 所示。

圖1 故障排查思路示意圖Fig.1 Schematic diagram of troubleshooting ideas
(1)先外部,后內部。在定位故障時,應首先排除設備外部的可能因素,如線纜、連接器、供電、接地、指示燈等;如果排除外部因素,就再考慮內部因素,如內部線纜,機內各模塊。
(2)先整體,后局部。對于設備故障來說,出現故障現象后,不要盲目進行維修處理,先分析故障現象,查看外部和內部指示燈的狀態,分析可能導致故障現象的因素,最后對可能導致設備故障的點進行逐一排查。
在對多臺2.5G SDH 信道傳輸設備測試運行后重啟,其中一臺設備無法正常啟動。設備無法完成開機啟動流程,打開設備機蓋,發現其中一個接口FPGA 指示燈未點亮,表明接口FPGA 程序未成功加載;該接口FPGA 程序需要在設備啟動過程中,通過主控板加載到該FPGA中,FPGA 才能正常工作。
產品設計框圖及數據業務流如圖2 所示。數據流通過接收端光模塊進入線路處理FPGA,接收端線路處理FPGA 將數據解析后送到接口FPGA,接口FPGA 將數據送入運算FPGA 完成運輸后送到輸出段線路處理FPGA 進行封裝,最后送入發送端光模塊。

圖2 設計框圖及業務流示意圖Fig.2 Design block diagram and business flow diagram
維修檢測工具列表如表1 所示。

表1 維修工具列表Tab.1 List of maintenance tools
本節主要介紹整個故障分析及排查過程,故障定位流程如圖3 所示。

圖3 故障定位流程示意圖Fig.3 Schematic diagram of fault location process
故障定位第一步先檢查供電是否有問題。用萬用表測試外部電源輸入220V 電壓、輸出直流12V 電壓、主板上的各電壓測試點和FPGA 供電的2.5V、1.2V 以及FPGA 核電壓均未發現異常。由此表明,主板供電正常且無電壓短路點。設備各模塊及供電示意圖如圖4 所示。

圖4 設備各模塊及供電示意圖Fig.4 Schematic diagram of each module and power supply of the equipment
FPGA 不能正常工作,第二個需要懷疑的是時鐘信號。通過對該FPGA 外圍時鐘電路進行了檢測,用萬用表測試有源晶振的供電端、接地端,用示波器測試晶振的信號輸出端,排除晶振工作異常。排除了晶振異常后,繼續檢測時鐘信號通路是否異常,通過示波器檢測后,發現進入FPGA 的時鐘信號未見異常。
(1)FPGA 程序加載過程故障檢測。由于該故障現象表現是接口FPGA 程序未進行加載,在排除供電和時鐘信號故障后,就應該檢測程序加載通道是否存在問題。按照PCB 原理圖及技術資料檢測主控板與接口板之間的FGPA 加載通道,發現該通道上的兩個電阻焊接不正,電阻一邊焊盤僅與焊盤少許接觸,另一端則超出焊盤,整個電阻順著焊盤的方向移動了一大段距離。檢測該電阻的阻值,發現電阻的阻值正常,為了保證可靠性,將兩只電阻進行了重新焊接,將電阻焊于焊盤內。雖然在排查過程中發現了一個焊接問題,但這并不是導致設備無法正常啟動的真正原因。整個下載通道未發現異常。
(2)FPGA 虛焊檢查。完成上述步驟后,只能將目標集中到FPGA 本身。首先懷疑虛焊,通過二維X 光機進行檢查,按照經驗未有明顯的虛焊引腳,受限于二維X 光機的限制,并不能完全呈現BGA 各焊點的焊接情況,只能按照工作經驗來排除BGA 焊接虛焊的問題,通過X 光機并為發現明顯焊接異常點。
(3)FPGA 自身故障檢查。通過上述檢測后,故障現象是由FPGA 自身故障引入的概率較高。由于受限于BGA 測試困難的問題,只能測試印制板上有限測試點,通過示波器輸出顯示,各測試點信號均無明顯異常,但這并不能排除FPGA 本身故障。為了不將問題擴大化,筆者繼續通過其他途徑進行排查,暫時先不考慮更換FPGA芯片。
(4)軟件啟動流程檢查。由于暫時不更換FPGA 芯片,下一步就從軟件著手。
主控板是否向FPGA 加載程序控制是通過主控板上SPI FLASH 一段存儲標志位來確定。通過斷點運行,讀取SPI FLASH 的具體數值,發現該段地址的數據為全F。可以確定的是,該段SPI FLASH 標志位已被改寫,導致主控板無法向接口FPGA 加載程序。
通過上述系列檢測后,定位該故障應為軟件設計BUG 導致。導致標志位被修改。后續工作就是對軟件BUG 的分析、修正。
(5)軟件啟動程序跟蹤。通過對程序進行斷點跟蹤,主控板SPI FLASH 中關于FPGA 程序加載的標志位始終為全F。該標志位應該是在啟動前就已被置為全F。
(6)SPI FLASH 加載標志位修改函數分析。在程序中修改該標志位的函數僅出現有一處;通過該函數代碼進行分析,發現在兩端設備進行同步的過程中,會先擦除該程序加載標志位,然后將新的同步信息寫入該SPI FLASH 標志位。
(7)標志位被置為全F 原因分析。由于代碼中只有一處修改SPI FLASH 中程序加載標志位,可能導致該標志位被置為全F 的原因有3 個:(1)程序運行過程中,程序對其他標志位的操作越界;如果存在此種情況,該標志位應為一個隨機值或固定值,而不會是全F。出現全F 的情況應是被人為寫入,或人為擦除。(2)開關機時的電流或電壓浪涌導致SPI FLASH 數據損壞;如果是電流、電壓浪涌導致數據損壞,那將不會是固定標志位損壞,應該是隨機出現或SPI FLASH 損壞,而其數值也可能是隨機數。實際現象是SPI FLASH 中固定位出現的全F。因此,可以排除浪涌導致SPI FLASH 數值錯誤。(3)對設備的某個操作導致程序對該標志位進行了操作;通過操作人員對操作過程描述,最終確定了該標志位被寫為全F 的原因——設備在某個特定時間關機,導致程序會擦除該標志位,將該標志位置為全F。兩端信道傳輸設備進行鏈路信號同步后,會先擦除SPI FLASH 中FPGA 程序加載標志位,然后再將正確信息寫入FLASH。操作人員在鏈路信號同步后,未等待上層協議同步完成就關機,此時標志位剛擦除結束,還未寫入正確的標志位信息,導致下次啟動時,該標志位為全F。
為了明確是否上述原因導致故障,將擦除標志位和復寫標志之間加入時延進行測試,上述情況被復現。通過上述分析,最終定位該問題為軟件設計BUG 導致程序在某些特殊情況下不能正常工作。
論文描述了一臺具體設備的故障排除過程,最終準確定位故障點,修復軟件BUG,使設備能夠穩定工作,對于調試維修人員來說,如何準確定位故障點是維修的關鍵。在檢測故障設備時,切忌盲目、切忌擴大問題、切忌維修帶來次生問題。
引用
[1] 陰家龍.無線電調試工實訓教程[M].北京:電子工業出版社, 2016.
[2] Jobn Catsoulis.嵌入式硬件設計[M].北京:中國電力出版社, 2007.
[3] 張小勇,郭文龍.淺談SDH系統故障定位及排除方法[J].信息化建設,2011(5):54-55.
[4] 許偉,林彩娥.鳥哥的Linux私房菜[M].北京:人民郵電出版社, 2009.