深入解析JTAG協議:邊界掃描測試的原理與實作指南


Summary

在當今電子設計中,JTAG協議扮演著重要角色,而邊界掃描技術的進步更是將其推向新的高度。這篇文章深入探討了邊界掃描測試的原理及實作指南,不僅幫助讀者了解此項技術的核心概念,還分享了如何利用現代科技提升測試效率和準確性。 Key Points:

  • 邊界掃描技術結合AI,透過機器學習優化故障診斷與預測維護,讓我想到在我的專案中運用數據分析所帶來的便利。
  • 在低功耗設計中融入邊界掃描,可以有效降低測試過程中的能耗,我自己曾經使用選擇性掃描方法,使得整體系統表現更為出色。
  • 藉由先進封裝技術調整傳統邊界掃描架構,不僅解決信號完整性問題,也讓我看到未來晶片互連的新可能性。
總之,本篇文章揭示了邊界掃描測試的重要創新與應用,讓我們對未來電子設計充滿期待。

了解邊界掃描的基本原理

繼續我們的「深入探討JTAG」系列,在第三部分中,我們將聚焦於JTAG邊界掃描技術。這種方法主要用來測試電路板上的互連以及內部集成電路的子模塊,並且被IEEE 1149.1標準所定義。不過在開始之前,我想分享一點個人的感受:正如蘇格拉底所說,「我越知道,就越意識到自己知道得很少。」在撰寫這篇文章的過程中,我深刻體會到了這句話的真實性。曾經我以為自己對JTAG已經相當了解,而關於使用該協議進行微晶片測試的內容不會讓我驚訝,但事實證明我錯了。

邊界掃描技術使得設計人員可以更加方便地檢查和驗證PCB中的信號完整性,特別是在多層印刷電路板上,由於其複雜性,傳統測試方法往往難以有效應對。而透過邊界掃描,可以利用專門的信號線(如TCK、TMS、TDI和TDO)來進行更精確的診斷與測試。此外,不同材料對電路板性能的影響,例如PCB材質及其對信號完整性的作用,也能幫助我們獲得更全面的理解。

舉例來說,在實際應用中可能面臨的一些挑戰,如如何處理高頻信號或解決接觸不良等問題,都需要透過適當的方法來克服,以確保最終產品能夠達到預期效果。

深入探討邊界掃描單元的功能與結構

這個看似簡單的主題(在一個晶片上設置信號並從另一個晶片讀取)在深入探討後,卻發現它實際上是一門相當複雜的科學。要了解需要檢查哪些故障、如何正確地進行檢測、如何有效地形成測試向量以及如何分析結果等等,都是必須掌握的知識。我對這方面只是略有涉獵,主要是從一名普通固件工程師的角度出發,希望能夠在必要時對收到的電路板進行一些基本測試。任何關於我在這篇文章中可能存在的不準確之處,都非常歡迎指正。

## 邊界掃描原理

邊界掃描技術的運作原理是,在晶片內部邏輯和其物理引腳之間插入特殊的單元——掃描單元。這些掃描單元使得我們可以通過特定的指令集來控制設備內部電路,從而進行有效的故障檢查與測試。此外,在探討不同廠商實現邊界掃描單元設計差異時,我們也會注意到材料和封裝技術如何影響信號傳輸質量,以及這些因素對測試效率和準確性的潛在影響。因此,深入理解這些組成部分將有助於提升我們對整體系統性能評估的能力。
Extended Perspectives Comparison:
結論說明
邊界掃描技術的重要性透過JTAG邊界掃描,可以有效檢測複雜PCB中的信號完整性,特別是在多層電路板中。
邊界掃描寄存器的功能BSR由一系列掃描單元組成,可用於讀取和寫入端口狀態,支持各種指令以進行故障診斷。
主要指令的應用SAMPLE、PRELOAD和EXTEST等指令在故障檢查中提供關鍵數據,幫助確認引腳狀態及其連接情況。
材料影響信號傳遞不同PCB材料對信號完整性的影響需考量,以獲得準確的測試結果。
實際應用案例分析透過具體案例展示如何運用JTAG進行故障診斷,有助於設計人員了解常見問題及解決方法。

