交流JTAG跟我學JTAG協(xié)議破解——第一彈初識JTAGTAP狀態(tài)機_第1頁
交流JTAG跟我學JTAG協(xié)議破解——第一彈初識JTAGTAP狀態(tài)機_第2頁
交流JTAG跟我學JTAG協(xié)議破解——第一彈初識JTAGTAP狀態(tài)機_第3頁
交流JTAG跟我學JTAG協(xié)議破解——第一彈初識JTAGTAP狀態(tài)機_第4頁
交流JTAG跟我學JTAG協(xié)議破解——第一彈初識JTAGTAP狀態(tài)機_第5頁
免費預覽已結(jié)束,剩余3頁可下載查看

下載本文檔

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

文檔簡介

1、準備知識A、基本的狀態(tài)機知識B、基本的 C 語言能力,包括位操作、常用宏定義、數(shù)組、指針等常見內(nèi)容 C 會使用一種單片機D、熟悉 SPI 協(xié)議的物理原理E、XJTAG 的好奇和興趣JTAG 協(xié)議是目前應用最廣泛的下載和仿真協(xié)議,對協(xié)議的最初締造者來說,這也許有點無心插柳柳成蔭的感覺一一最初的JTAGB議只是用來輔助專門的硬件質(zhì)檢部門對印刷電路進行檢測的。這些老賬現(xiàn)不再提了我們現(xiàn)在看到的各種 JTAG 下載和仿真協(xié)議都是各生產(chǎn)廠商在原有 JTAG 協(xié)議的思想上進行擴充的,并不具有通用性,甚至連最基本的電路檢測部分功能也被加以改造一一比如,一個 JTAG 旨令可能在大部分的版本中是 4 位長度的,

2、而對于 AVR32 來說,一個 JTAG 旨令卻是 5 位??傊F(xiàn)在大行其道的 JTAGW 議,不變的部分就只有其核心 TAP 狀態(tài)機了。ARM 有ARM 的 JTAGAVR 有 AVR 的 JTAG51 有 51 的 JTAG在這樣一個缺乏統(tǒng)一標準的街頭”JTAG 代,如果你想學好 JTAG 下載仿真協(xié)議的破解,就必須從 TAP 狀態(tài)機開始。原理解析在你被復雜的時序圖弄得眼花繚亂之前,你應該首先記住以下的斷言:A、JTAG 協(xié)議的本質(zhì)與 SPI 協(xié)議并沒有什么不同,它等于一個復雜的 SS 狀態(tài)機+變長的 MOSI 和 MISO 數(shù)據(jù)移位操作。不過所謂的變長,都是事先約定好的。B、JTAG

