[准备知识] A、基本的状态机知识 B、基本的 C 语言能力,包括位操作、常用宏定义、数组、指针等常见内容 C、会使用一种单片机 D、熟悉 SPI 协议的物理原理 E、对 JTAG 的好奇和兴趣 JTAG 协议是目前应用最广泛的下载和仿真协议,对协议的最初缔造者来说,这也许有点无心插柳柳成荫的感觉——最初的 JTAG 协议只是用来辅助专门的硬件质检部门对印刷电路进行检测的。这些老账现不再提了 我们现在看到的各种 JTAG 下载和仿真协议都是各生产厂商在原有 JTAG 协议的思想上进行扩充的,并不具有通用性,甚至连最基本的电路检测部分功能也被加以改造——比如,一个 JTAG 指令可能在大部分的版本中是 4 位长度的,而对于 AVR32 来说,一个 JTAG 指令却是 5 位。总之,现在大行其道的 JTAG 协议,不变的部分就只有其核心 TAP 状态机了。ARM 有 ARM 的 JTAG,AVR 有 AVR 的 JTAG,51 有 51 的 JTAG…… 在这样一个缺乏统一标准的“街头”JTAG时代,如果你想学好 JTAG 下载仿真协议的破解,就必须从 TAP 状态机开始。 [原理解析] 在你被复杂的时序图弄得眼花缭乱之前,你应该首先记住以下的断言: A、JTAG 协议的本质与 SPI 协议并没有什么不同,它等于一个复杂的 SS 状态机+变长的 MOSI 和 MISO 数据移位操作。不过所谓的变长,都是事先约定好的。 B、JTAG 协议是一个同步通讯协议,它是全双工的。它的通讯原则是“以物易物”——即你如果想得到某些东西,你必须先给与相同长度的内容;你如果只是想发送一些数据,也会自动获取相同长度的内容, 至于交换的内容是否有意义,这是另外一回事了。 C、JTAG 协议无论多么复杂,实际上只有 4 根线起作用(有时候还有两根鸡肋的 nSRST和 TRST),他们分别是 TMS、TCK、TDI 和 TDO,他们分别对应 SPI 协议里面的 SS、SCK、MOSI 和 MISO。在本质上,他们并没有什么不同。即便是 ARM 的 JTAG 那么多的引脚,实际上起作用 JTAG 的也就这 4 根线而已。 D、JTAG 的数据操作都是基于移位寄存器的。 E、如果 JTAG 协议在某个下载仿真协议中只是用来发送控制信息和少量的数据,而大量的数据传输是通过额外的其它引脚进行的,即便这个协议被称为 JTAG 仿真其本质也早已超过 JTAG 了,严格来说,不应该称之为 JTAG。因为 JTAG 协议中就只有 4 根线(有时候也算上 nSRST 和 TRST)而已。典型的如 NEXUS 协议。 说...