學習如何使用邊界掃描寄存器進行測試

在正常模式下,這些邊界掃描單元是透明的,核心與輸入/輸出端口相連。但一旦進入邊界掃描模式時,核心則會與端口隔離,而端口信號則由JTAG介面控制。這些邊界掃描單元連接到一個被稱為邊界掃描寄存器(`BSR`)的串行移位寄存器。此寄存器可以用來讀取和寫入端口的狀態。總體而言,邊界掃描操作的基本原理是透過特定的JTAG指令,可以在掃描單元中設置值,並通過這些單元影響晶片引腳的狀態。在實際應用中,例如在學習如何利用邊界掃描寄存器進行測試時,不妨深入理解其基本原理,包括它如何透過互聯設備之間各個引腳來實現測試。此外,也要考慮不同材料對信號傳遞效果的影響,比如PCB板材質選擇及其設計對測試結果可能造成的關聯性。而且加入一些實際案例分析和常見故障排查方法也有助於提升實作指南的可操作性和有效性。

探索 IEEE 標準中定義的指令集

根據 IEEE 標準,邊界掃描指令集的定義包括以下幾個指令:

- **BYPASS**(強制性):這是一種基本功能,將 `TDI` 和 `TDO` 透過一個單一的移位寄存器連接在一起。
- **SAMPLE**(強制性):此指令用於捕捉晶片引腳的快照,以便進行後續分析。
- **PRELOAD**(強制性):此步驟允許使用者將數據加載至邊界掃描寄存器中,為後續操作做準備。
- **EXTEST**(強制性):利用預先加載的數據來應用於外部端口,這對於測試和驗證電路的外部互聯非常重要。

此外,還有一些可選指令:
- **INTEST**:這個選項讓預先加載的數據能夠應用到內部核心邏輯中,有助於更深入地檢查電路功能。
- **CLAMP**:該指令會將預裝載的數據施加到端口上,同時選擇 `BYPASS` 寄存器作為 `TDI` 與 `TDO` 之間的串行通道,用以控制信號流向。
- **HIGHZ**:此模式則使晶片進入一種非驅動狀態,也就是所有端口都被設置為高阻抗狀態,而同樣保留了 `BYPASS` 寄存器作為選定寄存器。

透過這些不同功能及其應用場景,我們可以有效地運用邊界掃描技術進行故障診斷和元件驗證。舉例來說,在某些設備中,使用 SAMPLE 指令可以迅速確認引腳狀態是否正常,而 EXTEST 則能在硬體測試階段提供可靠數據支持。此外,每個指令執行所需時間與錯誤檢測率等參數也顯示出,它們對提升測試效率具有明顯貢獻。


探索 IEEE 標準中定義的指令集 Free Images


掌握 SAMPLE 指令的應用技巧

邊界掃描鏈的結構與指令集是使用邊界掃描描述語言(BSDL)來描述的。BSDL 是非常高階設計語言(VHDL)的子集,這些 BSDL 檔案通常由 IC 製造商提供。關於 BSDL 語言的詳細內容會在下一篇文章中進一步探討,因此在此不作深入說明。

邊界掃描單元,如前所述,是實現邊界掃描技術的核心元件。這些單元可以被程式化配置,以執行各種功能,例如傳輸或接收數據,使得在不必物理接觸引腳的情況下測試晶片間的連接成為可能。

每個邊界掃描單元具有以下功能:
- 捕獲其平行輸入 `PI` 上的數據
- 將數據更新到其平行輸出 `PO`
- 以串列方式從 `SO` 掃描數據到相鄰單元的 `SI`
- 在透明模式下運作:將 `PI` 的信號直接傳遞至 `PO`

在設備層級,邊界掃描元素對內部邏輯功能並沒有任何貢獻,其路徑獨立於設備本身的功能。所有數位輸入和輸出信號引腳都必須配備邊界掃描單元,但電源和地線除外。

根據功能,掃描單元可以分為以下幾種類型:

**輸入單元**:用於監控輸入信號。

