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




  

你可能感兴趣的:(个人感悟)