[交流][jtag]跟我學jtag協議破解——第一彈初識jtagtap狀態(tài)機_第1頁
[交流][jtag]跟我學jtag協議破解——第一彈初識jtagtap狀態(tài)機_第2頁
[交流][jtag]跟我學jtag協議破解——第一彈初識jtagtap狀態(tài)機_第3頁
[交流][jtag]跟我學jtag協議破解——第一彈初識jtagtap狀態(tài)機_第4頁
[交流][jtag]跟我學jtag協議破解——第一彈初識jtagtap狀態(tài)機_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、一個jtag指 令卻是5位??傄椰F在大行具道的jtag協議,不變的部分就只有具核心tap狀態(tài)機了。 arm 有 arm 的 jtag, avr 有 avr 的 jtag, 51 有 51 的 jtag.在這樣一個缺乏統一標準的"街頭jtag時代,如果你想學好jtag下載仿真協議的破 解,就必須從tap 狀態(tài)機開始。原理解析在你被復雜的時序圖弄得眼花繚亂z前,你應該首先記住以下的斷言:a、jtag協議的本質與spi協議并沒有什么不同,它等于一個復雜的ss狀態(tài)機+變長 的mosi和miso數據移位操作。不過所謂的變長,都是事先約定好的。b、jtag協議是一個同步通訊協議,它是全雙工的。它

3、的通訊原則是“以物易物一一 即你如果想得到某些東四,你必須先給與相同長度的內容;你如果貝是想發(fā)送一些數據, 也會自動獲取相同長度的內容,至于交換的內容是否有意義,這是另外一冋事了。c、jtag協議無論多么復雜,實際上只有4根線起作用(有時候還有兩根雞肋的nsrst 和trst),他們分別是tms、tck、tdi和tdo,他們分別對應spi協議里面的ss、sck、 mosi和misoo在木質上,他們并沒有什么不同。即便是arm的jtag那么多的引腳, 實際上起作用jtag的也就這4根線而已。d、jtag的數據操作都是基于移位寄存器的。e、如果jtag協議在某個下載仿真協議中只是用來發(fā)送控制信息和

4、少量的數據,而大 量的數據傳輸是通過額外的具它引腳進行的,即便這個協議被稱為jtag仿真其本質也早 已超過jtag 7 ,嚴格來說,不應該稱之為jtag。因為jtag協議屮就只有4根線(有時 候也算上nsrst和trst)而已。典型的如nexus協議。說了這么多,我們終于可以開始正式的講解了。一、從 spi 到 jtag如果熟悉spi,你會發(fā)現spi是如此的簡單、和諧一一一根用于二進制位同步的時鐘 線sck,根用于主機發(fā)送到從機的數據線mosi (master out slave in),根用于從機 發(fā)送到主機的數據線miso (masterln slave out),外加一根用于復位spi從

5、機控制器以達 到通訊同步的控制信號ss (不妨理解為slave synchronization)o如果圧意,你很容易就通過消減mosi和miso的方法獲得精簡的單向通訊。前面我們提到,jtag的數據操作都是基于移位寄存器的,這一點和spi是相同的。 jtag i-辦議的核心在于能夠有效地傳輸指令和數據,并且傳輸指令和數據的過程是能夠明 確的加以區(qū)別對待而不會造成歧義的。如何實現這一功能呢? jtag協議只是將原木用來復位從機的ss信號擴展為一個狀態(tài) 機。而該狀態(tài)機每一個狀態(tài)都冇兩個狀態(tài)觸發(fā)一一在tck (也就是sck)的上升沿,tms (也就是ss)的電平決定了跳轉的分支。下圖就是一個典型的t

6、ap狀態(tài)機,值得慶幸的是,該狀態(tài)機所有jtag協議中都會遵 守的部分。如果這是你笫一次研究tap狀態(tài)機,首先你不必去追究tap究竟是哪些英文單詞的 縮寫,因為test access port已經是過去很久的事情了,現在的jtag狀態(tài)機雖然功能沒 變,但早就從事其它“高科技行業(yè)了。第二眼看著附圖,你會發(fā)現,其實整個狀態(tài)機不過分為三個部分:信道選擇部分、數 據信道和指令信道。所謂的信道選擇,就是圖中最頂上由四個狀態(tài)組成的矩形,分別對應著四個狀態(tài):1、jtag tap狀態(tài)機復位狀態(tài)顧名思、義,就是進入該狀態(tài),將導致整個硬件tap控制器復位,所冇的寄存器 都將被初始化。在tck的上升沿,tms為低電平