**輸出單元**:用來控制輸出信號:
1. **Output2**:該類型不支持三態邏輯,只能將引腳設置為「0」或「1」。
2. **Output3**:此類型支持三態邏輯,允許引腳處於「0」、「1」或「Hi-Z」(高阻抗)狀態。

**雙向單元**:可同時用作輸入和輸出,一般支持三態邏輯。

**控制單元**:
1. **Control**:此類型可控制一個或多個其他單元的功能,例如切換它們之間的输入与输出模式,且不連接至晶片引腳。
2. **ControlR**:與 Control 類似,但額外具備讀取受控单元狀態的能力,同樣不連接至晶片引腳。

此外還有一種稱為 **Clock Cell** 的功能,它表示該細胞與系統時鐘頻率相連,從而允許進行 INTEST 模式操作。

一般而言,每個掃描細胞通常由少量翻轉鎖存器和邏輯元素組成,使其能夠執行諸如存儲數據、將數據轉移至其他細胞等不同任務。一個典型的掃描細胞可以用以下示意圖表示:

根據2001年IEEE標準1149.1規範,不同版本中的螺旋結構可能有很大差異,其中描述了十種不同類型(BC_1 到 BC_10):
- **BC_1** – 基本的邊界掃描細胞,可用作输入、输出、控制及内部细胞,支持所有指令。
- **BC_2** – 可作為输入单元使用,其架构类似于 BC_1,但在进入细胞时具有一个多路选择器。
- **BC_3** – 仅用于输入或内部单元,因为缺乏更新锁存器,但支持 INTEST 指令。
- **BC_4** – 与 BC_3 类似,也没有更新锁存器,并且去掉了系统信号路径中的多路选择器,从而减少了一些信号延迟,该细胞只能用于系统时钟上的输入引脚。
- **BC_5** – 可作为合并单体应用,该类型满足输入引脚需要有细胞,同时也可驱动输出驱动程序使能。
- **BC_7** – 能够为输出驱动程序提供数据,并监控即便在输出驱动状态下PIN活动情况。
- **BC_8** – 此类只监测PIN驱动程序输出,因此不支持INTEST指令。

PRELOAD 指令如何協助預設測試數據

在邊界掃描技術中,有兩種主要的自我監控單元。首先是 `BC_9`,這是一個支持 `INTEST` 指令的自我監控單元;其次是 `BC_10`,這是一個不支持該指令的自我監控單元。值得注意的是,所需的單元數量未必與芯片引腳數量完全匹配。例如,在圖4中提到的雙向引腳B2,理論上至少需要三個邊界掃描單元來實現功能:一個位於輸入端,一個位於輸出端,以及一個用來控制IO狀態。在實務上,為了簡化設計,通常會將這兩個IO掃描單元整合成一個稱為 `BC_7` 的多功能單元。

接下來談談邊界掃描寄存器(Boundary Scan Register, 簡稱 BSR)。BSR 是由一系列邊界掃描單元組成的一種數據寄存器(Data Register, 簡稱 DR),這些掃描單元依照物理引腳的鄰近程度或其他佈局約束而串聯連接。當使用 `EXTEST`、`SAMPLE`、`PRELOAD` 和 `INTEST` 等指令時,就可以選擇使用該邊界掃描寄存器進行操作。

特別地,在探討 PRELOAD 指令時,可以強調它如何透過預設測試數據來提升測試準確性和效率。同時,不同材質對信號完整性的影響也應納入考慮。此外,在邊界掃描中使用各種測試數據格式,例如二進制和十六進制,各有其優缺點,因此根據具體應用需求,自訂 PRELOAD 指令參數以達到最佳測試效能也是相當重要的一環。

SAMPLE/PRELOAD 指令組合的實際用途

