摘要
一排整齊的高電平竟然被活生生的砸下一個缺口,是軟件Bug,硬件故障,信號干擾,還是另有主謀?一個撲朔迷離的案件正在拉開序幕……
案發現場
一日,在測試DATA線的信號時發現,一排整齊的3.3V高電平被活生生的砸下一個缺口,是誰如此膽大!當日的案發現場如下,隨后又發現旁邊的15根DATA線亦是如此,案情嚴重,刻不容緩!

圖1 異常波形
現場偵查
狄大人說:你要尋找蛛絲馬跡,得有專業的家伙,ZDS2000系列示波器有個欠幅觸發的功能,可以秒抓那個缺口,一試果不其然,如下:

圖2 異常波形展開
案情背景
3.3V信號夾雜著1.5V的成分,這確實很棘手。經明察暗訪發現,案件背景如下,三個芯片A,B,C共享同一數據總線DATA[0..15],而且測試三個芯片的管腳都是以上波形。

圖3 芯片拓撲圖
推理論斷
這到底是何方妖孽所為?于是邀請各路高手一同探討,一番激辯之后,出現以下猜測:
芯片A,B,C的電源域有問題 通信過程中受到干擾 芯片內部模塊損壞
……
經查明,電源域沒問題,第2、3點暫時無法排除。至此,案件依舊毫無頭緒,毫無進展……
線索追蹤
以上波形包含了AB,BC,AC間的通信數據,而且1.5V的占比比較小,或許是發生在某兩個芯片之間。經過進一步測試,有了重大發現!
1.5V的出現竟然對應著BC間傳輸使能信號(綠色波形)

圖4 BC使能信號
現在來看有兩種可能: A在干擾總線 A沒有干擾總線,是芯片B、C內部的問題
馬上斷開A的DATA0腳,上電卻無法啟動,看來還需另找線索了
柳暗花明 查找了一些資料,基本都是一些“一端拉高一端拉低”的說法,難道是B輸出高的同時C拉低總線了?要怎樣證明呢?
經過討論,要找出拉低總線的元兇,最好的辦法是看電流是否增大,依此思路,分別割斷ABC的DATA0腳,串線連通,結合CP8030A電流探頭和ZP1025S探頭,測試結果如下:
1、芯片A處DATA腳電壓、電流波形如下,電流約為30mA

圖5 A處電流
2、芯片B處DATA腳電壓、電流波形如下,電流幾乎為0

圖6 B處電流
3、芯片C處DATA腳電壓、電流波形如下,電流約為30mA

圖7 C處電流
結果表明,1.5V對應的位置其電流竟然達到30mA(遠遠超出正常IO口的電流值),且寬度與1.5V的寬度一致。
真相大白
結合電流鉗的箭頭標識,可進一步確定電流方向,如下:

圖8 電流方向
我們可以判定,30mA的電流方向是由C到A,BC間傳輸數據,A本不該插手,如今它卻給總線制造了30mA的異常電流,因此懷疑是A把總線拉低了。
后查看A芯片的固件,發現BC傳輸數據時,A竟然處于低電平狀態!
修改為高阻后,1.5V電平恢復到3.3V了,30mA的電流也消失不見,如下圖

圖9 電流驗證
至此,元兇已歸案,此案成功告破。
于是,三個芯片又能夠愉快的傳輸數據了
案后語
當初遇到這個問題時,硬件開發說芯片之間采用直連方式,不可能有問題,軟件開發查看代碼也沒有發現什么問題。看似一個無解的問題,顯然用常規方式難以解決,電壓波形不是萬能的,有時候結合電流來看,問題卻能迎刃而解,你覺得呢?
|