跟我學(xué)JTAG協(xié)議破解_第1頁
跟我學(xué)JTAG協(xié)議破解_第2頁
跟我學(xué)JTAG協(xié)議破解_第3頁
跟我學(xué)JTAG協(xié)議破解_第4頁
跟我學(xué)JTAG協(xié)議破解_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——跟我學(xué)JTAG協(xié)議破解[JTAG]跟我學(xué)JTAG協(xié)議破解——第一彈初識(shí)JTAGTAP狀態(tài)機(jī)

2023年9月18日5:28

[準(zhǔn)備知識(shí)]

A、基本的狀態(tài)機(jī)知識(shí)

B、基本的C語言能力,包括位操作、常用宏定義、數(shù)組、指針等常見內(nèi)容C、會(huì)使用一種單片機(jī)

D、熟悉SPI協(xié)議的物理原理E、對(duì)JTAG的好奇和興趣

[序言]

JTAG協(xié)議是目前應(yīng)用最廣泛的下載和仿真協(xié)議,對(duì)協(xié)議的最初締造者來說,這可能有點(diǎn)無心插柳柳成蔭

的感覺——最初的JTAG協(xié)議只是用來輔助專門的硬件質(zhì)檢部門對(duì)印刷電路進(jìn)行檢測的。這些老賬現(xiàn)不再提了

我們現(xiàn)在看到的各種JTAG下載和仿真協(xié)議都是各生產(chǎn)廠商在原有JTAG協(xié)議的思想上進(jìn)行擴(kuò)展的,并不具有通

用性,甚至連最基本的電路檢測部分功能也被加以改造——譬如,一個(gè)JTAG指令可能在大部分的版本中是4

位長度的,而對(duì)于AVR32來說,一個(gè)JTAG指令卻是5位。總之,現(xiàn)在大行其道的JTAG協(xié)議,不變的部分就只有

其核心TAP狀態(tài)機(jī)了。ARM有ARM的JTAG,AVR有AVR的JTAG,51有51的JTAG……

在這樣一個(gè)缺乏統(tǒng)一標(biāo)準(zhǔn)的“街頭〞JTAG時(shí)代,假使你想學(xué)好JTAG下載仿真協(xié)議的破解,就必需從TAP狀態(tài)機(jī)開始。

[原理解析]

在你被繁雜的時(shí)序圖弄得眼花繚亂之前,你應(yīng)當(dāng)首先記住以下的斷言:

A、JTAG協(xié)議的本質(zhì)與SPI協(xié)議并沒有什么不同,它等于一個(gè)繁雜的SS狀態(tài)機(jī)+變長的MOSI和MISO數(shù)據(jù)移位

操作。不過所謂的變長,都是事先約定好的。

B、JTAG協(xié)議是一個(gè)同步通訊協(xié)議,它是全雙工的。它的通訊原則是“以物易物〞——即你假使想得到某

些東西,你必需先給與一致長度的內(nèi)容;你假使只是想發(fā)送一些數(shù)據(jù),也會(huì)自動(dòng)獲取一致長度的內(nèi)容,

至于交換的內(nèi)容是否有意義,這是另外一回事了。

C、JTAG協(xié)議無論多么繁雜,實(shí)際上只有4根線起作用(有時(shí)候還有兩根雞肋的nSRST和TRST),他們分別

是TMS、TCK、TDI和TDO,他們分別對(duì)應(yīng)SPI協(xié)議里面的SS、SCK、MOSI和MISO。在本質(zhì)上,他們并沒有

什么不同。即便是ARM的JTAG那么多的引腳,實(shí)際上起作用JTAG的也就這4根線而已。

D、JTAG的數(shù)據(jù)操作都是基于移位寄放器的。

E、假使JTAG協(xié)議在某個(gè)下載仿真協(xié)議中只是用來發(fā)送控制信息和少量的數(shù)據(jù),而大量的數(shù)據(jù)傳輸是通過

額外的其它引腳進(jìn)行的,即便這個(gè)協(xié)議被稱為JTAG仿真其本質(zhì)也早已超過JTAG了,嚴(yán)格來說,不應(yīng)當(dāng)

稱之為JTAG。由于JTAG協(xié)議中就只有4根線(有時(shí)候也算上nSRST和TRST)而已。典型的如NEXUS協(xié)議。

說了這么多,我們終究可以開始正式的講解了。