7、時,進入下一個狀態(tài);否則保持不變。2、jtag tap 的 run-test/ldle 狀態(tài)其實就是“開工和“休息的選擇分支點。在tck的上升沿,tms的高電平將導致 狀態(tài)切換,進入數據信道的通訊狀態(tài);否則保持不變。3、jtag tap 的 select-dr scan 狀態(tài)select dr scan翻譯成中文就是“選擇數據移位寄存器進行移位操作,簡單說來, 就是當我們在該狀態(tài)下,tck的上升沿讀取到了 tms的低電平將直接進入數據信道的操 作子狀態(tài)機;在tck的上升沿讀取到了 tms的高電平,將切換到指令信道的通訊狀態(tài)。4、jtag tap 的 select-ir scan 狀態(tài)selec

8、t-irscan翻譯成中文就是選擇指令寄存器進行移位操作,簡單來說,就是 當我們在該狀態(tài)下,tck的上升沿讀取到了 tms的低電平將直接進入指令信道的操作狀 態(tài)機;在tck的上升沿讀取到了 tms的高電平,將重新回到jtag的復位狀態(tài)數據信道和指令信道對應著兩個子狀態(tài)機,從本質上數據和指令并沒有任何不同, 只是習慣上,指令的長度固定為4個二進制位(avr32的jtag是5個),而數據則隨著 不同的指令選擇了不同長度的指令寄存器,這個就需要具體查閱相關的協議說明了,比 如jtag idcode的長度固定為32位,而avr32的復位指令卻有5位(很多情況下別指 望是8的倍數)。根據閱讀前血“選擇部

9、分4個狀態(tài)機的經驗,大家應該対照著圖片自 己嘗試去理解剩下的兩個信道。下面,我只就常見的兒個狀態(tài)進行解釋(以數據信道為例,指令信道可以參考其內容)。capture dr 狀態(tài)前文說過,jtag協議是基于移位寄存器的,其通訊具有"以物易物的特性,在我 們進入真正的數據傳輸之而,需要告知jtag“準備通訊了哦?你有沒有東西要給我哈? “, 于是capture dr就是一個給jtag機會將需要傳達給我們的數據放入指定的移位寄存器 屮的狀態(tài)。2、shift dr 狀態(tài)這個狀態(tài)就是通過tdi和td0進行數據傳輸的狀態(tài)。需要說明的是,即便進入了 該狀態(tài),tms上的電平在tck的上升沿也是會被讀取

10、的,從圖中看到,一旦在tms ± 讀取到高電平,系統就會跳出shift dr狀態(tài)如果此時數據沒有傳輸完成,造成的示果是不確定的。請人家注意,我所說的是不 確定,而不是“很嚴重:同樣是因為移位寄存的傳輸特性,冇時候并不要求一定要將所 有的數據都完整的進行傳輸,比如在avr32中,針對sab的數據操作,往往只需耍進行 最關鍵的部分,詳細地內容可以參照相關的數據手冊;但有的時候,數據的不完整傳輸則會導致很嚴重的后果,這取決于具體的jtag通 訊協議。所以,為了保險起見,一旦進入shift dr狀態(tài),在發(fā)送最后一個數據之而,請 保持tms為低電平,當要發(fā)送最后一個數據時,應該將tms設置為高

11、電平,這樣,當 tck跳變?yōu)樯仙貢r,系統既完成了最后一個數據的傳輸,也成功的退出了 shift dr狀態(tài)。3、exitl dr 狀態(tài)該狀態(tài)提供了我們一個在剛才輸入的數據生效前,重新修改的機會。一般情況下,我們直接保持tms的高電平,并在tck的上升沿驅動tap狀態(tài)機,直接進入update-dr 狀態(tài)。4、update-dr 狀態(tài)顧名思義,就是使我們輸入的數據生效一一一般jtag內部的動作就是觸發(fā)一個鎖 存信號,將移位寄存器屮的內容并行的讀取到對應的寄存器屮。update-dr有兩個出口, 個是,tms的低電平對應run-test/ldle,還冇一個是tms的高電平對應的select-dr s

