關於JTAG口,你瞭解多少?
素材來源:FPGA資源俠客
在FPGA研發及學習過程中,有一個關鍵步驟就是下板實現,做硬件“硬現”很重要,一般來説用JTAG口比較常見一些,因此相信肯定有些大俠遇到過JTAG口失靈或者損壞無法使用的事情。最近我就遇到了這類事情,FPGA的JTAG口突然就不能下載程序了,而且這種事情已經不是第一次了,之前在做項目的時候也出現過,而且出現的形式也極其相似,之前還用的好好的,第二天就不行了,真是讓人鬱悶。為此,本人也是去嘗試了很多解決辦法,一開始也沒有去設想是JTAG口壞了,於是乎,本人換了usb-blaster,可一點反應也沒有。難道真的是JTAG口壞了?於是,本人就去查閲相關資料去搞清楚問題的本質在哪裏,下面就是本人的一些收穫,分享出來,僅供各位大俠參考,一起交流學習。
至於JTAG口是什麼,這裏我們也來探討一下,JTAG英文全稱是 Joint Test Action Group,翻譯過來中文就是聯合測試工作組。
JTAG是一種IEEE標準用來解決板級問題,誕生於20世紀80年代。今天JTAG被用來燒錄、debug、探查端口。當然,最原始的使用是邊界測試。
1、邊界測試
舉個例子,你有兩個芯片,這兩個芯片之間連接了很多很多的線,怎麼確保這些線之間的連接是OK的呢,用JTAG,它可以控制所有IC的引腳。這叫做芯片邊界測試。
JTAG發展到現在已經有腳了,通常四個腳:TDI,TDO,TMS,TCK,當然還有個復位腳TRST。對於芯片上的JTAG的腳實際上是專用的。
TDI:測試數據輸入,數據通過TDI輸入JTAG口;
TDO:測試數據輸出,數據通過TDO從JTAG口輸出;
TMS:測試模式選擇,用來設置JTAG口處於某種特定的測試模式;
TCK:測試時鐘輸入;
TRST:測試復位。
3、JTAG如何工作
PC控制JTAG:用JTAG電纜連接PC的打印端口或者USB或者網口。最簡單的是連接打印端口。
TMS:在每個含有JTAG的芯片內部,會有個JTAG TAP控制器。TAP控制器是一個有16個狀態的狀態機,而TMS就是這玩意的控制信號。當TMS把各個芯片都連接在一起的時候,所有的芯片的TAP狀態跳轉是一致的。下面是TAP控制器的示意圖:
IR:命令寄存器,你可以寫值到這個寄存器中通知JTAG幹某件事。每個TAP只有一個IR寄存器而且長度是一定的。
DR:TAP可以有多個DR寄存器,與IR寄存器相似,每個IR值會選擇不同的DR寄存器。(很迷)
4、JTAG鏈相關疑問
計算JTAG鏈中的IC數目:
一個重要的應用是IR值是全一值,表示BYPASS命令,在BYPASS模式中,TAP控制器中的DR寄存器總是單bit的,從輸入TDI到輸出TDO,通常一個週期,啥也不幹。
可用BYPASS模式計算IC數目。如果每個IC的TDI-TDO鏈的延遲是一個時鐘,我們可以發送一些數據並檢測它延遲了多久,那麼久可以推算出JTAG鏈中的IC數目。
得到JTAG鏈中的器件ID:
大多數的JTAG IC都支持IDCODE命令。在IDCODE命令中,DR寄存器會裝載一個32bit的代表器件ID的值。不同於BYPASS指令,在IDCODE模式下IR的值沒有標準。不過每次TAP控制器跳轉到Test-Logic-Reset態,它會進入IDCODE模式,並裝載IDCODE到DR。
5、邊界掃描:
上電時的操作流程順序:
1.在FPGA開發板及相關設備斷電的前提下,插上JTAG下載線接口;
2.插上USB Blaster或者ByteBlasterII的電纜;
3.接通FPGA開發板的電源。
下電時的操作流程順序:
1.斷開FPGA開發板及相關設備的電源;
2.斷開USB Blaster或者ByteBlasterII的電纜;
3.拔下JTAG下載線接口,並放置適宜地方存儲。
雖然上述的操作步驟有點繁瑣,有時我們在使用的時候也是不以為然,但是為了保證芯片不被損壞,建議大家還是中規中矩的按照上述的步驟來操作。本人上述出現的問題,經過檢測後就是TCK跟GND短路了,雖然發生的概率不是很大,但是為了能夠更合理更長久的的使用硬件相關設備,還是建議大家在實操過程中,不要擔心繁瑣,中規中矩操作,換個角度思考,“多磨多練”也是對自己有好處的。最後,還是給各位嘮叨一句,關於JTAG下載口的使用最好不要帶電熱插拔,起碼可以讓JTAG口“活”的久一些,畢竟長情陪伴也是挺不錯的,不要等到失去了才知道惋惜。