一、從SPI到JTAG

假使熟悉SPI,你會(huì)發(fā)現(xiàn)SPI是如此的簡單、和諧——一根用于二進(jìn)制位同步的時(shí)鐘線SCK,一根用于

主機(jī)發(fā)送到從機(jī)的數(shù)據(jù)線MOSI(MasterOutSlaveIn),一根用于從機(jī)發(fā)送到主機(jī)的數(shù)據(jù)線MISO(Master

InSlaveOut),外加一根用于復(fù)位SPI從機(jī)控制器以達(dá)到通訊同步的控制信號(hào)SS(不妨理解為Slave

Synchronization)。假使樂意,你很簡單就通過消減MOSI和MISO的方法獲得精簡的單向通訊。

前面我們提到,JTAG的數(shù)據(jù)操作都是基于移位寄放器的,這一點(diǎn)和SPI是一致的。JTAG協(xié)議的核心在

于能夠有效地傳輸指令和數(shù)據(jù),并且傳輸指令和數(shù)據(jù)的過程是能夠明確的加以區(qū)別對(duì)待而不會(huì)造成歧義的。

如何實(shí)現(xiàn)這一功能呢?JTAG協(xié)議只是將原本用來復(fù)位從機(jī)的SS信號(hào)擴(kuò)展為一個(gè)狀態(tài)機(jī)。而該狀態(tài)機(jī)每一個(gè)

狀態(tài)都有兩個(gè)狀態(tài)觸發(fā)——在TCK(也就是SCK)的上升沿,TMS(也就是SS)的電平?jīng)Q定了跳轉(zhuǎn)的分支。

下圖就是一個(gè)典型的TAP狀態(tài)機(jī),值得慶幸的是,該狀態(tài)機(jī)所有JTAG協(xié)議中都會(huì)遵守的部分。

假使這是你第一次研究TAP狀態(tài)機(jī),首先你不必去追究TAP畢竟是哪些英文單詞的縮寫,由于TestAccess

Port已經(jīng)是過去很久的事情了,現(xiàn)在的JTAG狀態(tài)機(jī)雖然功能沒變,但早就從事其它“高科技〞行業(yè)了。

其次眼看著附圖,你會(huì)發(fā)現(xiàn),其實(shí)整個(gè)狀態(tài)機(jī)不過分為三個(gè)部分:信道選擇部分、數(shù)據(jù)信道和指令信道。

所謂的信道選擇,就是圖中最頂上由四個(gè)狀態(tài)組成的矩形,分別對(duì)應(yīng)著四個(gè)狀態(tài):1、JTAGTAP狀態(tài)機(jī)復(fù)位狀態(tài)

顧名思義,就是進(jìn)入該狀態(tài),將導(dǎo)致整個(gè)硬件TAP控制器復(fù)位,所有的寄放器都將被初始化。在

TCK的上升沿,TMS為低電平日,進(jìn)入下一個(gè)狀態(tài);否則保持不變。2、JTAGTAP的Run-Test/Idle狀態(tài)

其實(shí)就是“開工〞和“休息〞的選擇分支點(diǎn)。在TCK的上升沿,TMS的高電平將導(dǎo)致狀態(tài)切換,進(jìn)

入數(shù)據(jù)信道的通訊狀態(tài);否則保持不變。3、JTAGTAP的Select-DRScan狀態(tài)

SelectDRScan翻譯成中文就是“選擇數(shù)據(jù)移位寄放器進(jìn)行移位操作〞,簡單說來,就是當(dāng)我們

在該狀態(tài)下,TCK的上升沿讀取到了TMS的低電平將直接進(jìn)入數(shù)據(jù)信道的操作子狀態(tài)機(jī);在TCK的上升

沿讀取到了TMS的高電平,將切換到指令信道的通訊狀態(tài)。4、JTAGTAP的Select-IRScan狀態(tài)

Select-IRScan翻譯成中文就是“選擇指令寄放器進(jìn)行移位操作〞,簡單來說,就是當(dāng)我們?cè)谠摖?/p>

態(tài)下,TCK的上升沿讀取到了TMS的低電平將直接進(jìn)入指令信道的操作狀態(tài)機(jī);在TCK的上升沿讀取到了

TMS的高電平,將重新回到JTAG的復(fù)位狀態(tài)。

