2007年7月30日 星期一

USB 與 JTAG (一)JTAG 簡介

到這個標題不知有多少人會有興趣?!

這是上回版主說要找個機會跟各位介紹的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 的基本觀念就暫時先介紹到此。下回有機會再以實例跟各位說明。


    如果,您有這方面的問題或想法的話,也歡迎隨時與版主聯絡。

謝謝各位。

 


 

8 則留言:

  1. 您好請問我在SAMPLE/PRELOAD指令的動作園裡看不懂請問是否有SPEC或者相關資料可供參考?我的信箱是afyem@yahoo.com.tw 拜託了謝謝!

    回覆刪除
    回覆
    1. 不好意思喔....是我看錯了呢?!還是您不小心POST 錯了網頁主旨?!
      我這篇文章裡並沒有提到SAMPLE/PRELOAD...這個東西?!...
      您是要我回答哪一部份呢?!... :-/ :-/ :-/ :-/ :-/ :-/

      刪除
  2. 其實是有關於IEEE 149.1所定義的三種required Instruction 分別為EXTEST,SAMPLE/PRELOAD,BYPASS這三種請問是否可幫忙介紹?因為我看了一些相關介紹文件還是不太了解其原理!其內容講的並不多!

    回覆刪除
  3. 你說您只要下九個TMS為高(1)的值的話。您一定可以回到所謂的 Test-Logic-Reset 了-->應該是五個TMS=1吧!

    回覆刪除
    回覆
    1. 您說呢?!...下九個跟下五個有什麼不同?!
      就像您在做Reset 信號時,人家規格書跟您說是:100 uSec...
      您就真的抓得剛剛好是 100 uSec 嗎?!...
      --- 我突然發現說:好像我們在討論這些技術問題時,
      有時好像很在乎這種小細節?
      有時卻忽略到一些原本我們該留意的人事物之類的?!
      就好像我們明明跟一般人強調我們高科技的一些特色時,
      人家都覺得我們都好像是瘋子似的?! (:| ...

      刪除
  4. 謝謝分享,解釋的很清楚
    還好有看到回應裡的討論,不然不知道為什要9個TMS=1可以reset

    回覆刪除
  5. 版主您好,雖然這篇是很久的文章,但也在網路無意間收尋到。
    有一個問題困擾了我一陣子,尋求Altra FAE也得不到詳細資訊。
    就是,我想利用 MCU 透過 JTAG 燒錄 Altera CPLD。
    但似乎找不到 Altera CPLD JTAG Donwload Protocol。
    這樣我就沒辦法自己用 MCU 控制 JTAG 來對 CPLD 做 FW Update 的動作。
    不知道版主,是否有什麼建議可以提供呢?
    小弟感激不盡!

    回覆刪除
    回覆
    1. JTAG 本身的這些通訊方式與方法,真的很簡單。
      所以我當初就沒有花太多文章討論這個東西。
      就拿您所提的例子:利用 MCU 透過 JTAG 燒錄 Altera CPLD。
      這個東西,主要還是要去查Altera CPLD 的Command Protocol,
      但這不是每一家或每一系列產品可以從一般公開資訊查得到的。
      當然您也可以自己想辦法搞那個『逆向工程』的方法!! :)) ...
      如果您常用的就是那麼一兩種CPLD 型號,應該還可以,多了就有點煩了。
      這就得看您有多少時間可以研究這個東西。
      ----
      有心研究真的不難,就拿我這一篇文章來說:是一位搞Altera 的朋友,
      請我評估那個USB Blaster 的東西時,我大概K 了一個月之後,寫出來的。
      當初也有稍微寫了一小段AP程式,瞭解到他的基本精髓之後,隨後一大堆
      "大陸製"出來之後,我就沒啥興趣搞了。
      所以,我相信以您的用心搜尋到我這裡來,應該也沒問題可以搞出一樣
      的東西...所以,好好加油吧!
      (PS:我是不知道您只是要應用當Tools 而已呢?!還是有其他的應用想法?
      我不得而知啦!.... :"> ...)

      刪除