嵌入式开拓中,大家免不了须要仿真调试代码,尤其是当运用工程功能逻辑繁芜到一定程度时,免不了在写代码时会引入一些逻辑 bug,仅靠代码审查有时候并不一定能打消所有 bug,以是在线调试便成为打消 bug 最有效直接的办法,本日我们要聊的是调试里最根本的东西,即接口标准。ARM 内核原生支持 2 种业界通用的接口标准,分别是 JTAG 和 SWD。本节课痞子衡先给大家详细讲讲 JTAG 接口。
一、JTAG 接口标准

JTAG 全称“Joint Test Action Group”,既是个标准也是个组织,这是个由几家紧张的电子制造商(IBM、AT&T、TI、Philips 等)成立于 1985 年的组织,这个组织成立的目的是发起订定一种 PCB和芯片测试标准。

JTAG 标准于 1990 年被 IEEE 批准为 IEEE1149.1 测试访问端口和边界扫描构造标准。JTAG 标准规定了进行边界扫描所须要的硬件和软件,紧张运用于电路的边界扫描测试和可编程芯片的在线系统编程。
1.1 IEEE 1149.1 标准
IEEE 1149.1 事情组 http://grouper.ieee.org/groups/1149/1/
最初版手册 1149.1-1990 http://standards.ieee.org/findstds/standard/1149.1-1990.html
最新版手册 1149.1-2013 http://standards.ieee.org/findstds/standard/1149.1-2013.html
1.2 JTAG 接口旗子暗记
JTAG 接口,总称测试访问接口 TAP(Test Access Port),利用如下旗子暗记来实现边界扫描操作:
TCK(测试时钟):同步内部状态机操作的时钟旗子暗记。
TMS(测试模式选择):掌握内部状态机转换的模式旗子暗记(TCK 上升沿采样)。
TDI(测试数据输入):移入器件测试或编程逻辑的数据(TCK 上升沿采样)。
TDO(测试数据输出):移出器件测试或编程逻辑的数据(TCK 低落沿采样)。
除了以上旗子暗记线外,还有 1 个可选的旗子暗记:
TRST(测试重置):重置 TAP 掌握器的状态机的复位旗子暗记。
1.3 JTAG 系统内部布局
JTAG 系统内部最基本的单元是边界扫描单元(其扫描获取的值存在边界扫描寄存器 BSR(Boundary Scan Register)中),每个边界扫描单元都位于目标器件的边界上,以是很多时候 JTAG 测试也被称为边界扫描。
所有目标器件核心逻辑与针脚之间的旗子暗记都会被串联的边界扫描单元所拦截。正常运行时,这些边界扫描单元是不可见的。但是,在测试模式下这些单元可以被用来设置 / 读取目标器件针脚或核心逻辑的值。
除了上述 BSR 之外,JTAG 系统还须要以下 3 个寄存器:
指令寄存器:存储当前的指令,指令内容被 TAP 掌握器用来决定如何处理吸收到的旗子暗记。
旁路寄存器(BYPASS):把信息从 TDI 传到 TDO 的单位寄存器。
识别码寄存器(IDCODES):含有器件的识别码和版本序号,该信息可以使器件和它的边界扫描描述措辞(BSDL)文件干系联。
JTAG 系统最核心的是 TAP 掌握器,TAP 掌握器被设计用来与 JTAG 系统内部寄存器相互动,TAP 掌握器是一个被 TMS 旗子暗记掌握转换的同步状态机,掌握着 JTAG 系统的行为。
如上图所示,TAP 掌握器的内部状态机一共 16 个状态,关于各个状态详细含义可查阅 IEEE1149.1 手册。TAP 掌握器的基本功能是产生 BSR 和指令寄存器正常事情所须要的时钟和掌握旗子暗记,其紧张功能有以下几点:
供应旗子暗记将指令装入指令寄存器。
供应旗子暗记将输入数据从 TDI 管脚移入内部寄存器、把输出数据从内部寄存器移出到 TDO 管脚。
实行相应功能,如捕获、移位和更新数据等。
指令寄存器是用来存储须要阐明实行的指令的,IEEE 1149.1 标准规定了 JTAG 兼容器件必须要具备的指令:
BYPASS:用单一单元旁路寄存器传送数据,缩短 JTAG 链上不必要的扫描链路。
EXTEST:将已知值(存在 BSR)驱动到芯片针脚上。
SAMPLE/PRELOAD:将捕获到的芯片针脚值装入 BSR。
除了必备的指令外,IEEE 1149.1 标准还规定了如下可选的指令:
IDCODE:将 IDCODES 寄存器中的数据移出。
INTEST:将已知值(存在 BSR)驱动到芯片核心逻辑上。
RUNBIST:当 TAP 进入测试运行空闲状态时,芯片进行自检。
1.4 JTAG 调试工具 pinout
常日支持 JTAG 接口的调试编程工具实在只是利用了 JTAG 技能的四线 TAP 通信协议,而除了标准 TAP 旗子暗记线外,有时还加入其他赞助旗子暗记线构成完全 pinout,对付 ARM JTAG 调试工具来说,有两种比较通用的 pinout 标准,即 ARM20 JTAG header 和 ARM14 JTAG header:
上述两种 ARM JTAG header 中除了标准 TAP 旗子暗记线外,其他赞助旗子暗记线含义如下:
二、JTAG 接口进阶
前面讲完了 JTAG 根本知识,下面痞子衡再给大家多先容一些 JTAG 干系的“黑科技”。
2.1 BSDL 文件
现如今支持 JTAG 接口的芯片越来越多,为了统一各芯片厂商的详细 JTAG 实现,促进全体电子行业的同等性,IEEE1149.1 标准订定了 BSDL 措辞规范。BSDL 是 JTAG 设备的标准建模措辞,它的语法是 VHDL 的子集,是对 JTAG 器件的边界扫描特性的描述,紧张用来沟通芯片厂商、用户与测试工具之间的联系。
开源的 JTAG BSDL 库网站(http://bsdl.info/),涵盖主流厂商的主流芯片的 BSDL 文件
痞子衡随便找一款芯片的 BSDL 文件(Freescale K60_1M(K24_144QFP))大略剖析下:
2.2 JTAG 菊花链
当你的系统中有多个 JTAG 设备时,为办理 JTAG 口过多占用 PCB 的问题,JTAG 支持如下菊花链办法连接(在 FPGA 运用尤其广泛):
从上图可以看出 TMS、TCK 是一主多从并联的构造(设备过多时 TMS,TCK 电路需加缓冲器(如 74LVC245)增加驱动能力);TDI、TDO 是一主一从串联的构造,这种菊花链办法使得 PCB 上只须要一个 JTAG 接口便可以访问所有 JTAG 设备。
至此,嵌入式调试里的接口标准 JTAG 痞子衡便先容完毕了,掌声在哪里~~~








