到這個標題不知有多少人會有興趣?!
這是上回版主說要找個機會跟各位介紹的JTAG內容。
其實,我要講的是有關於 JTAG 的簡單介紹的,但他的應用對我來說:
大概還是不脫 USB 介面的應用。這是很久以前有人找版主做的東西....
別人也是說:能不能做一條關於 USB 轉 JTAG 的轉接線?
所以版主才去研究這個東西的....不過因為年代久遠(其實是,近三年前的事了!)
若有錯誤之處也敬請原諒也敬請不吝賜教!
------
首先我們先看一下JTAG 原本的含意: JTAG (Joint Test Access Group) !
一定大家都摸不著他的定義。雖然您可能常常聽人家說,自己也經常用,卻不甚了解他的含意。
其實這個規格最原始的用意是拿來作為PCB 版偵錯檢查用的,
所以他有一個基本原理,也是大家所熟悉的Boundary Scan Control....
一般PCB 完成後會做一些飛針測試,以確認PCB 版有沒有Open/Short 現象。
但這種方式也只不過簡單的測試。但對於一些電路版的基本動作是無法進一步得知的。
所以,就有這一種算是PCB 版基本功能檢測方法.....
如果,您本身有做過一些電子產品的夾測試治具的話,就應該不陌生了。
他就是利用一些基本的邏輯方法來測試一些 I/O 的基本動作,以確認PCB功能是OK的!
---- 簡單的說明就是說:哪些電子回路,我在Input 端灌一系列邏輯信號,
我們就可以在Output端量到一些正確信號,若不對,代表這個PCB版的內部回路有問題。
所以,這種Bounadry Scan 是需要原始設計者提供一些 測試波形(有人稱為 Test Vector,
或是 Test Patterns)用以測試的!
(註:如果您是IC設計業的菜鳥的話,一開始的蹲馬步,就是要幫一些學長跑一些模擬,
而這些模擬環境,就是寫一些Test Patterns...然後做苦工的看結果。
至於還夠不夠格寫一些封測廠要用的檢測程式,那就看您學長對您的「厚愛」了。)
----- 這些都是 1985 年以前的事!
那之後的事呢?!....哈~哈~ 因為慢慢的一塊傳統電路版也會縮到一棵IC而已。
所以,這個觀念就被延伸到IC內部的測試了。也就是我們目前所熟悉的JTAG的風貌...
-------
其實,一棵IC內要有JTAG 功能的話,也是需要浪費一些邏輯電路空間的,
但這些因應IC出廠檢測用的邏輯回路,對於提高IC量產良率是有幫助的。 是值得的!
也慢慢的這種檢測方式也可以拿來做其他額外功能的:也就是我們現在所常見到的:
燒錄器功能啊﹑或是ICE (In-Circuit Emulation) 模擬功能啊等等...
我為何要講這個東西,就是因為現在的MCU 都已經有提供一些線上模擬功能,
讓一般使用者不用在額外使用模擬器或燒錄器,大大的提高終端客戶的使用意願。
-----
至於JTAG 的基本動作我就稍微簡述如下:(有興趣可以去找一下 JTAG 的規格書
不過,等您K完後,您也可能不知道一些所以然....因為這個規格原本就是給PCB 版檢測用的)
版主就簡單的列出一兩張圖,再加以說明,我想大家就比較容易清楚一點了。
下圖就是一張TAP 狀態圖 (Test Access Port State diagram) ,而這張圖就是所有 JTAG 的精髓了。
JTAG 一般有幾隻腳呢?就是 TDI(Input),TDO (output), TCK(Clock) 及所謂的 TMS (Mode Select)。
至於要不要TRst (reset )就沒有硬性規定了。
其實,嚴格講:以控制的時序信號來說:JTAG 是有點像 SPI 介面。差別就是在那一根 TMS。
而這個TMS 就是拿來控制上述的那個TAP 狀態圖了....
我簡單的說明一下那個狀態圖的原理:一般我們IC上電後,會進入一個所謂 Reset 狀態。
就是圖上的那個Test-Logic-Reset !....
然後,若當 TMS 下一個狀態時(就是再送一個TCK 搭配一個 TMS值),為高(1)的值的話。
他只不過回到 Reset 狀態,--- 就是沒有改變。
但若為低(0)的值的話,他就會進入所謂的 Run-Test-Idle 狀態了....依此類推。
另外兩大類的狀態為:Select-DR-Scan 及Select-IR-Scan !
Select-DR-Scan 就是要讀(寫)所謂的Data Register!
Select-IR-Scan 就是拿來下一些Command 用的。
-------
不知大家有沒有發現這一張 TAP 狀態圖有一個很好玩的地方?
就是不管您目前處於哪一個狀態,您只要下九個TMS為高(1)的值的話。
您一定可以回到所謂的 Test-Logic-Reset 了--- 這是一個寫程式的重要觀念喔!
----
好了,JTAG 的基本原理講完了,啊?!這麼簡單?!
對啊....越複雜的話,那麼IC內部的邏輯回路就會跟著複雜,賣IC的怎麼賺錢啊?!
接下來大家都可以寫一些應用程式了,
所謂Boundary Scan 就是要利用上述的那個觀念,把一些IC內部的資料給「擠」出來。
如果大家有寫過Microchip 的SPI介面的話,應該知道我在說什麼?!
因為在IC設計中,有些IC在RESET之後,有一些Registers 是有一些預設值的,
我們就可以利用這個Boundary Scan 方法把他「擠」出來....
但是很不幸的是:雖然JTAG的原理大家用的是一樣的,但每一家公司的IC的基本指令
或是所謂Registers 也不一定完全相同,這還是得拿到原廠技術資料的。
否則,還是一樣:沒輒的!譬如:我們以有名FPGA大廠的Altera 的FPGA為例:
他每一個JTAG Instruction 也會有他自己的 Instruction Code....
以最簡單的IDCODE 來說:這是要「擠」出您目標IC的基本識別碼的!
相信他每一顆不同型號的IC會「幾」出不同的識別碼吧!
那您說:我怎麼可以做一條USB 轉JTAG 的標準線啊?!.....
因為每一家IC 及每一族係IC可能都有不同的JTAG Instruction 呢。
但我們肯定的是:他們既然號稱JTAG 我想他的基本架構就是應該如此。
如此說來,您應該會進一步的提會到版主一直強調的USB 韌體更新的重要性吧。
因為您每每都要跟著新的JTAG Instruction 來調整您USB 韌體吧。
.....
關於USB 與 JTAG 的基本觀念就暫時先介紹到此。下回有機會再以實例跟各位說明。
如果,您有這方面的問題或想法的話,也歡迎隨時與版主聯絡。
謝謝各位。