[准备知识]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那么多的引