我一直是一个软件专家。但是当我分解硬件时,我会定期寻找JTAG端口和RS232端口。到目前为止,我一直很幸运,能够将引脚焊接到RS232端口并获得串行连接。

在将来我不太幸运的时候,有人可以向我解释一下吗JTAG是什么(即,只有一种类型的JTAG,我可以期望将其连接到单一类型的端口,例如用于串行的DB-9?),以及如何使用它来将固件转储到嵌入式系统中。系统还是所有制造商特定的?

#1 楼

JTAG连接器可用,因此很难说出哪个以及引脚的位置。

我建议您拿放大镜并阅读微控制器模型。使用该模型,您可以在Internet上找到数据表。
看一下微控制器的PIN,看看它有多少JTAG输出。一些较新的芯片具有跟踪输出,而有些则没有。这确实可以缩小您的选择范围。

您可能想在这里看看各种JTAG连接器。

值得一提的是,各种微控制器,有一个特定的位,当它被置位时,JTAG连接器被禁用。这是在发行时完成的,以确保没有人试图窃取固件或调试系统。
再次启用JTAG的唯一方法是硬复位微控制器。这将导致内部闪存的完全复位,因此所有固件都将丢失...

评论


我只想在我的经验(高端设备)中添加更多信息,而不是硬重置对于启用JTAG不起作用。这些接口通常通过熔断保险丝而永久锁定。在其他情况下,它们受到64位密钥的密码保护,两次可能的解锁尝试之间存在明显的延迟(毫秒至一秒)。只是为了确保您甚至不想考虑使用大量设备对它们进行强行强制。而且,为了愚弄您,他们有时还喜欢给您1次解锁尝试,然后默默地忽略重置,直到冷重置为止。

– ixje
13年4月25日在6:03

#2 楼

JTAG最初是为了测试/验证硬件设备而创建的。该过程称为边界扫描,JTAG以工作组的名称命名:联合测试行动组,成立于1980年代。

其思想是定义一个可用于测试硬件(微型)的接口。控制器和连接的外围设备制造后)。即经过硬件开发并随后生产。

根据JTAG进行边界扫描的设备称为JTAG探针。它们曾经被连接到计算机的并行端口,但是如今,这些时间通常是通过USB并以FTDI芯片之一为基础的。

在PCB上,芯片和外围设备形成连接到TAP(测试访问端口)的“菊花链”。因此,您可以通过一个端口测试各种组件。指令BYPASS用于告知链上较早的设备忽略您的命令并将其继续传递。 IDCODE用于识别设备和一些基本特征。

可以在此处找到一些技术细节的简洁概述:JTAG-技术概述,但是Wikipedia文章及其参考列表也提供了有价值的信息信息。请记住,这是在WWW出现之前建立的,并且有关它的许多信息已被禁止在枯树上使用。

边界扫描一词仍用于描述该过程,并构成了首字母缩写词BSDL(边界扫描描述语言)的一部分,如果要对设备/芯片进行边界扫描,而供应商希望您这样做,则通常会与之联系去做。否则,他们往往对此非常保密。之所以保密,是因为他们实质上放弃了一部分硬件设计,而这些硬件供应商大多数都认为这是商业秘密。我很幸运能够访问NDA下的BSDL文件,即使它不是我调试的确切硅版本。但是我确信BSDL文件可以与我拥有的芯片的硅修订版一起正常工作。但是,除非您有能力销毁硬件,否则必须确保BSDL数据与您连接的硬件匹配。

这些天,JTAG不仅用于测试。当然,硬件调试是测试的一部分,所以这不是我的意思。我的意思是,JTAG探针还允许您在原本已失效的硬件上刷新固件。这对于清除砖砌的硬件非常重要。而且我会忽略Mellowcandle在他的回答中提到的一点。 />
确定JTAG引脚

通常,您会在PCB上找到TMS,TCK,TDI等,因此您知道要使用支持JTAG的设备。放大镜可能会有帮助;)

但这并不是真正的奥秘-当没有标记图钉并且您需要依靠第三方文档时,难度会更大。 />
当然,您的电路板也可能具有JTAG接头而不是仅仅的引脚/触点。

确定微控制器

是的,的确,您确实需要先确定自己拥有的芯片类型,并找出期望的电压,否则您可以油炸您的芯片或JTAG探针或两者。 br />
如果碰巧,您的设备上会有一个JTAG标头,可帮助您了解它的含义以及隐含的期望电压等等。据我所知,存在ARM和MIPS的准标准。有关前者的信息,请参阅Mellowcandle的答案;对于后者,请参阅此信息。

使用可以找到的任何及所有可用文档来验证所做的任何假设。 DSL路由器通常在其中装有MIPS CPU,但是ARM也很常见,可能也很常见。诸如OpenWRT之类的项目具有大量有关硬件的信息,甚至包括硬件不直接支持的硬件。

JTAG探针

通常,硬件供应商会声称它们支持硬件。 McCraigor Wiggler或其他价格昂贵的JTAG探针。这意味着如果您不使用(供应商提供的)“不受支持的” JTAG探针,您将独自一人!这并不意味着它将无法正常工作,而是意味着您必须确定自己在做什么(电压,发送的JTAG命令等)。

工具

使用JTAG的FLOSS


UrJTAG

OpenOCD(OCD代表片上调试器)

GDB(gdb)可以在某些情况下(例如OpenOCD)与它们结合使用。

“便宜的” JTAG探针

注意:有时您会听到JTAG调试器或仿真器的术语



AVR JTAGICE,Atmel-如果您使用的是AVR控制器,则可以选择这些探头
JTAGkey2和它的朋友,Amontec
PicoTAP,Gopel-不久前,PicoTAP还通过学习工具包(包括CD等)免费赠送。
Olimex提供了几种便宜的JTAG解决方案(如果与OpenOCD搭配使用,则特别有用)

BusBlaster通过危险原型
最后但并非最不重要的一点:如果您要焊接:OpenJTAG



#3 楼

为了弄清楚JTAG引脚,在Google上有很多针对“ JTAG Finder”的命中。我也有自己的实现:

http://mbed.org/users/igorsk/code/JTAG_Search/

它用于mbed,但我尝试使其易于携带(原始版本适用于Stellaris板)。

这里的引述语中描述了基本方法:

 The overall idea:
 1) choose any 2 pins as TMS and TCK
 2) using them, reset TAP and then shift DR, while observing the state of all other pins
 3) for every pin that received anything like a TAP ID (i.e. bit 0 is 1):
 4)   using the pin as TDI, feed in a known pattern into the TAP
 5)   keep shifting and monitor the rest of the pins
 6)   if any of the remaining pins received the pattern, it is TDO


#4 楼

我创建了一个视频,说明如何用万用表确定可能的JTAG连接。这是一张图片,显示了连接了哪些引脚,并且与VCC和GND的标准JTAG引脚匹配。这表明它可以是JTAG,尽管不一定必须如此。