3、協(xié)議是一個同步通訊協(xié)議,它是全雙工的。它的通訊原則是以物易物一一一即你如果想得到某些東西,你必須先給與相同長度的內(nèi)容;你如果只是想發(fā)送一些數(shù)據(jù),也會自動獲取相同長度的內(nèi)容,至于交換的內(nèi)容是否有意義,這是另外一回事了。CJTAG 協(xié)議無論多么復雜,實際上只有 4 根線起作用(有時候還有兩根雞肋的 nSRST和 TRST,他們分別是 TMS、 TCKTDI 和 TDO,他們分別對應 SPI 協(xié)議里面的 SSSCKMOSI 和 MISO。在本質(zhì)上,他們并沒有什么不同。即便是 ARM 的 JTAG 那么多的引腳,實際上起作用 JTAG 的也就這 4 根線而已。D、JTAG 的數(shù)據(jù)操作都是基于移位寄存器

4、的。E、如果 JTAG 協(xié)議在某個下載仿真協(xié)議中只是用來發(fā)送控制信息和少量的數(shù)據(jù),而大量的數(shù)據(jù)傳輸是通過額外的其它引腳進行的,即便這個協(xié)議被稱為 JTAG 仿真其本質(zhì)也早已超過 JTAG 了,嚴格來說,不應該稱之為 JTAG 因為 JTAG 協(xié)議中就只有 4 根線(有時候也算上 nSRSTSTRST 而已。典型的如 NEXUS 協(xié)議。說了這么多,我們終于可以開始正式的講解了。一、從 SPI 到 JTAG如果熟悉 SPI,你會發(fā)現(xiàn) SPI 是如此的簡單、和諧一一一根用于二進制位同步的時鐘線 SCK 一根用于主機發(fā)送到從機的數(shù)據(jù)線 MOSI(MasterOutSlaveIn),一根用于從機發(fā)送到主

5、機的數(shù)據(jù)線MISO(MasterInSlaveOut),外加一根用于復位SPI從機控制器以達到通訊同步的控制信號 SS(不妨理解為 SlaveSynchronization)。如果樂意,你很容易就通過消減 MOSI 和 MISO 的方法獲得精簡的單向通訊。前面我們提到,JTAG 的數(shù)據(jù)操作都是基于移位寄存器的,這一點和 SPI 是相同的。JTAG 協(xié)議的核心在于能夠有效地傳輸指令和數(shù)據(jù),并且傳輸指令和數(shù)據(jù)的過程是能夠明確的加以區(qū)別對待而不會造成歧義的。如何實現(xiàn)這一功能呢?JTAG 協(xié)議只是將原本用來復位從機的 SS 信號擴展為一個狀態(tài)機。而該狀態(tài)機每一個狀態(tài)都有兩個狀態(tài)觸發(fā)一一在 TCK(也就

6、是 SCK 的上升沿,TMS(也就是 SS)的電平?jīng)Q定了跳轉(zhuǎn)的分支。下圖就是一個典型的 TAP 狀態(tài)機,值得慶幸的是,該狀態(tài)機所有 JTAG 協(xié)議中都會遵守的部分。7est-Logio-Pesot4Exh2-DRUpdate-tRz_如果這是你第一次研究 TAP 狀態(tài)機,首先你不必去追究 TAP 究竟是哪些英文單詞的Select-DRScunSelocl-IRScanCaptjre-DRCapture-IRShifMRExi11-IRExi12-IRUpdate-IRRun-Tesllcle00Exi:1-DRFuse-DRPau&e-IR縮寫,因為 TestAccessPort 已經(jīng)

7、是過去很久的事情了,現(xiàn)在的 JTAG 狀態(tài)機雖然功能沒變,但早就從事其它高科技”行業(yè)了。第二眼看著附圖,你會發(fā)現(xiàn),其實整個狀態(tài)機不過分為三個部分:信道選擇部分、數(shù)據(jù)信道和指令信道。所謂的信道選擇,就是圖中最頂上由四個狀態(tài)組成的矩形,分別對應著四個狀態(tài):1、JTAGTAP 犬態(tài)機復位狀態(tài)顧名思義,就是進入該狀態(tài),將導致整個硬件 TAP 控制器復位,所有的寄存器都將被初始化。在 TCK 的上升沿,TMS 為低電平時,進入下一個狀態(tài);否則保持不變。2、JTAGTAP 勺 Run-Test/Idle 狀態(tài)其實就是開工”和休息”的選擇分支點。在 TCK 的上升沿,TMS 的高電平將導致狀態(tài)切換,進入數(shù)據(jù)

8、信道的通訊狀態(tài);否則保持不變。3、JTAGTAP 勺 Select-DRScan 狀態(tài)SelectDRScan 翻譯成中文就是選擇數(shù)據(jù)移位寄存器進行移位操作”,簡單說來,就是當我們在該狀態(tài)下,TCK 的上升沿讀取到了 TMS 的低電平將直接進入數(shù)據(jù)信道的操作子狀態(tài)機;在 TCK 的上升沿讀取到了 TMS 的高電平,將切換到指令信道的通訊狀態(tài)。4、JTAGTAP 勺 Select-IRScan 狀態(tài)Select-IRScanO 譯成中文就是選擇指令寄存器進行移位操作”,簡單來說,就是當我們在該狀態(tài)下,TCK 的上升沿讀取到了 TMS 的低電平將直接進入指令信道的操作狀態(tài)機;在 TCK 的上升沿讀

9、取到了 TMS 的高電平,將重新回到 JTAG 的復位狀態(tài)數(shù)據(jù)信道和指令信道對應著兩個子狀態(tài)機,從本質(zhì)上數(shù)據(jù)和指令并沒有任何不同,只是習慣上,指令的長度固定為 4 個二進制位(AVR32 的 JTAG 是 5 個),而數(shù)據(jù)則隨著不同的指令選擇了不同長度的指令寄存器,這個就需要具體查閱相關(guān)的協(xié)議說明了,比如 JTAGIDCODE 的長度固定為 32 位,而 AVR32 的復位指令卻有 5 位(很多情況下別指望是 8 的倍數(shù))。根據(jù)閱讀前面選擇部分 4 個狀態(tài)機”的經(jīng)驗,大家應該對照著圖片自己嘗試去理解剩下的兩個信道。下面,我只就常見的幾個狀態(tài)進行解釋(以數(shù)據(jù)信道為例,指令信道可以參考其內(nèi)容)。1

10、、CaptureDR 狀態(tài)前文說過,JTAG 協(xié)議是基于移位寄存器的,其通訊具有以物易物”的特性,在我們進入真正的數(shù)據(jù)傳輸之前,需要告知 JTAG 準備通訊了哦?你有沒有東西要給我哈?”,于是 CaptureDR 就是一個給 JTAGB 會將需要傳達給我們的數(shù)據(jù)放入指定的移位寄存器中的狀態(tài)。2、ShiftDR 狀態(tài)這個狀態(tài)就是通過 TDI 和 TDO 進行數(shù)據(jù)傳輸?shù)臓顟B(tài)。需要說明的是,即便進入了該狀態(tài),TMS 上的電平在 TCK 的上升沿也是會被讀取的,從圖中看到,一旦在 TMS 上讀取到高電平,系統(tǒng)就會跳出 ShiftDR 狀態(tài)如果此時數(shù)據(jù)沒有傳輸完成,造成的后果是不確定的。請大家注意,我所

11、說的是不確定,而不是很嚴重”:同樣是因為移位寄存的傳輸特性,有時候并不要求一定要將所有的數(shù)據(jù)都完整的進行傳輸,比如在 AVR32 中,針對 SAB 的數(shù)據(jù)操作,往往只需要進行最關(guān)鍵的部分,詳細地內(nèi)容可以參照相關(guān)的數(shù)據(jù)手冊;但有的時候,數(shù)據(jù)的不完整傳輸則會導致很嚴重的后果,這取決于具體的 JTAG 通訊協(xié)議。所以,為了保險起見,一旦進入 ShiftDR 狀態(tài),在發(fā)送最后一個數(shù)據(jù)之前,請保持 TMS 為低電平,當要發(fā)送最后一個數(shù)據(jù)時,應該將TCK 跳變?yōu)樯仙貢r,系統(tǒng)既完成了最后一個數(shù)據(jù)的傳輸,3、ExitlDR 狀態(tài)該狀態(tài)提供了我們一個在剛才輸入的數(shù)據(jù)生效前,TMS 設置為高電平,這樣,當也成功

