[准备知识] 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 协议在某 个下载仿真协议中只是用来发 送 控 制 信...