JTAG有10pin的、14pin的和20pin的,盡管引腳數和引腳的排列順序不同,但是其中有一些引腳是一樣的,各個引腳的定義如下。
一、引腳定義
Test Clock Input (TCK) -----強制要求1
TCK在IEEE1149.1標准里是強制要求的。TCK為TAP的操作提供了一個獨立的、基本的時鍾信號,TAP的所有操作都是通過這個時鍾信號來驅動的。
Test Mode Selection Input (TMS) -----強制要求2
TMS信號在TCK的上升沿有效。TMS在IEEE1149.1標准里是強制要求的。TMS信號用來控制TAP狀態機的轉換。通過TMS信號,可以控制TAP在不同的狀態間相互轉換。
Test Data Input (TDI) -----強制要求3
TDI在IEEE1149.1標准里是強制要求的。TDI是數據輸入的接口。所有要輸入到特定寄存器的數據都是通過TDI接口一位一位串行輸入的(由TCK驅動)。
Test Data Output (TDO) -----強制要求4
TDO在IEEE1149.1標准里是強制要求的。TDO是數據輸出的接口。所有要從特定的寄存器中輸出的數據都是通過TDO接口一位一位串行輸出的(由TCK驅動)。
Test Reset Input (TRST) ----可選項1
這個信號接口在IEEE 1149.1標准里是可選的,並不是強制要求的。TRST可以用來對TAPController進行復位(初始化)。因為通過TMS也可以對TAP Controll進行復位(初始化)。所以有四線JTAG與五線JTAG之分。
(VTREF) -----強制要求5
接口信號電平參考電壓一般直接連接Vsupply。這個可以用來確定ARM的JTAG接口使用的邏輯電平(比如3.3V還是5.0V?)
Return Test Clock ( RTCK) ----可選項2
可選項,由目標端反饋給仿真器的時鍾信號,用來同步TCK信號的產生,不使用時直接接地。
System Reset ( nSRST)----可選項3
可選項,與目標板上的系統復位信號相連,可以直接對目標系統復位。同時可以檢測目標系統的復位情況,為了防止誤觸發應在目標端加上適當的上拉電阻。
USER IN
用戶自定義輸入。可以接到一個IO上,用來接受上位機的控制。
USER OUT
用戶自定義輸出。可以接到一個IO上,用來向上位機的反饋一個狀態
由於JTAG經常使用排線連接,為了增強抗干擾能力,在每條信號線間加上地線就出現了這種20針的接口。但事實上,RTCK、USER IN、USER OUT一般都不使用,於是還有一種14針的接口。對於實際開發應用來說,由於實驗室電源穩定,電磁環境較好,干擾不大。
二、20、14、10pin JTAG的引腳名稱與序號對應關系
值得注意的是,不同的IC公司會自己定義自家產品專屬的Jtag頭,來下載或調試程序。嵌入式系統中常用的20、14、10pin JTAG的信號排列如下:
需要說明的是,上述Jtag頭的管腳名稱是對IC而言的。例如TDI腳,表示該腳應該與IC上的TDI腳相連,而不是表示數據從該腳進入download cable。
實際上10針的只需要接4根線,4號是自連回路,不需要接,1,2接的都是1管腳,而8,10接的是GND,也可以不接。
附轉接板電路:
JTAG接口的SWD接線方式
JTAG引腳示意圖:
一、SWD 和傳統的調試方式區別
1. SWD 模式比 JTAG 在高速模式下面更加可靠
2. GPIO 剛好缺一個的時候, 可以使用 SWD 仿真, 這種模式支持更少的引腳
3. 在板子的體積有限的時候推薦使用 SWD 模式
二、仿真器對 SWD 模式支持情況
1. 市面上的常用仿真器對 SWD 模式支持情況
JLINKV8 非常好的支持 SWD 仿真模式, 速度可以到 10M
ULINK2 非常好的支持 SWD 模式, 速度可以達到 10M
2. SWD 硬件接口上的不同
(1) JLINKV7 需要的硬件接口為: GND, RST, SWDIO, SWDCLK
(2) JLINKV8 需要的硬件接口為: VCC, GND, RST, SWDIO, SWDCLK (注:下面有我自己用JLINKV8的實際連線及相應實驗結果)
(3) ULINK1 不支持 SWD 模式
(4) ULINK2 需要的硬件接口為: GND, RST, SWDIO, SWDCLK
三、在 MDK 中SWD 模式的設置
正常的JTAG需要20管腳,而J-Link 的SWD只需要2根線(PA13/JTMS/SWDIO、PA14/JTCK/SWCLK)就夠了(加上電源線也就4根),這樣就節省了3個I/O口(PA15/JTDI、PB3/JTDO、PB4/JNTRST)為其它所用,並且可節省一部分板子的空間(只需4個口就可以了)
第一步:
第二步:
另外, JTAG引腳可以被復用為IO口,但是這樣一來,JLINK就不能夠連上芯片了。解決的方法有兩種:
(1)另寫一段程序,不要將JTAG復用為I/O口,然后將這段程序用串口工具寫入芯片中
(2)將BOOT0/BOOT1設置成為內部RAM啟動,那么上電后就不會執行FLASH中的程序,這樣JLINK就能順利“接管”JTAG引腳
實例應用:
10針JTAG與20針JTAG的連接:
下面說一下接法,其實根本不需要什么轉接板什么的,直接把相應的幾根線對接就可以用了,所以要參考電路圖,上面為TQ2440開發板的JTAG電路圖,下面為JLINK的20針電路圖,下面的JLINKV7電路圖是標准接口,網上到處都能找到
10針JTAG針序 |
20針JTAG針序 |
信號 |
1,2 | 1 | VTref |
- | 2 | NC |
3 | 3 | nTRST |
- | 4 | GND |
5 | 5 | TDI |
- | 6 | GND |
7 | 7 | TMS |
8 | 8 | GND |
9 | 9 | TCK |
10 | 10 | GND |
- | 11 | RTCK |
- | 12 | GND |
6 | 13 | TDO |
- | 14 | GND |
4 | 15 | RESET |
- | 16 | GND |
- | 17 | DBGRQ |
- | 18 | GND |
- | 19 | 5V-Supply |
- | 20 | GND |
實際上只需要接4跟線,4號是自連回路,不需要接,1,2接的都是1管腳,而8,10接的是GND,也可以不接