到這個標題不知有多少人會有興趣?!
這是上回版主說要找個機會跟各位介紹的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 的基本觀念就暫時先介紹到此。下回有機會再以實例跟各位說明。
如果,您有這方面的問題或想法的話,也歡迎隨時與版主聯絡。
謝謝各位。
您好請問我在SAMPLE/PRELOAD指令的動作園裡看不懂請問是否有SPEC或者相關資料可供參考?我的信箱是afyem@yahoo.com.tw 拜託了謝謝!
回覆刪除不好意思喔....是我看錯了呢?!還是您不小心POST 錯了網頁主旨?!
刪除我這篇文章裡並沒有提到SAMPLE/PRELOAD...這個東西?!...
您是要我回答哪一部份呢?!... :-/ :-/ :-/ :-/ :-/ :-/
其實是有關於IEEE 149.1所定義的三種required Instruction 分別為EXTEST,SAMPLE/PRELOAD,BYPASS這三種請問是否可幫忙介紹?因為我看了一些相關介紹文件還是不太了解其原理!其內容講的並不多!
回覆刪除你說您只要下九個TMS為高(1)的值的話。您一定可以回到所謂的 Test-Logic-Reset 了-->應該是五個TMS=1吧!
回覆刪除您說呢?!...下九個跟下五個有什麼不同?!
刪除就像您在做Reset 信號時,人家規格書跟您說是:100 uSec...
您就真的抓得剛剛好是 100 uSec 嗎?!...
--- 我突然發現說:好像我們在討論這些技術問題時,
有時好像很在乎這種小細節?
有時卻忽略到一些原本我們該留意的人事物之類的?!
就好像我們明明跟一般人強調我們高科技的一些特色時,
人家都覺得我們都好像是瘋子似的?! (:| ...
謝謝分享,解釋的很清楚
回覆刪除還好有看到回應裡的討論,不然不知道為什要9個TMS=1可以reset
版主您好,雖然這篇是很久的文章,但也在網路無意間收尋到。
回覆刪除有一個問題困擾了我一陣子,尋求Altra FAE也得不到詳細資訊。
就是,我想利用 MCU 透過 JTAG 燒錄 Altera CPLD。
但似乎找不到 Altera CPLD JTAG Donwload Protocol。
這樣我就沒辦法自己用 MCU 控制 JTAG 來對 CPLD 做 FW Update 的動作。
不知道版主,是否有什麼建議可以提供呢?
小弟感激不盡!
JTAG 本身的這些通訊方式與方法,真的很簡單。
刪除所以我當初就沒有花太多文章討論這個東西。
就拿您所提的例子:利用 MCU 透過 JTAG 燒錄 Altera CPLD。
這個東西,主要還是要去查Altera CPLD 的Command Protocol,
但這不是每一家或每一系列產品可以從一般公開資訊查得到的。
當然您也可以自己想辦法搞那個『逆向工程』的方法!! :)) ...
如果您常用的就是那麼一兩種CPLD 型號,應該還可以,多了就有點煩了。
這就得看您有多少時間可以研究這個東西。
----
有心研究真的不難,就拿我這一篇文章來說:是一位搞Altera 的朋友,
請我評估那個USB Blaster 的東西時,我大概K 了一個月之後,寫出來的。
當初也有稍微寫了一小段AP程式,瞭解到他的基本精髓之後,隨後一大堆
"大陸製"出來之後,我就沒啥興趣搞了。
所以,我相信以您的用心搜尋到我這裡來,應該也沒問題可以搞出一樣
的東西...所以,好好加油吧!
(PS:我是不知道您只是要應用當Tools 而已呢?!還是有其他的應用想法?
我不得而知啦!.... :"> ...)