JTAG是把屠龍刀,說說其作用和原理

最近在學習ARM,調試時總用JTAG接口的方式進行,但對JTAG的印象一直很模糊,不甚了了,所以今天特意查閱了下,找到一篇不錯的文章,分享下,雖然作者說的是手機方面的,但大道相通。

##1.

JTAG,不管是東海也好,東海的對手也好,已經做了一些科普工作了,我這裡給大家說說JTAG應用的事情。 JTAG大家可能以為從來沒接觸過,但我告訴大家,即使是最古老的倚天、最古老的DH48N,裡邊的芯片,就是我們用JTAG數據線灌入的程序,才能幹活的,實際大家使用這個功能,有快10年了。 JTAG是最基本的通訊協議之一,大家可以理解為與RX TX或者USB的道理是一樣的,只是一種通訊手段,但與RX TX以及USB有很重大的不同,那就是這個JTAG協議是最底層的,說的通俗一點,一般來說,手機裡邊,CPU是老大,對吧?但在JTAG面前,他就不是老大了,JTAG協議就是用來控制CPU的,在JTAG面前CPU變成嘍囉了。一般的協議是求著CPU讀寫字庫的程序,但JTAG可以讀寫CPU的程序,命令讓CPU啥活都幹,擒賊先擒王,JTAG就是屠龍刀。 所有的手機CPU都支持JTAG協議,也必須支持JTAG協議,因為CPU裡邊的數據只有通過JTAG功能才能寫入,在內部數據錯亂的時候或者其他部分重要數據錯亂的時候,CPU可能就不理會RX TX或者USB了,在這個時候,用JTAG協議功能,強制手機的CPU乖乖的幹活。因此,所有的手機,所說的變成磚頭了,真實的技術原因是,讓手機響應RX TX或者USB進行操作,所必須需要的基礎數據丟失了,手機CPU就不搭理RX TX或者USB了,因為這時候CPU是老大,他說不幹一般人就沒辦法了;唯一的解決之道,就是用JTAG功能,讓CPU變成馬仔,強制他把這些基礎數據恢復,磚頭就又變成手機了。

JTAG信號,最基本的要有5條線,TCK TMS,TDI,TDO,復位信號。 復位信號,有的一條,有的多條,他的作用是鎮壓CPU,讓他停下所有工作,等著JTAG信號對它進行控制,或者讓 其某部分工作某部分暫停工作。 TCK信號,上位機的時鐘信號,上升沿送入給手機CPU的數據,下降沿手機CPU回來數據。 TDI信號,上位機的數據信號。 TMS信號,上位機的另外一個數據信號,實際是命令指示以及區分的信號。 TDO信號,手機CPU回來給上位機的數據信號,讓上位機知道手機CPU現在的狀態是很乖還是不乖,進而根據CPU的狀態進行控制。 說的更簡單一點,讓大家理解,就是在CPU由於軟件原因不聯機的時候,JTAG是唯一能夠恢復這部分軟件的工具。JTAG能夠指揮CPU幹任何事,在JTAG面前CPU只是一個馬仔。 學無先後,達者為師,如果我說的有所疏漏,歡迎行家批評指正,呵呵。

##2.

借這位兄弟的地方一用,以摩托羅拉為例,從另一個角度對JTAG做點介紹:摩托羅拉手機FLASH,SHX,JTAG,bootloader的解釋。

FLASH是裝載手機程序、存放用戶信息、存放手機工作參數的載體、FLASH一般包括下面幾個部份: FLASH區域:NOR FLASH 存放手機的整個程序和字庫、圖形、音樂等信息; 參數區域:存放手機的工作參數,和一些與其它部位相對應的密碼; 加密位或者隱含扇區:是獨立於常規區域的一個小部份,存放的是一些加密信息,必須和FLASH參數區域對應; NAND FLASH:大容量的存儲器,用來存儲MP3、電影等等,就是等同於U盤一樣; 暫存器(RAM):運行手機程序,就像電腦的內存一樣。 SHX文件的通常的3種類型: 1、Lang Pack語言包-包括手機語言集和字體,可以使手機快速更改可用的語言而不用修改整個手機FLASH芯片,語言包不會更改用戶數據,FLASH或者FLEX,只包含BOOtloader(引導區)和一個語言包,通常在2M大小左右; 2、Flash--手機的升級文件,包含引導裝入(ROM),Flash,DSP,語言包,DRM(製圖),和Signature(簽名)。一般正常帶語言包(Lang Pack),除原廠軟件外,在上傳其它外版版本的FLASH文件時一般會把語言包刪除掉,這樣我們刷機過後,原來是什麼語言刷過後也還是什麼語言,而沒有改變語言!因為我們在外國網站上找到的FLASH包一般都是帶外語的語言包。方便一般的朋友刷機時刷完FLASH後,不用再刷中文語言包了,不過有時也根據需要要帶上相匹配的中文語言包,如V3的41C3R,用9CR的中文語言包在41C3R的版本中查看不了內存!所以在上傳時就把相匹配的中文語言包41COR的中文語言包加上去,這樣就省去了很多朋友的麻煩! 3、Monster Pacd--我們通常簡稱為一體包;和FLASH內容相似,但是包括FLEX在內,包括引導裝入,FLASH,FLEX,DSP,Lang Pack,DRM,Signture;是手機FLASH芯片完整的升級軟件包!但是注意在升級時會清除你的數據,因為帶FLEX!                  不過也還有一種類型是很少見的,就是SHX格式的FLEX,但通常用來強刷進去的,比方說刷HS格式的FLEX刷不進機內,所以就把它轉換成SHX格式,然後強刷進去! JTAG(Joint Test ActionGroup)是1985年制定的檢測PCB和IC芯片的一個標準,1990年被修改後成為IEEE的一個標準,即IEEE1149.1-1990。通過這個標準,可對具有JTAG口芯片的硬件電路進行邊界掃瞄和故障檢測。 具有JTAG口的芯片都有如下JTAG引腳定義: TCK——測試時鐘輸入; TDI——測試數據輸入,數據通過TDI輸入JTAG口; TDO——測試數據輸出,數據通過TDO從JTAG口輸出; TMS——測試模式選擇,TMS用來設置JTAG口處於某種特定的測試模式。 可選引腳TRST——測試復位,輸入引腳,低電平有效。 含有JTAG口的芯片種類較多,如CPU、DSP、CPLD等。 bootloader是用來完成系統啟動和系統軟件加載工作的程序。它是底層硬件和上層應用軟件之間的一個中間件軟件,完成處理器和周邊電路正常運行所要的初始化工作;可以屏蔽底層硬件的差異,使上層應用軟件的編寫和移植更加方便;不僅具有類似PC機上常用的BIOS(BasicInput Output System,基本輸入、輸出系統監控程序)功能,而且還可具有一定的調試功能。目前,在嵌入式系統開發中有多種bootloader可供選擇,其中Motorola公司的名為dBUG的bootloader比較優秀。它可以移植在Motorola MC68000、ColdFire和PowerPC系列所有微處理器上面,有強大的調試功能,支持單步、下載、網絡更新等;其良好的軟件架構使用戶能很方便地修改其代碼,擴展新的功能。

這是我找到的兩個不錯的,分享了。

原帖地址:http://bbs.eastsea.com.cn/forum.php?mod=viewthread&tid=774636


书籍推荐