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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15、 持的電平也作為一個有效輸入加入到序列的末尾* 但描述序列長度的數(shù)值不需要相應(yīng)的增加。*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.復(fù)制代碼狀態(tài)機(jī)控制序列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操作川宏進(jìn)行封裝,從而獲得較高的代碼可讀性: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);復(fù)制代碼 工程實例step 1:首先我們耍卜載一個jtag時序分析軟件jtag hacker點擊此處卜載ourdev 496456.rar(文件人小:235k)(原文件名:上位機(jī).rar)step 2:我們要下載一個示例時

溫馨提示

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

評論

0/150

提交評論