數(shù)據(jù)信道和指令信道對(duì)應(yīng)著兩個(gè)子狀態(tài)機(jī),從本質(zhì)上數(shù)據(jù)和指令并沒有任何不同,只是習(xí)慣上,指令

的長度固定為4個(gè)二進(jìn)制位(AVR32的JTAG是5個(gè)),而數(shù)據(jù)則隨著不同的指令選擇了不同長度的指令

寄放器,這個(gè)就需要具體查閱相關(guān)的協(xié)議說明白,譬如JTAGIDCODE的長度固定為32位,而AVR32的復(fù)

位指令卻有5位(好多狀況下別指望是8的倍數(shù))。根據(jù)閱讀前面“選擇部分4個(gè)狀態(tài)機(jī)〞的經(jīng)驗(yàn),大家

應(yīng)當(dāng)對(duì)照著圖片自己嘗試去理解剩下的兩個(gè)信道。下面,我只就常見的幾個(gè)狀態(tài)進(jìn)行解釋(以數(shù)據(jù)信

道為例,指令信道可以參考其內(nèi)容)。

1、CaptureDR狀態(tài)

前文說過,JTAG協(xié)議是基于移位寄放器的,其通訊具有“以物易物〞的特性,在我們進(jìn)入真正的數(shù)

據(jù)傳輸之前,需要告知JTAG“準(zhǔn)備通訊了哦?你有沒有東西要給我哈?〞,于是CaptureDR就是一個(gè)

給JTAG機(jī)遇將需要傳達(dá)給我們的數(shù)據(jù)放入指定的移位寄放器中的狀態(tài)。2、ShiftDR狀態(tài)

這個(gè)狀態(tài)就是通過TDI和TDO進(jìn)行數(shù)據(jù)傳輸?shù)臓顟B(tài)。需要說明的是,即便進(jìn)入了該狀態(tài),TMS上的電平

在TCK的上升沿也是會(huì)被讀取的,從圖中看到,一旦在TMS上讀取到高電平,系統(tǒng)就會(huì)跳出ShiftDR狀態(tài)

假使此時(shí)數(shù)據(jù)沒有傳輸完成,造成的后果是不確定的。請(qǐng)大家注意,我所說的是不確定,而不是“很嚴(yán)

重〞:同樣是由于移位寄放的傳輸特性,有時(shí)候并不要求一定要將所有的數(shù)據(jù)都完整的進(jìn)行傳輸,譬如

在AVR32中,針對(duì)SAB的數(shù)據(jù)操作,往往只需要進(jìn)行最關(guān)鍵的部分,詳細(xì)地內(nèi)容可以參照相關(guān)的數(shù)據(jù)手冊(cè);

但有的時(shí)候,數(shù)據(jù)的不完整傳輸則會(huì)導(dǎo)致很嚴(yán)重的后果,這取決于具體的JTAG通訊協(xié)議。所以,為了保

險(xiǎn)起見,一旦進(jìn)入ShiftDR狀態(tài),在發(fā)送最終一個(gè)數(shù)據(jù)之前,請(qǐng)保持TMS為低電平,當(dāng)要發(fā)送最終一個(gè)數(shù)

據(jù)時(shí),應(yīng)當(dāng)將TMS設(shè)置為高電平,這樣,當(dāng)TCK跳變?yōu)樯仙貢r(shí),系統(tǒng)既完成了最終一個(gè)數(shù)據(jù)的傳輸,也

成功的退出了ShiftDR狀態(tài)。3、Exit1DR狀態(tài)

該狀態(tài)提供了我們一個(gè)在方才輸入的數(shù)據(jù)生效前,重新修改的機(jī)遇。一般狀況下,我們直接保持TMS

的高電平,并在TCK的上升沿驅(qū)動(dòng)TAP狀態(tài)機(jī),直接進(jìn)入U(xiǎn)pdate-DR狀態(tài)。4、Update-DR狀態(tài)

顧名思義,就是使我們輸入的數(shù)據(jù)生效——一般JTAG內(nèi)部的動(dòng)作就是觸發(fā)一個(gè)鎖存信號(hào),將移位寄放

器中的內(nèi)容并行的讀取到對(duì)應(yīng)的寄放器中。Update-DR有兩個(gè)出口,一個(gè)是,TMS的低電平對(duì)應(yīng)Run-test/