12、的退出了 ShiftDR 狀態(tài)。重新修改的機會。一般情況下,我們直接保持 TMS 的高電平,并在 TCK 的上升?&驅(qū)動 TAP 狀態(tài)機,直接進入 Update-DR狀態(tài)。4、Update-DR 狀態(tài)顧名思義,就是使我們輸入的數(shù)據(jù)生效一一一般 JTAG 內(nèi)部的動作就是觸發(fā)一個鎖存信號,將移位寄存器中的內(nèi)容并行的讀取到對應的寄存器中。Update-DR 有兩個出口,一個是,TMS 的低電平對應 Run-test/Idle,還有一個是 TMS 的高電平對應的 Select-DRScan。這兩個操作看似區(qū)別不大,但是意義非凡。前者往往會導致 JTAG 內(nèi)部產(chǎn)生額外的時序(比如發(fā)生一個信號,表

13、示完成了一個特定的周期操作,在 AVR 的 JTAG 下載中有此實例);后者則表示完成了一次數(shù)據(jù)操作,將進行下一個數(shù)據(jù)的操作,但是這些操作屬于同一個操作周期。當然有些情況下,這兩種方法是沒有區(qū)別的。關(guān)于理論部分的講解,到此為止,留下一個小小的思考,當 TAP 狀態(tài)機處于一個未知的狀態(tài)時,如何才能通過一個統(tǒng)一的操作使其回到 Run-Test/Idel 狀態(tài)呢?給一個小小的提示,針對 TAP狀態(tài)機的 TMS 信號,給定固定的電平,在有限的 TCK 上升沿中,完成狀態(tài)機的復位。那么這個有限的范圍最少是多少個時鐘周期?這個固定的電平究竟是高還是低呢?實際應用下面的代碼是我應用在 SnailmkIIDE

