各種電路故障可能導(dǎo)致JTAG鏈錯誤。本文描述了最常見的故障以及如何使用JTAG Chain Debugger找到問題的源頭。
JTAG Chain Debugger的“Check Chain”命令執(zhí)行以下序列:
1. 計算鏈中的設(shè)備數(shù)量。
2. 讀取每個設(shè)備的ID代碼,并在庫中搜索匹配的BSDL文件。
3. 測量鏈中指令寄存器的總長度,并根據(jù)BSDL文件中的數(shù)據(jù)檢查預(yù)期的總長度。
4. 對鏈中的每個設(shè)備,測量其采樣寄存器長度,并與BSDL文件中聲明的值進(jìn)行比較。
通過點擊JTAG Chain Debugger屏幕底部的“Check Chain”按鈕可以運行此測試:

圖1 – 從JTAG Chain Debugger運行Check Chain
JTAG鏈的常見問題有:
(1) 外部信號之一(TDI、TMS、TCK或TDO)開路或短路,如圖2中的錯誤1和4所示
(2) 公共信號之一(TMS或TCK)僅對一個設(shè)備開路,如下所示錯誤2。
(3) 設(shè)備之間的一個鏈接斷開,如錯誤3所示。
(4) 一個設(shè)備處于復(fù)位狀態(tài),如錯誤5所示。這是最常見的問題。

圖2 – 三設(shè)備JTAG鏈中的電路故障
如果存在故障1,所有設(shè)備仍將正常工作,因此在Check Chain測試期間可以讀取到芯片的ID代碼。但是,測試還通過將所有設(shè)備置于BYPASS模式,將已知數(shù)據(jù)模式輸入鏈中,并等待該模式從最后一個TDO輸出,來計算鏈中的設(shè)備數(shù)量。故障1將阻止這種情況發(fā)生,因此將報告無法計算鏈中的設(shè)備數(shù)量,而會顯示它們的ID代碼。
如果在設(shè)備上存在故障2(即一個IC缺少TCK和/或TMS信號),則無法從其TDO引腳輸出數(shù)據(jù)。如果最后一個設(shè)備出現(xiàn)此故障,鏈中將看不到任何數(shù)據(jù)。如果在鏈中的早期設(shè)備發(fā)生此故障,將從最后的TDO讀取數(shù)據(jù),因此受影響設(shè)備之后的設(shè)備的ID代碼仍將正確讀取;受影響設(shè)備及其之前鏈上的設(shè)備的ID代碼將缺失。此外,因為TDI上的數(shù)據(jù)無法通過整個鏈進(jìn)行時鐘同步,Check Chain測試將報告無法計算設(shè)備數(shù)量。
如果存在故障3,設(shè)備之間將無法傳輸數(shù)據(jù),但是這可以正確讀取斷開點后設(shè)備的ID代碼。因此,讀取的ID代碼數(shù)量將與板上的設(shè)備數(shù)量不匹配。同樣,因為這阻止了數(shù)據(jù)通過整個鏈傳遞,Check Chain測試將會報告無法計算設(shè)備數(shù)量。
如果存在故障4,其效果將如同鏈中的最后一個設(shè)備沒有TMS或TCK信號,處于復(fù)位狀態(tài),或需要測試復(fù)位序列但未正確應(yīng)用。Check Chain測試將報告沒有有效數(shù)據(jù)。
如果設(shè)備存在故障5,即設(shè)備處于復(fù)位狀態(tài)(或所需的測試復(fù)位序列未正確應(yīng)用),它將無法驅(qū)動其TDO引腳。如果帶有故障的設(shè)備是鏈中的最后一個設(shè)備,這意味著無法從鏈中讀取數(shù)據(jù)。如果受影響的設(shè)備在鏈中較早,測試將能夠讀取處于復(fù)位狀態(tài)的設(shè)備之后的設(shè)備的ID代碼。在任一情況下,數(shù)據(jù)都無法通過系統(tǒng)完全進(jìn)行時鐘同步,這意味著Check Chain測試還將報告無法計算設(shè)備數(shù)量。
示例
這些板級故障可以通過運行Check Chain測試來發(fā)現(xiàn)。下面將使用具有兩個JTAG芯片的鏈的示例,描述測試的可能結(jié)果以及它們與這些不同故障的關(guān)系。
示例1:所有ID代碼讀取但設(shè)備數(shù)量未計數(shù)

因為兩個設(shè)備的ID代碼都正確讀取了,可以得出以下結(jié)論:
兩個設(shè)備的TCK和TMS功能正常(即不是故障2)。
設(shè)備之間的連接完好(即不是故障3)。
最后一個TDO連接正確(即沒有故障4)。
設(shè)備未處于復(fù)位狀態(tài)(即不是故障5)。
設(shè)備的數(shù)量是通過將已知序列輸入第一個設(shè)備的TDI引腳來計數(shù)的。因為XJTAG無法計算設(shè)備數(shù)量,結(jié)論是TDI信號沒有到達(dá)鏈中的第一個設(shè)備。
示例2:某些ID代碼缺失且設(shè)備數(shù)量未計數(shù)

因為讀取了部分ID代碼,最后一個設(shè)備必須正常工作:
最后一個設(shè)備的TCK和TMS功能正常(即最后一個設(shè)備不是故障2)。
最后一個TDO連接正確(即沒有故障4)。
鏈中的最后一個設(shè)備未處于復(fù)位狀態(tài)(即最后一個設(shè)備不是故障5)。
故障必須位于第一個設(shè)備或兩個設(shè)備之間的連接上,可能由以下問題之一引起:
盡管第二個設(shè)備的TCK和TMS功能正常,但第一個設(shè)備的其中一個或兩個信號開路。
兩個設(shè)備未連接在一起(故障3)。
鏈中的第一個設(shè)備處于復(fù)位狀態(tài)或需要測試復(fù)位序列但未正確應(yīng)用(故障5)。
示例3:未返回有效數(shù)據(jù)

在此示例中,沒有從TDO讀取到有效數(shù)據(jù)。這可能是由以下各種問題引起的:
連接到最后一個設(shè)備的TMS和/或TCK信號不正確(故障2)。
最后一個TDO連接不正確(故障4)。
鏈中的最后一個設(shè)備處于復(fù)位狀態(tài)(故障5),或者需要測試復(fù)位序列但未正確應(yīng)用。
手動調(diào)試
為了幫助精確定位問題的原因,可以通過從“Check Chain”下拉菜單點擊“Scan ID Codes”來執(zhí)行JTAG重置后跟讀取ID代碼的連續(xù)循環(huán)。將JTAG Chain Debugger置于這種模式會使數(shù)據(jù)持續(xù)通過鏈流動,并允許使用示波器來幫助定位問題的源頭。