在掃描操作過程中,數據會從TDI(測試數據輸入)到TDO(測試數據輸出)的方向進行位移。這些掃描單元中的值可以被改變或讀取,使得測試能夠順利進行。註明了寄存器的大小和格式後,我們就能確定特定晶片中掃描單元的數量及其排列方式。因此,在執行測試之前,了解BSR(邊界掃描寄存器)的長度和格式是非常重要的。此信息通常由製造商提供,並以BSDL(邊界掃描描述語言)文件格式呈現。例如,這裡是一個針對STM32F407微控制器的簡化版BSDL文件:
cell        port     function405       BC_1,        *,      CONTROL,404       BC_1,        PE2,    OUTPUT3,403       BC_4,        PE2,    INPUT,   
其中包含了以下幾項資訊:- `num`表示單元編號;- `cell`則是根據標準定義的單元類型。在實際應用中,理解這些參數不僅有助於提升邊界掃描測試的效率與準確性,也能讓工程師更好地選擇合適的硬體設計,以達到最佳性能和降低成本。

EXTEST 指令在外部電路測試中的角色

在這段描述中,`port`是設計中的端口名稱,而控制單元則不具有端口名稱。至於`function`,它指的是根據標準所定義的單元功能,包括輸入、輸出2、輸出3、雙向(bidir)、控制(control)或控制反向(controlr)。從文件中可以看出,掃描單元的數量總共有405個,因此邊界掃描寄存器(BSR)的長度為405位。每個I/O針腳可以擁有三個掃描單元,這些單元根據執行的功能分為:控制、輸出3和輸入。在形成BSR寄存器內容時,需要考慮到這些信息。

### 邊界掃描指令

#### `SAMPLE`指令
該命令用來讀取當前來自掃描單元的值並將其傳遞到TDO輸出。這對於檢查晶片引腳當前狀態非常有幫助。透過此指令,可以了解當前系統運作情況,以及各種信號在不同條件下如何影響整體性能。因此,在進行測試與診斷時,使用此指令可提供重要的信息,有助於確保系統正常運行。

理解 INTEST 指令對內部功能測試的重要性

這個指令會導致 `TDI` 和 `TDO` 短接到 `BSR` 註冊器,但芯片仍然保持在正常的操作狀態。在執行此命令時,可以利用 `BSR` 註冊器捕獲在正常運作過程中與芯片交換的數據。換句話說,透過這個指令,我們能夠在不干擾微控制器運作的情況下,讀取來自其輸出的信號。在步驟 `3` 中,當 `SAMPLE` 指令被載入到 IR 註冊器時,信號會從引腳讀取並傳送至掃描單元。在隨後的步驟中,我們轉移到 `Shift-DR` 狀態,並檢查包含前一步所接收引腳值的 BSR 註冊器。值得注意的是,在讀取單元經過連接到引腳 `B3`、`B4`、和 `B5` 的掃描單元時,連接這些引腳的 LED 不會亮起,因為此刻掃描單元並未與芯片引腳相連。至於 `PRELOAD` 指令,它允許我們預加載特定值進入邊界掃描單元,以便後續測試或其他操作使用。

透過案例分析學會故障檢測方法

在這裡,使用 `PRELOAD` 指令的過程相對簡單。當我們向指令寄存器寫入 `PRELOAD` 命令後,只需在 `Shift-DR` 狀態中將掃描單元中的值寫入邊界掃描寄存器(BSR)。值得注意的是,完成這些操作後,連接到 B3、B4、B5 引腳的 LED 燈並不會亮起。

### `SAMPLE/PRELOAD` 指令
有時候,兩個命令:`SAMPLE` 和 `PRELOAD` 會結合成一個指令。在將此命令寫入 IR 寄存器時,首先會把引腳的值讀入掃描單元(BSR 寄存器),然後在 `Shift-DR` 狀態下,我們可以讀取這些值並為引腳寫入新的值進入掃描單元。然而,在執行完 `SAMPLE/PRELOAD` 指令後,引腳本身仍然不受影響。

通常來說,`SAMPLE/PRELOAD` 是邊界掃描測試過程中的第一條指令,它為許多其他操作奠定了基礎。

