jtag的基本原理與調(diào)試原理
JTAG最初是用來對(duì)芯片進(jìn)行測(cè)試的,基本原理是在器件內(nèi)部定義一個(gè)TAP(Test Access Port?測(cè)試訪問口)通過專用的JTAG測(cè)試工具對(duì)進(jìn)行內(nèi)部節(jié)點(diǎn)進(jìn)行測(cè)試。JTAG測(cè)試允許多個(gè)器件通過JTAG接口串聯(lián)在一起,形成一個(gè)JTAG鏈,能實(shí)現(xiàn)對(duì)各個(gè)器件分別測(cè)試?,F(xiàn)在,JTAG接口還常用于實(shí)現(xiàn)ISP(In-System Programmable?在線編程),對(duì)FLASH等器件進(jìn)行編程。
JTAG編程方式是在線編程,傳統(tǒng)生產(chǎn)流程中先對(duì)芯片進(jìn)行預(yù)編程實(shí)現(xiàn)再裝到板上因此而改變,簡(jiǎn)化的流程為先固定器件到電路板上,再用JTAG編程,從而大大加快工程進(jìn)度。JTAG接口可對(duì)PSD芯片內(nèi)部的所有部件進(jìn)行編程
簡(jiǎn)單地說,JTAG的工作原理可以歸結(jié)為:在器件內(nèi)部定義一個(gè)TAP(TestAccessPort,測(cè)試訪問口),通過專用的JTAG測(cè)試工具對(duì)內(nèi)部節(jié)點(diǎn)進(jìn)行測(cè)試和調(diào)試。
邊界掃描邊界掃描(Boundary-Scan)即在芯片的每個(gè)輸入輸出管腳上都增加一個(gè)移位寄存器單元(Boundary-Scan Register Cell),因?yàn)檫@些移位寄存器單元分布在芯片的邊界上,所以被稱為邊界掃描寄存器。在JTAG 調(diào)試中,邊界掃描是一個(gè)很重要的概念,當(dāng)需要調(diào)試芯片時(shí),這些寄存器將芯片與外圍電路隔離,實(shí)現(xiàn)對(duì)芯片輸入輸出信號(hào)的觀察和控制:對(duì)于輸入管腳,可以通過與之相連的邊界掃描寄存器單元把數(shù)據(jù)加載到該管腳中;對(duì)于輸出管腳,可以通過與之相連的邊界掃描寄存器“捕獲”(CAPTURE)該管腳上的輸出信號(hào);正常運(yùn)行狀態(tài)下,這些邊界掃描寄存器單元對(duì)芯片是透明的,所以正常的運(yùn)行不會(huì)受到影響。另外,芯片輸入輸出管腳上的邊界掃描(移位)寄存器單元可以相互連接起來,在芯片的周圍形成一個(gè)邊界掃描鏈(Boundary-Scan Chain),它可以串行的輸入和輸出,通過相應(yīng)的時(shí)鐘信號(hào)和控制信號(hào),實(shí)現(xiàn)對(duì)處在調(diào)試狀態(tài)下的芯片的輸入和輸出狀態(tài)的觀察和控制。
在CPU外圍,處理器內(nèi)部包含了JTAG的硬件實(shí)現(xiàn),并且向外界提供接口,也就是上面所說的TMS、TCK、TDI、TDO四個(gè)引腳。
這里的CPU:是指運(yùn)算處理單元,只包含了內(nèi)部寄存器以及運(yùn)算單元等基本部件。
這里的處理器:是指CPU 擴(kuò)展芯片,不是SoC。
JTAG如何用于芯片測(cè)試呢? 其中用到的最主要部件就是邊界掃描鏈。命名為邊界掃描鏈,是由于它位置處于處理器的邊界上。
我們知道CPU是通過引腳與外圍交流的,所有的數(shù)據(jù)都會(huì)通過引腳輸入或者輸出,而JTAG就是通過監(jiān)控引腳的信號(hào)達(dá)到芯片測(cè)試的目的。而邊界掃描鏈就是在引腳上的一個(gè)部件。如下圖:
通過邊界掃描鏈,當(dāng)有信號(hào)輸入的時(shí)候,邊界掃描鏈就能獲取信號(hào),當(dāng)CPU要輸出信號(hào)的時(shí)候,邊界掃描鏈也能獲取要輸出的信號(hào)。另外,也可以通過邊界掃描鏈來直接向外部輸出信號(hào)。
無論是信號(hào)的抓取還是輸出,都需要有接口來保存這些信號(hào),TDI 跟 TDO 就是做這樣一些工作的。如圖:
本來邊界掃描鏈保存著引腳上的信號(hào),當(dāng)通過TDI引腳輸入我們自己的信號(hào)的時(shí)候,會(huì)發(fā)生沿上面紅線方向的移位操作,
TDI ——〉 邊界掃描鏈 —— 〉 TDO
就能從TDO獲取邊界掃描鏈上的信號(hào),我們從TDI輸入的信號(hào)也會(huì)到邊界掃描鏈上去。
在CPU跟外界通信的引腳上的數(shù)據(jù)無非就是 指令 跟 數(shù)據(jù)信號(hào)(包括地址跟數(shù)據(jù)) 兩種。但是這兩者的結(jié)合形成了一個(gè)完整的程序,能對(duì)它們進(jìn)行監(jiān)控就表明我們能進(jìn)行程序的調(diào)試。一般的芯片都會(huì)提供幾條獨(dú)立的邊界掃描鏈,對(duì)邊界掃描鏈的控制主要是通過 TAP(Test Access Port) Controller來完成的。
上面的只是jtag最基本的原理,要對(duì)程序更好的調(diào)試還需要控制部件,還有更多寄存器的結(jié)合等等。