14、MO 中用來操作 TAP 狀態(tài)機的實際代碼,它根據(jù)用戶輸入的 TAP 控制流,產(chǎn)生 TAP 控制時序,比如我們需要從 Run-Test/Idle 狀態(tài)進入Shift-IR 狀態(tài),根據(jù) TAP 狀態(tài)圖,我們很容易得出需要產(chǎn)生的 TMS 信號依次為 1(進入 SelectDRScan)1(進入 SelectIRScan)0(進入 CaptureIR)0(進入 Shift-IRScan),一共四個二進制位,根據(jù)從 LSB 至 ijMSB 依次發(fā)送的順序,需要傳送給函數(shù)的值就是 0 x03,長度為4。需要注意的是,進入 Shift-IR 狀態(tài)以后,有可能要設置此時的需要 TMS 保持的電平狀態(tài), 因此

15、, 實際傳送的 0 x03 其內(nèi)容應該是 11000,最后一個 0 表示完成前面 4 個 TMS 時序的輸入以后,TMS 保持低電平。最后一個 0 不計入長度。1.16. voidJTAG_TAP_Control(UINT8chCTRStream,UINT8chLength)17. (18. UINT8n=0;19.20. 狀態(tài)機控制序列21. for(n=0;n<chLength;n+)22. 23. CLR_TCK24. if(chCTRStream&BIT(n)25. 26. SET_TMS27. 28. else29. 30. CLR_TMS2./*15.*/31

16、. 32. JTAG_CLOCK_DELAY33. SET_TCK34.35. /*延時部分*/36. JTAG_CLOCK_DELAY37. 38.39. 保持電平40. if(chCTRStream&BIT(chLength)41. 42. SET_TMS43. 44. else45. 46. CLR_TMS47. 48. 49.復制代碼為了方便使用,我們可以將一些常用的 TAP 操作用宏進行封裝,從而獲得較高的代碼可讀性:1.2.#defineJTAG_TAP_TEST_LOGIC_RESETJTAG_TAP_Control(0 x1F,6);3.#defineJTAG_TAP_

17、SHIFT_IRJTAG_TAP_Control(0 x03,4);4.#defineJTAG_TAP_RETURN_RUN_TEST_IDELJTAG_TAP_Control(0 x01,2);5.#defineJTAGTAPENTERSHIFTDRFROMSHIFTIRJTAGTAPControl(0 x03,4);6.#defineJTAG_TAP_SHIFT_DRJTAG_TAP_Control(0 x01,3);7.復制代碼工程實例Step1:首先我們要下載一個 JTAG 時序分析軟件 JTAGHacker點擊此處下載 ourdev496456.rar(文件大小:235K)(原文彳名:上位機.rar)Step2:我們要下載一個示例時序文件 EnterPDI.JTG點擊此處下載 ourdev496458.rar(文件大?。?04 字節(jié))(原文彳名:EnterPDI.rar)Step3:打開軟件 JTAGHacke從文件菜單中選擇打開-EnterPDI.JTAG 如圖所示。Step4:單擊清除”按鈕來復位整個分析期,依次單擊單步分析”按鈕,觀察左邊的 TAP 狀態(tài)機,對口 JTAGLog 中的說明,觀察時序波形,理解 TAP 狀態(tài)機的操作流程。Step5:如果你脫離波形文件直接研究 TAP 狀態(tài)機,可以通過最

溫馨提示

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

評論

0/150

提交評論