12、can0這兩個操作看似區(qū)別不人,但是意義非凡。前者往往會導致jtag內部產生額外的 時序(比如發(fā)生一個信號,表示完成了一個特定的周期操作,在avr的jtag下載中有 此實例);后者則表示完成了一次數據操作,將進行下一個數據的操作,但是這些操作屬 于同一個操作周期。當然有些情況下,這兩種方法是沒有區(qū)別的。關于理論部分的講解,到此為止,留下一個小小的思考,當tap狀態(tài)機處于一個未 知的狀態(tài)時,如何才能通過一個統一的操作使其回到run-test/ldel狀態(tài)呢?給一個小小 的捉示,針對tap狀態(tài)機的tms信號,給定固定的電平,在有限的tck上升沿屮,完成 狀態(tài)機的復位。那么這個有限的范i韋i最少是多

13、少個時鐘周期?這個固定的電平究竟是高還是低呢?實際應用卜面的代碼是我應用在snail mkll demo屮川來操作tap狀態(tài)機的實際代碼,它根據 用戶輸入的tap控制流,產生tap控制時序,比如我們需要從run-test/ldle狀態(tài)進入 shifmr狀態(tài),根據tap狀態(tài)圖,我們很容易得出盂要產生的tms信號依次為1(進入select dr scan) 1 (進入 select ir scan) 0 (進入 capture ir) 0 (進入 shift-irscan), 一共卩4個 二進制位,根據從lsb到msb依次發(fā)送的順序,需要傳送給函數的值就是0x03,長度為 4o需要注意的是,進入s

14、hift-ir狀態(tài)以后,有可能要設置此時的需要tms保持的電平狀 態(tài),因此,實際傳送的0x03其內容應該是1 1000,最示一個0表示完成前而4個tms 時序的輸入以后,tms保持低電平。蝕后一個0不計入t度。1.2.3.4.5.6.*函數說叨:jtag tap狀態(tài)機控制函數*輸入:控制序列,序列長度*輸出: 無*調用函數:無7. *8. *9. *10. *11. *12. *13. *14. *使用說明*1、tms在tck上升邊沿輸出狀態(tài)控制量。*2、連續(xù)5個tck周期在tms上輸出高電平將進入test- *logic-reset 模式。*3、使用該函數時,請將狀態(tài)機跳轉以后tms需要保*

15、 持的電平也作為一個有效輸入加入到序列的末尾* 但描述序列長度的數值不需要相應的增加。*15.*/16. void jtag_tap_control(uint8 chctrstream,uint8 chlength)17. 18. uint8 n = 0;19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48. 49.復制代碼狀態(tài)機控制序列for (n = 0;n < chlength;n+)clr_tckif (chctrstream& bit(n

16、)set_tmselseclr_tmsjtag_clock_delayset_tck/*延時部分*/jtag_clock_delay保持電平if (chctrstream& bit(chlength) set_tmselseclr_tms為了方便使用,我們可以將一些常用的tap操作川宏進行封裝,從而獲得較高的代碼可讀性:12. # define jtag_tap_test_logic_resetjtag_tap_control(0xlf,6);3. # define jtag_tap_shift_irjtag_tap_control(0x03,4);4. # define jtag_tap_return_run_test_ideljtag_tap_control(0x01,2);5. # define jtag_tap_enter_shift_dr_from_shift_ir jtag_tap_control(0x03,4);6. # define jtag_tap_shift_drjtag_tap_control(0x01,3);復制代碼 工程實例step 1:首先我們耍卜載一個jtag時序分析軟件jtag hacker點擊此處卜載ourdev 496456.rar(文件人小:235k)(原文件名:上位機.rar)step 2:我們要下載一個示例時

溫馨提示

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

評論

0/150

提交評論