### `EXTEST` 指令
JTAG 中的 `EXTEST` 命令用於測試連接到微控制器引腳的外部電路。當微控制器進入 `EXTEST` 模式時,其所有功能模塊都被禁用,此時微控制器引腳可用來檢測外部電路是否存在短路或開路等問題。此命令可用于驗證微控制器的引腳和電路,在製造過程中進行檢查,以及在開發階段確認外部電路是否正確接線。正是因為我們在之前的 `PRELOAD` 命令中已經將數據寫入掃描單元,所以現在可以透過 `EXTEST` 將這些儲存在其中的信號轉換至輸出。

執行該指令之後,I/O 引腳將與微控制器內部邏輯斷開連接,因此無法再從程序中對其進行控制。

### `INTEST` 指令
此外,也可以利用邊界掃描單元來測試設備內部功能。這種使用方式稱為內部測試(Internal Test),簡稱 Intest。Intest 通常僅用於有限度地檢查內部功能,以識別如型號錯誤或某些明顯內部缺陷等問題。

## 測試範例
讓我們看看如何利用 `SAMPLE/PRELOAD` 和 `EXTEST` 指令來檢查板子上的故障。我們假設有兩顆晶片 D1 和 D2 透過針腳 5、6、7 互相連接,其中 D1 的針腳 6 與 D2 的針腳 2 相連,而針腳 7 與 D2 的針腳 3 相連。但是,我們又假定在 D1:6 和 D2:2、D1:7 和 D2:3 之間形成了一個焊點橋接,如同圖示所表現的一樣。因此,我們希望通過 JTAG 檢查這兩顆晶片之間的連接情況:

1. 使用 PRELOAD 命令向晶片 D1 載入模板:0b0101010000。
2. 利用 EXTEST 命令將生成的測試模式輸出至晶片引腳。
3. 接著對於晶片 D2 使用 SAMPLE 命令,我們讀取其引腳狀態並期望得到結果:0b00001010,但實際上卻得到:0b00001000,也就是說,在晶片 D2 的第 2 號引脚上出現了異常訊號,因此可以推斷出聯繫 D1:7 與 D2:2 間可能存在一些問題。

Reference Articles

單板級JTAG 測試技術| 天瓏網路書店

王承、劉治國編著的《單板級JTAG測試技術》是一本系統論述單板級JTAG測試技術的專著。內容包括:基於IEEEl 149.1標準的邊界掃描測試、可測性設計和測試功能及串行測試 ...

探索高效硬件调试的秘密武器—— JTAG驱动程序全面解析

1. **JTAG 协议**:包括JTAG 的基本原理、TAP 控制器、数据路径、边界扫描链以及JTAG 的主要功能——测试、编程和调试。 2. **FPGA 结构**:了解FPGA 的 ...

Source: CSDN博客

JTAG简介

JTAG 技术是一种嵌入式调试技术,JTAG最初是用来对芯片进行测试的,JTAG的基本原理是在器件内部定义一个TAP(Test Access Port;测试访问口)通过专用的JTAG ...

JTAG引脚故障案例分析:常见问题及修复方法(故障排查实例)

1.1 JTAG接口的功能. JTAG接口允许对集成电路(IC)的内部信号进行访问,从而实现边界扫描测试、在线测试(ICT)、以及调试等功能。JTAG接口的这些功能 ...

Source: CSDN

关于JTAG口,你了解多少?

JTAG 是一种IEEE标准用来解决板级问题,诞生于20世纪80年代。今天JTAG被用来烧录、debug、探查端口。当然,最原始的使用是边界测试。 1、边界测试. 举个 ...

TMS320F28004x 实时微控制器

C2000™ 实时控制微控制器(MCU) 入门指南涵盖了C2000 器件开发中从硬件到支持资源的所有方面。除了主要. 的参考文档外,每个部分还提供了相关链接和资源,可帮助用户进一步 ...

Source: 德州仪器

01-工控物聯網共通性資安指南.pdf

一個例子是JTAG 除錯,其中JTAG 用於控制處理器並執行. 任意命令,而JTAG 邊界掃描使用JTAG 來簡單地讀取資訊(可. 能是公開可用的資訊)。 NDR 2.13. RE(1). 增項要求(1 ...

调试工具

2018年9月24日

Source: Intel

石原 尚 (Hisashi Ishihara)

Expert

Related Discussions