JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(TestAccessPort,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。JTAG接口还常用于实现ISP(In-SystemProgrammable在系统编程)功能,如对FLASH器件进行编程等。
通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前JTAG接口的连接有两种标准,即14针接口和20针接口,其定义分别如下所示。
14针JTAG接口定义:
14针JTAG接口定义引脚名称描述
1、13VCC接电源
2、4、6、8、10、14GND接地
3nTRST测试系统复位信号
5TDI测试数据串行输入
7TMS测试模式选择
9TCK测试时钟
11TDO测试数据串行输出
12NC未连接
20针JTAG接口定义引脚名称描述
1VTref目标板参考电压,接电源
2VCC接电源
3nTRST测试系统复位信号
4、6、8、10、12、14、16、18、20GND接地
5TDI测试数据串行输入
7TMS测试模式选择
9TCK测试时钟
11RTCK测试时钟返回信号
13TDO测试数据串行输出
15nRESET目标系统复位信号
17、19NC未连接
下面以S3C4510B开发板为例说明JTAG接口:
在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG接口调试S3C4510B,在系统上电前,首先应检测JTAG接口的TMS、TCK、TDI、TDO信号是否已与S3C4510B的对应引脚相连,其次应检测S3C4510B的nEWAIT引脚(Pin71)是否已上拉,ExtMREQ引脚(Pin108)是否已下拉,对这两只引脚的处理应注意,作者遇到多起S3C4510B不能正常工作或无法与JTAG接口通信,均与没有正确处理这两只引脚有关。
给系统上电后,可通过示波器查看S3C4510B对应引脚的输出波形,判断是否已正常工作,若S3C4510B已正常工作,在使能片内PLL电路的情况下,SDCLK/MCLKO引脚(Pin77)应输出频率为50MHz的波形,同时,MDC引脚(Pin50)和其他一些引脚也应有波形输出。
在保证S3C4510B已正常工作的情况下,可使用ADS或SDT通过JTAG接口对片内的部件进行访问和控制。
在此,首先通过对片内控制通用I/O口的特殊功能寄存器的操作,来点亮连接在P3~P0口上的4只LED,用以验证ADS或SDT调试环境是否已正确设置,以及与JTAG接口的连接是否正常。
ADS和SDT均为ARM公司为方便用户在ARM芯片上进行应用开发而推出的一整套集成开发工具,其中,ADS为SDT的升级版本。该系统的调试以ADS为例,同时也适合于SDT开发环境。
连接好硬件后,打开AXDDebugger,建立与目标板(待调试的系统板)的连接,AXDDebugger有软件仿真方式和带目标系统的调试方式,此时应工作在带目标系统的调试方式。
选择菜单SystemViews→CommandLineInterface功能,该选项为AXDDebugger的一个命令行窗口,可在该窗口内输入各种调试命令,使用非常方便。在命令行窗口输入:
>setmem0x3FF5000,0xFFFF,32
>setmem0x3FF5008,0xFFFF,32
setmem命令用于对特定的地址设置特定的值,待设定的值可以是8位、16位或32位,在此,对通用I/O口的模式寄存器和数据寄存器设置相应的值,点亮LED。
S3C4510B在复位后,特殊功能寄存器的基地址为0x3FF0000,由表5-2-3可知,I/O口的模式寄存器偏移地址为0x5000,因此,I/O口的模式寄存器的物理地址为0x3FF5000,设定该寄存器的值为0xFFFF,将I/O口置为输出方式。I/O口的数据寄存器的物理地址为0x3FF5008,设定该寄存器的值为0xFFFF,将I/O口的输出置为高电平。
在执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮,表示调试系统的软、硬件连接完好,可进行下一步的调试工作,否则,应重新检查调试系统。
用户若使用SDT作为调试工具,操作方法类似。连接好硬件后,打开ARMDebuggerforWindows,建立与目标板(待调试的系统板)的连接,选择菜单View→Command功能,即可显示命令行窗口,在命令行窗口输入:
Debug:let0x3FF5000=0xFFFF
Debug:let0x3FF5008=0xFFFF
执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮。
关于通用I/O口更具体的工作原理和使用方法,可参考S3C4510B用户手册。
用户系统若能正常完成上述操作并成功点亮连接在P3~P0口上的LED显示器,则表明S3C4510B已在正常工作,且调试环境也已正确建立,以后的调试工作就相对简单。笔者曾遇到多个用户系统因为不能完成这步工作,使开发者失去信心而最终放弃。