Idle,還有一個(gè)是TMS的高電平對(duì)應(yīng)的Select-DRScan。這兩個(gè)操作看似區(qū)別不大,但是意義非凡。前者

往往會(huì)導(dǎo)致JTAG內(nèi)部產(chǎn)生額外的時(shí)序(譬如發(fā)生一個(gè)信號(hào),表示完成了一個(gè)特定的周期操作,在AVR的

JTAG下載中有此實(shí)例);后者則表示完成了一次數(shù)據(jù)操作,將進(jìn)行下一個(gè)數(shù)據(jù)的操作,但是這些操作屬于

同一個(gè)操作周期。當(dāng)然有些狀況下,這兩種方法是沒有區(qū)別的。

關(guān)于理論部分的講解,到此為止,留下一個(gè)小小的思考,當(dāng)TAP狀態(tài)機(jī)處于一個(gè)未知的狀態(tài)時(shí),如何才能

通過一個(gè)統(tǒng)一的操作使其回到Run-Test/Idel狀態(tài)呢?給一個(gè)小小的提醒,針對(duì)TAP狀態(tài)機(jī)的TMS信號(hào),給

定固定的電平,在有限的TCK上升沿中,完成狀態(tài)機(jī)的復(fù)位。那么這個(gè)有限的范圍最少是多少個(gè)時(shí)鐘周期?

這個(gè)固定的電平畢竟是高還是低呢?

[實(shí)際應(yīng)用]

下面的代碼是我應(yīng)用在SnailmkIIDEMO中用來操作TAP狀態(tài)機(jī)的實(shí)際代碼,它根據(jù)用戶輸入的TAP控制流,產(chǎn)

生TAP控制時(shí)序,譬如我們需要從Run-Test/Idle狀態(tài)進(jìn)入Shift-IR狀態(tài),根據(jù)TAP狀態(tài)圖,我們很簡單得出需要產(chǎn)

生的TMS信號(hào)依次為1(進(jìn)入SelectDRScan)1(進(jìn)入SelectIRScan)0(進(jìn)入CaptureIR)0(進(jìn)入Shift-IR

Scan),一共四個(gè)二進(jìn)制位,根據(jù)從LSB到MSB依次發(fā)送的順序,需要傳送給函數(shù)的值就是0x03,長度為4。需要注

意的是,進(jìn)入Shift-IR狀態(tài)以后,有可能要設(shè)置此時(shí)的需要TMS保持的電平狀態(tài),因此,實(shí)際傳送的0x03其內(nèi)容應(yīng)

該是11000,最終一個(gè)0表示完成前面4個(gè)TMS時(shí)序的輸入以后,TMS保持低電平。最終一個(gè)0不計(jì)入長度。1./***********************************************************2.*函數(shù)說明:JTAGTAP狀態(tài)機(jī)控制函數(shù)*3.*輸入:控制序列,序列長度*4.*輸出:無*5.*調(diào)用函數(shù):無*6.**7.*使用說明*8.*1、TMS在TCK上升邊沿輸出狀態(tài)控制量。*9.*2、連續(xù)5個(gè)TCK周期在TMS上輸出高電平將進(jìn)入Test-*10.*Logic-Reset模式。*11.*3、使用該函數(shù)時(shí),請(qǐng)將狀態(tài)機(jī)跳轉(zhuǎn)以后TMS需要保*12.*持的電平也作為一個(gè)有效輸入?yún)⑴c到序列的末尾*13.*但描述序列長度的數(shù)值不需要相應(yīng)的增加。*14.***********************************************************/15.voidJTAG_TAP_Control(UINT8chCTRStream,UINT8chLength)16.{17.UINT8n=0;18.19.//狀態(tài)機(jī)控制序列20.for(n=0;nchLength;n++)21.{22.CLR_TCK23.if(chCTRStream&BIT(n))24.{25.SET_TMS26.}27.else

28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.{

CLR_TMS}

JTAG_CLOCK_DELAYSET_TCK

/*延時(shí)部分*/

JTAG_CLOCK_DELAY}

//保持電平

if(chCTRStream2.#defineJTAG_TAP_SHIFT_IRJTAG_TAP_Control(0x03,4);3.#defineJTAG_TAP_RETURN_RUN_TEST_IDELJTAG_TAP_Control(0x01,2);4.#define

JTAG_TAP_ENTER_SHIFT_DR_FROM_SHIFT_IRJTAG_TAP_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論