JTAGICE mkII 使用说明

序言

新增功能

疑难解答

JTAGICE mkII 固件历史

所支持的器件

简介

简介

入门指导

安装USB驱动

连接 JTAGICE mkII

连接 JTAGICE mkII

通过JTAG接口连接到目标板

通过debugWIRE接口连接到目标板

连接到电脑主机

连接电源

前端软件

前端软件

安装AVR Studio

使用JTAGICE mkII实现在芯片调试

调试选项

用JTAGICE mkII 下载编程

硬件描述

需要特别注意的地方

命令行软件

固件升级

问题排解

问题排解

疑难解答

无法识别目标芯片

Atmel


简介

JTAGICE mkII与AVR Studio®相结合，可以对所有带JTAG接口或debugWIRE接口的AVR 8位RISC单片机进行在片调试（On-Chip Debugging）。点击这里查看所支持的芯片的列表。

JTAG

JTAG接口是一个符合IEEE 1149.1标准的4线的测试存取端口控制器（Test Access Port (TAP) controller）。这个IEEE标准制定了一套标准的方法，采用了边界扫描技术(Boundary Scan)，用于有效的对芯片进行测试。Atmel® AVR芯片扩展了这项功能，使其能完全支持编程下载和片上调试功能。

JTAGICE mkII使用标准的JTAG接口，使用户可以对目标系统上运行的单片机进行实时的仿真。

（ AVR On-Chip Debug （AVROCD））协议能够让用户对AVR单片机的内部资源进行全部的控制。与传统仿真器相比，JTAGICE mkII的花费很小，但却能实现更准确的仿真。

debugWIRE

debugWIRE接口是实现片上调试的一个新手段。debugWIRE片上调试系统仅使用一根单线双向接口，就能实现对程序流的控制、执行在AVR单片机CPU内的指令、以及对存储器进行编程的功能。

当 DWEN（ debugWIRE Enable）熔丝位被编程且锁定位未被编程的时候，目标芯片内的debugWIRE系统就被激活。RESET端口引线被设置成线与（漏极开路）状态的双向带上拉的IO引脚，成为目标芯片和仿真器的通讯通路。

注意debugWIRE仅是一个调试接口，不是一个编程接口。

JTAGICE mkII 特点：

  • AVR Studio兼容 (AVR Studio 4.09或以后的版本)

  • 支持所有带JTAG接口的AVR芯片

  • 支持所有带debugWIRE接口的AVR芯片

  • 精确的电特性

  • 在片仿真芯片的数字和模拟功能

  • 软件断点

  • 程序存储器断点

  • 支持汇编和高级语言调试

  • 对flash, eeprom, fuses 和 lockbits 的编程接口(仅JTAG)

  • 采用USB 1.1 或 RS232接口与PC连接，由PC进行编程和控制

  • 由9-15V 的稳定直流电源供电

  • 可以直接通过USB供电

  • 对于两种接口(JTAG 和 debugWIRE)使用相同的硬件

JTAGICE mkII需要AVR Studio 4的支持(参考AVR Studio 要求)。最新版本的AVR Studio可以在www.atmel.com上找到。

JTAGICE mkII

JTAGICE mkII 和片上调试（OCD）的概念

这部分内容将介绍用JTAGICE mkII进行片上调试的概念，以及片上调试和传统的在线仿真（In-circuit Emulator 简称ICE）的不同。

传统仿真与片上调试（OCD）的比较

传统的仿真器就是另外创建的一个设备，用来模拟一个或一组芯片的行为。换句话说，如果要仿真ATmega32，仿真器就设法模拟这个芯片的行为，模拟的越接近，仿真的效果也越好。下面这张图展示了传统仿真方法的简单框图。

传统仿真器方框图

JTAGICE mkII使用另外一种方法。JTAGICE mkII通过JTAG接口与目标芯片内部的在片调试系统连接，可以直接控制，监视实际AVR芯片内部程序的执行。

JTAGICE mkII工作的方法如下：在所有的带JTAG接口的AVR芯片中，内部都集成了一个片上调试逻辑单元作为与JTAG mkII的接口。这个OCD逻辑单元可以被用来控制实际芯片的执行。传统的仿真器只是模拟芯片的执行，而JTAGICE mkII会控制实际的芯片，并执行实际芯片中的代码。下面是OCD（片上调试）系统的方框图；

JTAGICE mkII 和内部AVR片上调试系统的接口连接

使用OCD系统，可以获得精确的电特性和时间特征。但而使用传统的仿真器，则可以获得更好的访问和控制内部资源的特性。例如，象追踪缓冲区这样的功能在AVR OCD系统上是没有的。

  • 由于 OCD系统是被建在芯片内部的，就有一些限制需要注意。详细内容请参看注意事项。

当调试运行代码时，一定要注意JTAGICE mkII 和传统ICE操作的区别。下面的部分会对一些注意事项进行解释。

运行模式（Run Mode）

在运行模式中，代码的执行完全不依赖于JTAGICE mkII。JTAGICE mkII将对目标AVR芯片进行连续的监视，确定是否有中止条件的发生。一旦发生中止，OCD系统就会读取程序计数器（Program Counter）、IO寄存器（IO registers）、EEPROM，通用寄存器（General Purpose registers）和SRAM的内容，并通过debug接口传给AVR Studio。

断点模式（Stopped Mode）

当运行到断点时，程序的执行就会暂停，但是芯片内所有的IO会继续工作，就好像没有中断发生一样。例如：假定刚刚启动了一个USART传输的时达到了一个断点，如果使用传统的仿真器，传输就会中止，当单步执行时会在TxD引脚上获得时钟周期精确的位传送流。而如果用JTAGICE mkII调试，USART将会继续全速的传输。

断点（Breakpoints）

AVR OCD系统使用以下两种不同性质的断点：软件断点和硬件断点

软件断点（Software Breakpoints）

软件断点就是Flash存储器中放置的一个中断BREAK指令。在程序运行过程中，一旦执行了这条指令，程序将停止执行。程序的继续执行，是通过OCD逻辑单元发出一个“start”命令实现的。注意ATmega128不支持BREAK指令。在AVR Studio中，当在某条指令初放置一个断点时，一条BREAK指令将直接被写到AVR Flash存储器的相应位置。一旦程序运行到这里时，指令的执行就会停止。当开始执行的时候，会在继续执行Flash存储器中的指令时首先执行一条“pending”指令。

硬件断点（Hardware Breakpoints）

在JTAG OCD逻辑单元中有4个寄存器，它们分别能够保存一个存储器的地址。JTAGICE mkII将其中寄存器一个作为内部使用，其余3个可以用不同的结合方法生成有效的中断条件。在前端处理软件这一章中详细描述了这些寄存器的不同结合方式。

因为软件断点的设置需要对断点所在在的整页程序进行重新编程，所以建议将那些需要经常变动的断点设置为硬件断点。

可见性（Visibility，主要指IO寄存器）

JTAGICE mkII对IO的可见性有局限性。可见性是指查看所有IO区内容的能力。

当 AVR device遇到断点的时候，所有IO寄存器的内容将会被读取并在AVR Studio中显示。因为对某些寄存器的读操作会改变这些寄存器的值，所以这部分寄存器的值是不能读取的。(例如：读USART数据寄存器将会清除RXC位) 请参考注意事项这一部分的内容，可找到所有在JTAGICE mkII OCD系统中不能读取的寄存器。

单步执行（Single Stepping）

在实际情况中，当一些特殊控制设置的被允许后，对一些寄存器的读写操作过程被限制在规定的几个周期内完成。由于在停止模式下，IO时钟和外围设备仍继续全速的运行，因此单步执行这些程序时，将不能满足上述限时操作的规定，因为在两个单步执行操作之间，IO时钟也许早就运行了数百万个时钟周期。如果要正确的读写那些操作有限时时间规定的寄存器，应保证该整个的读写过程作为完整的一段，在全速运行的芯片中一次自动的连续完成。(例如：把整个读写过程定义为宏或函数调用，或者使用连续运行到光标位置的方式)。

更详细的关于JTAG接口和片上调试系统的内容，请参考www.atmel.com

所支持的芯片

JTAGICE mkII支持所有带JTAG或debugWIRE功能的AVR 8位精简指令单片机。对最新的芯片的支持，将与最新版本AVR Studio同时发布。最新版本的AVR Studio可以从www.atmel.com下载。

通过 JTAGICE mkII 进行仿真

点击这里可以看到所有所支持芯片的列表。

当AVR Studio检测到JTAGICE mkII的固件已经过时，AVR Studio会给出提示信息。

  • 入门指导


入门指导

读这部分内容之前请先参考如何将JTAGICE mkII连接到电脑和目标板.

JTAGICE mkII 硬件套件

套件中应包含下列东西:

  • JTAGICE mkII 快速入门手册
  • 带有扁平连线的JTAGICE mkII，扁平连线一端有两个10-pin连接器用于与目标板连接
  • USB连接线
  • 9脚的RS232连接线
  • 鱿鱼状连接线
  • 10针-6针转换适配连接器
  • 直流(DC)电源电缆
  • Atmel技术库光盘，内含数据手册(datasheet)，使用注意事项和软件.
  • STK500 JTAG适配器

系统要求

软硬件至少满足:

  • Pentium (Pentium II或以上)
  • 64 MB RAM
  • 100 MB空余硬盘空间(用来来安装AVR Studio 4.XX)
  • Windows? 95, Windows? 98, Windows? NT4.0 或更高版本的Windows操作系统如Windows? 2000 或 Windows? XP
  • 115200波特率的RS-232口(COM port), USB接口(推荐)
  • 9-15V直流电源. 如果使用USB可以不使用.

AVR Studio要求

要求安装AVR Studio 4.09或更高版本才能使用JTAGICE mkII.点击www.atmel.com/products/AVR/可查找最新版本,点击 "aStudio4.exe" 文件安装.

注意: 把JTAGICE mkII连接到电脑上之前应该首先在电脑上安装AVR Studio.

安装USB

为了让JTAGICE mkII能够使用USB,就要首先安装USB驱动程序，必须在安装AVR Studio后再安装USB驱动. 请不要在安装USB驱动之前把JTAGICE mkII连接到电脑上.可参考安装USB中的描述来安装USB驱动.

要连接到目标板请参看连接 JTAGICE mkII.


USB Setup

JTAGICE mkII USB 安装

为了能够通过USB正常的使用JTAGICE mkII，需要首先安装USB驱动。必须在安装了AVR Studio后安装USB驱动。请不要在安装USB驱动以前将JTAGICEmkII连接到电脑上。

AVRStudio 4.10的安装包与以前的不同，在新的安装包中，对JTAGICEmkII的USB驱动的安装已经改变。对于4.10以前的版本，安装/升级USB驱动的方式与4.10是不一样的.(请参考旧版本 AVR Studio中USB的安装).

当安装 AVR Studio 4.10时，您会看到下面的这个安装画面.

要安装USB驱动的话,只需要在" Install/Upgrade USB Driver"复选框打勾就可以了,而以前的版本中要运行额外的USB驱动安装文件。

安装好USB驱动后,请用USB连线将JTAGICE mkII和电脑连接起来,并打开JTAGICE mkII(JTAGICE mkII会从USB上获得电源).电脑就会自动检测JTAGICE mkII 并弹出下面的画面：

请等待几秒钟，直到这个对话框自动关闭。如果你的系统是Windows XP你可能需要点击几下"Next"。然后 AVR Studio就可以检测到JTAGICE mkII了。

如果安装了USB驱动后，AVR Studio因为某种原因检测不到 JTAGICE mkII，试着重新启动一下电脑,让驱动程序重新正常加载.

在 AVR Studio 4.10以前的版本中安装/卸载USB驱动

确保你的电脑的USB接口是被允许的(一般来说，标准的PC BIOS中都是默认将USB设置成允许的，但确保您没有在BIOS中将其设置成禁止)。

注意: 在 Windows 95 和 Windows NT中是不支持USB的

1.依次点击"开始"->"程序"-> "Atmel AVR Tools"->"USB Setup"

如果你的电脑上已经安装了USB驱动,会出现以下的画面:

如果出现了这个界面，就没有必要继续安装USB驱动了，点击"Canncel"按钮取消安装。接下来执行第6步。

2. 如果你的电脑没有安装usb驱动，就会出现以下的画面：

3. 确保JTAGICE mkII现在关闭，并且在点击"Next"按钮之前不打开。

4. 点击"Next"，就会开始安装。

5. 几秒钟后就会安装成功，此时对话框中会显示已经安装成功，点击"Close"按钮关闭对话框。

6. 安装好USB驱动后，请用USB连线将JTAGICE mkII和电脑连接起来，并打开JTAGICE mkII(JTAGICE mkII会从USB上获得电源)。此时电脑就会自动检测JTAGICE mkII 并弹出下面的画面：

请等待几秒钟直到这个对话框自动关闭。如果你的系统是Windows XP，你可能需要点击几下"Next"。然后 AVR Studio就可以检测到JTAGICE mkII了。

如果安装了USB驱动后，AVR Studio因为某种原因检测不到 JTAGICE mkII，试着重新启动一下电脑，让驱动程序重新正常加载。

在连接JTAGICE mkII部分参考如何将JTAGICEmkII连接到目标板。


连接 JTAGICE mkII

这部分内容讲述了如何将JTAGICE mkII连接到电脑和目标板。整个过程可分为如下几个步骤：

  1. 连接到目标板：

    • 用JTAG接口

    • 用debugWIRE接口

  2. 连接到电脑

  3. 连接电源

ICE正确连接好后, 就要配置AVR Studio了.


连接 to target through the JTAG Interface

通过JTAG接口连接到目标板

把JTAGICE mkII连接到目标板至少需要6根信号线，它们是TCK、TDO、TDI、TMS、VTref 和 GND。

nSRST线是可选的，一般情况下它不被使用，只是预留下来用来与其他设备进行兼容。

nSRST 线经常用作控制和监视目标板的RESET线。这对于正确的仿真是不需要的。但是当程序代码将MCUCSR寄存器中的JTD位置位的时候，JTAG接口就会变为不能使用了。这时候要使用JTAGICE mkII对芯片编程，就需要控制RESET引脚了。注意nSRST被一个内部10K欧姆的上拉电阻拉高。

注意: Vsupply没有连接到上JTAGICE mkII。因此JTAGICE mkII不能由目标板供电。

在下面的介绍的内容中，我们假定目标板和JTAGICE mkII使用了上面所说的6根线连接。

下面的图展示了这些连线的具体连接方式。为了避免JTAGICE mkII和芯片的外部电路争用这些线路，建议在JTAG线和外部电路之间串接电阻。选择串入电阻的电阻值时，要注意不能让外部电路和AVR芯片超出他们的额定值（如，灌入或输出的电流不能太大）。在 硬件描述中查看更详细的对硬件的描述。

将JTAGICE mkII连接到目标板

JTAGICE mkII与JTAG链（JTAG Chain）上的多个芯片的连接

JTAGICE mkII支持构成JTAG链上的多个AVR芯片的仿真。当连接的JTAG链上有N个芯片时，N个芯片的TMS和TCK线分别并联起来连接到仿真器，但是对于TDI和TDO要这样连接：第一个芯片的TDI连接到仿真器，第一个芯片的TDO连接到第二个芯片的TDI，第二个芯片的TDO连接到第三个芯片的TDI如此连接直到第N个芯片，然后将第N个芯片的TDO连接到仿真器。

请参看前端处理软件关于用如何配置AVR Studio调试JTAG链上的芯片。

将JTAGICE mkII连接到STK500

STK500 没有专用的JTAG接口的插头。所以要将JTAGICE mkII连接到STK500 板时就要用鱿鱼状连接导线与对应的探针连接。请查阅相应芯片的数据手册，找到其JTAG引脚的位置。下面的图用一个例子描述了如何连接到载有ATmega32的STK500板。如果你要用JTAGICE mkII来控制RESET线，记住要拔掉STK500上的RESET跳线。

注意: 对STK500的添加接插板如STK501/502可能会有专门的JTAG插头。

用鱿鱼状连接导线将JTAGICE mkII连接到载有ATmega32的STK500板

STK500 JTAG 适配器

与JTAGICE mkII一起提供的STK500 JTAG适配器可以用来简化JTAGICE mkII和STK500之间的连接，它是专门用于与安装在插座SCKT3100A3和SCKT3000D3上，带有JTAG口的AVR芯片连接的。点击这里查看这些器件的列表。

JTAGICE mkII 与 STK500 之间简化的连接方式

通过ISP 连接

如果目标芯片的JTAGEN 熔丝位 (JTAG Enable)没有被编程，JTAG接口就不能使用。此时该熔丝位也不能用JTAG接口进行编程，而必须采用其他的编程模式来编程，例如，使用ISP接口。将JTAGICE mkII按照下表方式与目标芯片用鱿鱼状连接导线连接，就可以实现采用ISP方式对JTAGEN编程。

JTAGICE mkII 探针 | 目标引脚 | 鱿鱼状连接导线颜色 | STK500 ISP 管脚
脚 1 (TCK) | SCK | 黑 | 3
脚 2 (GND) | GND | 白 | 6
脚 3 (TDO) | MISO | 灰 | 1
脚 4 (VTref) | VTref | 紫 | 2
脚 5 (TMS) | － | 蓝 | －
脚 6 (nSRST) | RESET | 绿 | 5
脚 7 (Not connected) | － | 黄 | －
脚 8 (nTRST) | － | 橙 | －
脚 9 (TDI) | MOSI | 红 | 4
脚 10 (GND) | GND | 褐 | －

注意：

如果JTAGICE mkII在STK500上采用ISP方式连接，要确保拔掉STK500上的RESET跳线。同时根据STK500的ISP接口的定义（板上有印字标注）和鱿鱼状连接导线的颜色，正确的将JTAGICE mkII与芯片实现ISP方式的连接。

STK500 ISP 连接插头

当与目标板的连接连接好后，就可以连接到PC了。


连接 to the target board through the debugWIRE interface

通过debugWIRE接口连接到目标板

JTAGICE mkII与目标板用debugWIRE连接通讯至少需要3根线。他们是RESET、VTref 和 GND.

重要声明

这种接口只用一根脚(RESET脚)和目标板通信。要让一个AVR芯片能使用debugWIRE接口，就必须对debugWIRE的允许熔丝位(DWEN,debugWIRE Enable Fule)编程为0(DWEN=0)。AVR芯片出厂时，该溶丝位是未编程的(DWEN=1)。debugWIRE接口自己不能编程此熔丝位，该溶丝位可以通过ISP模式(需要6芯的插头)，用STK500 或 AVRISP来实现。 当然，使用JTAGICE mkII，将目标适配器通过蟹状连接线与6-pin的ISP插座连接（ISP方式）后，也能够对DWEN溶丝进行编程，具体连接定义参考下图。注意当JTAGICE mkII时，对DWEN溶丝位编程功能只是在开始对一项工程用进行调试时才能使用，而在STK500编程对话框中是不支持对DWEN熔丝位编程的。

注意: 如果DWEN熔丝位编程为有效，ISP接口就不能正常使用了，这是由于debugWIRE控制了RESET引脚，使其不具备RESET的功能了。

JTAGICE mkII插针和6脚ISP插头的连接定义如下:

JTAGICE mkII, 6脚插头连接
JTAGICE mkII | 目标引脚 | 蟹状电缆连线的颜色 | STK500 ISP口引脚
脚 1 (TCK) | SCK | 黑 | 3
脚 2 (GND) | GND | 白 | 6
脚 3 (TDO) | MISO | 灰 | 1
脚 4 (VTref) | VTref | 紫 | 2
脚 5 (TMS) | - | 蓝 | -
脚 6 (nSRST) | RESET | 绿 | 5
脚 7 (不连接) | - | 黄 | -
脚 8 (nTRST) | - | 橙 | -
脚 9 (TDI) | MOSI | 红 | 4
脚 10 (GND) | GND | 褐 | -

注意

如果JTAGICE mkII在STK500上采用ISP方式连接，要确保拔掉STK500上的RESET跳线。同时根据STK500的ISP接口的定义（板上有印字标注）和鱿鱼状连接导线的颜色，正确的将JTAGICE mkII与芯片实现ISP方式的连接。

STK500 ISP连接器

通过鱿鱼状连接线将JTAGICE mkII连接到6脚ISP插座上。

当DWEN被编程后，只需要GND、VTref和RESET三根线就可以使用debugWIRE接口了。鱿鱼状连接线可以象上面描述的那样进行连接 (只需要用三根线)，一种不使用鱿鱼状连接线的更简单的方法，是在目标板上安装一个3芯插头直接与JTAGICE mkII的目标适配器连接。3芯插头的信号为GND、VTref和RESET，引脚应同JTAGICE mkII适配器的2，4，6脚相对应。

通过debugWIRE接口将JTAGICE mkII连接到目标板

注意: 为了能够使debugWIRE接口能够正常通讯，必须注意有关复位线的设置和使用。如果复位线上有上拉电阻，该电阻应使用大于10k以上，同时复位线上不能接有容性负载。实现debugWIRE的功能并不需要接上拉电阻，此外其他的连接到复位线上的逻辑连接路也应该被断开。

重新开放ISP接口

当DWEN熔丝位被编程为允许时，因为debugWIRE要控制RESET引脚，所以ISP接口就会被禁止掉。关于如何再次使能ISP接口的详细内容，请参考用JTAGICE mkII进行"在芯片调试"的最后部分。

注意

如果目标芯片的锁定溶丝位被编程的话，debugWIRE接口是不能使用的。当您对DWEN进行编程的时，一定要确认锁定溶丝位已清除，并且DWEN被编程后，千万不要对锁定位溶丝编程。如果DWEN(debugWIRE Enable Fuse)和锁定溶丝位都被编程的话，需要通过高压编程的方法对芯片进行擦除才能清除锁定溶丝位。锁定溶丝位被清除后debugWIRE接口就能重新使用了。

注意当DWEN未被编程时，只能通过ISP接口读取熔丝位，芯片特征值和实现对芯片的擦除工作。更多关于高电压编程的内容请参考STK500 .

当目标板正确的连接后就可以 连接到电脑了。

使用ATtiny13

为了能够使用ATtiny13，在使用10脚-6脚转换适配线的时候要注意：将PORTE口的RST连接到PORTB口的PB5，PORTE口的XT1连接PORTB口的PB3（2323上的XTAL1）。


连接 to Host PC

连接到电脑

这部分内容讲解如何将JTAGICE mkII与PC电脑连接。

TAGICE mkII 可以通过USB线或者串口线(连接到电脑的COM口)连接到电脑上。

JTAGICE mkII的后端

USB连接

AVR Studio安装完成后,还需要装一个USB驱动. 请参考 USB安装

串口连接

使用JTAGICE mkII自带的9芯RS232C线，针型接头连接到JTAGICE mkII，孔型接头连接到电脑上。通讯默认采用19,200 bps的速率(最高速率可达115,200bps)、无奇偶校验、8数据位、1停止位，(N81)，同时还使用了(RTS/CTS)两根硬件握手信号。如果使用其它RS232连接线，请确保所有相应的引脚连线都是连接好的。

AVR Studio不能强行控制COM口，如果有其他的设备或软件正在使用COM口(例如:IrDA、PDA 或超级终端等)，JTAGICE mkII的通讯将会失败。所以，应确保JTAGICE mkII所连接使用的COM口没有其他的软件在使用。

一旦将JTAGICE mkII连接了电脑和目标板，就可以连接电源了。


连接 Power

连接电源

JTAGICE mkII可以使用外部电源供电，也可以直接使用USB供电。机器的内部开关默认选择为使用外部电源供电。如果外部电源没有连接上或者低到了特定的值，就会选择从USB获取电源(如果USB已经连上的话)。

注意:

如果JTAGICE mkII仅从USB接口上获得供电电源，USB口至少能提供500mA的电流(Self Powered Hub)

外部电源要求 | Min | Max |
用直流供电(DC) | 9 | 15 | V DC
用交流供电(AC) | 9 | 9 | V AC

当JTAGICE mkII与电脑和目标板连接好后就可以开启电源了. 建议首先开启JTAGICE的电源然后开启目标板的电源.

ICE上两个LED指示灯分别指示目标板和它自己的电源是否开启. 请看下面的图片和描述.

JTAGICE mkII的LED指示灯:

编 号 | 颜 色 | 描述
1 | 绿 | 用于指示目标板的电源
2 | 红 | 指示JTAGICE mkII 电源
3 | 绿/黄/红 | 绿： 数据传输 黄： 固件升级或初始化 红： 空闲，没有连接到目标板 不亮：空闲，已连接到 AVR Studio (如果2号灯亮的话)

JTAGICE mkII连接好并开启电源后，下一个步骤就是启动运行 AVR Studio。

注意

如果硬件没有连接好，AVR Studio是不会进行调试工作的。

调试过程中，目标板电源反复的通断不会对硬件造成损坏。一旦有硬件复位发生，AVR Studio会自动重新与目标板同步，并能继续调试。如果AVR Studio没能做到这些，请在AVR Studio中关闭调试进程，并同时关掉目标板和JTAGICE mkII的电源，然后重新开启他们的电源，并在AVR Studio中重新启动调试过程。

点击硬件描述了解更多关于电源要求的内容.


必备软件

前端处理软件

这部分内容将涵盖了所有使用AVR Studio和JTAGICE mkII进行"在芯片"调试的新特性和要注意的地方。使用JTAG和debugWIRE需要用到同样的必备软件。AVR Studio在线帮助系统覆盖了AVR Studio的常规主题.

  • 安装AVR Studio

  • 使用JTAGICE mkII进行"在芯片"编程

  • 调试器选项

  • 使用JTAGICE mkII进行编程

  • 命令行软件

  • 手动固件升级


Installing AVR Studio

安装AVR Studio

AVR Studio和它的硬件开发环境(IDE)是所有AVR设备的理想软件。它包括编辑器、编译器、调试器，以及所有AVR工具包括JTAGICE mkII的必备前端工具。

把自带的ATMEL技术库光盘插入您的电脑并打开，点击AVR Studio 4的安装文件，根据屏幕提示便可将AVR Studio4安装到您的电脑。

  • AVR Studio 4.09或更新的版本才支持JTAGICE mkII。

最新版本的AVR Studio及其对新设备的支持可以在这里找到 www.atmel.com/AVR。

为了能够正常使用USB，需要安装USB的驱动。请参考快速入门中关于安装USB驱动的介绍。

  • 使用JTAGICE mkII进行“在芯片”调试


On-Chip Debugging with the JTAGICE mkII

用JTAGICE mkII进行片上调试

假定读者对如何使用AVR Studio软件有一定的了解。要了解更多的关于AVR Studio的用法请参考AVR Studio的交互式帮助系统。这里只介绍和JTAGICE mkII相关的部分。

启动软件

当系统被正确的连接并上电后，就应该运行AVR Studio了。 打开一个工程，然后AVR Studio将通过COM和USB口检测JTAGICE mkII。请注意AVR Studio是用顺序的方式扫描COM口的。如果有另外的Atmel工具连接到了COM或USB端口，确保他们关闭电源，断开连接，因为AVR Studio会和它检测到的第一个有效的工具相连。

在"Selecting debug Platform and Device"对话框中的"Open Platform Options"中，可以在将JTAGICE mkII连接到目标板之前更改调试选项。

AVR Studio会自动的检测JTAGICE mkII的固件是否已经过时，并提示您进行更新。如果有较大的更新，那么你必须进行升级才能使用 JTAGICE mkII，点击"Cancel"将会关闭工程。对于一个较小的更新，可以通过点击“no”按钮跳过。但是我们仍然建议随时进行更新。另外，你可以通过点击AVR Studio4－》"Tools"－》"JTAGICE mkII Upgrade..."，进行手动升级。

如果同时使用几个JTAGICE mkII，请检查COM端口号，查看哪个AVR Studio目前对应连接的是哪个JTAGICE mkII，使用USB连接，请检查JTAGICE mkII盒子背面的序列号与AVR Studio中列出的序列号，确定USB连接着哪个JTAGICE mkII。

JTAGICE mkII 序列号

检测AVR芯片

然后 JTAGICE mkII将设法检测目标板上是否已经上电。如果已经上电，JTAGICE mkII将设法读取目标芯片的JTAGID (Identification Number)或芯片特征码(Part signature)。如果JTAGICE mkII读取ID失败，请检查目标芯片是否连接到了JTAGICE mkII。检查的详细方法请参考下面的描述：

查看左面的绿色LED灯是否点亮，这个指示灯表明目标板上是否有电源。更多关于JTAGICE mkII指示灯的信息请参考硬件描述章节。

注意 请检查频率、电压等，确保目标芯片工作在正常和正确的条件下，以避免使用JTAG或debugWIRE时产生错误。具体安全工作条件的描述，参见相关器件手册的电特性章节。

使用JTAG连接

如果 JTAGICE mkII读取JTAGID失败，会跳出下面的对话框：

这可能的原因是，程序代码将MCUCSR寄存器的JTD (JTAG Disable)位置位。保持目标芯片处于复位状态，将会防止JTD位被程序代码设置。这可以通过点击“Yes”按钮实现，但此时请注意，AVR的RESET线已经连到了JTAGICE mkII。

注意

如果使用STK500时，确保在点击“Yes”前，将板上RESET跳线断开。

如果JTAGICE mkII仍然检测ID失败，将出现下面的对话框。

这可能是因为芯片的JTAGEN (JTAG Enable)熔丝位没有被编程。这个熔丝位不能通过JTAG方式来编程的，而必须由其他的编程方式，如ISP等实现编程。将JTAGICE mkII按照上一章节通过JTAG接口连接到目标板描述的那样连接到目标芯片上（ISP连接），然后点击"Yes"，将JTAGEN熔丝位编程。

然后就会出现下面的对话框，确保点击“Yes”前，请重新连接成普通的JTAG连接方式。

然后JTAGICE mkII将会自动的将OCD (On-Chip Debug)熔丝位设置成允许。注意，当调试结束并关闭工程的时候，JTAGICE mkII也可以自动的将OCD熔丝位设置成禁止。AVR Studio可以根据所检测到目标芯片的JTAG ID，正确的配置和设定在IO视图。

使用debugWIRE连接

如果JTAGICE mkII读取debugWIRE标志失败，会出现下面的对话框：

这可能是因为DWEN (debugWIRE Enable)熔丝位没有被编程。这个熔丝位不能用debugWIRE方式编程，也需要利用如ISP接口等的其他编程方式来编程。请将JTAGICE mkII按照通过JTAG接口连接到目标板描述的那样连接到目标芯片上（ISP连接）。当JTAGICE mkII与目标芯片按SPI方式进行连接后，选择"Use SPI to enable debugWire interface"选择项，然后点击“OK”。点击Help按钮可以查看相关的在线帮助。

为了激活debugWIRE接口，在将SWEN熔丝位设置成允许后，目标板需要重新上电。

重启电源后点击“OK”。现在就启动debugWIRE。

注意

当将DWEN熔丝位设置成允许后，因为要控制RESET线，所以ISP接口就会被禁止。

恢复ISP接口

按照下面的描述可以恢复ISP接口：

  1. 按照前面所说的用6根鱿鱼状连接导线将JTAGICE mkII与目标芯片按ISP方式连接。

  2. 在AVR Studio的调试下拉菜单中，打开"JTAGICE mkII Options"，并单击"Connections"标签。

  3. 点击"disable DebugWIRE"按钮

4. 当出现下面的对话框时，点击“YES”。此时debugWIRE口被禁止掉，而ISP口被恢复

注意

如果目标芯片的锁定位被编程了，就不能使用debugWIRE接口。应确保在对DWEN熔丝位编程前锁定位为未编程状态，并且在DWEN熔丝位被编程后不要对熔丝位进行编程。如果他们都被编程，只能通过高电压编程的方式，对芯片进行擦除同时清除锁定位。锁定位被清除后，就又可以使用debugWIRE接口了。

注意当DWEN熔丝位没有被编程时，通过ISP接口只能读取芯片的熔丝位，标志位，以及进行擦除芯片的操作。在STK500 中可以查看更多的关于高电压编程的内容。。

  • 调试选项


Debugger Options

片上（On-Chip）调试选项

在调试过程中，点击AVR Studio的菜单：Debug -> JTAGICE mkII Options，便可进入片上调试选项的设置。这个JTAGICE mkII 属性对话框可以对JTAG 和 debugWIRE进行设置，它包括3个不同的标签页：

  • 连接（Connection）

  • 调试（Debug）

  • 状态（Status ）

连接对话框（Connection Dialog ）

一旦通过JTAG口或debugWIRE口与目标芯片连接后，该对话框含有的一些与连接相关的设置选项。

JTAG连接

使用JTAG时连接时，对话框（Connection Dialog Box）象下面这样显示

JTAGICE mkII和目标芯片的通讯速率依赖于目标芯片的时钟频率。在这个标签对话框中，输入所连接的目标芯片使用系统时钟频率值。AVR Studio就会根据指定的频率设定通讯的最佳速率。注意：如果目标芯片系统时钟使用没有校准的内部RC振荡器的话，它的实际运行速率可能比标称的要慢，这将导致通讯出现问题。

在上面显示的图片中COM口的选项是灰色的，因为现在使用的是USB。

如果调试的目标芯片是JTAG菊花链中的一个，那么就要说明在该芯片前面的芯片数和IR-bits的个数，以及后面的芯片数和IR-bits的个数。最大的IR-bits的个数为32 bits。每片AVR使用4个bit的IR-bits(4-bit IR-length)。检查每个芯片的IR-length，然后计算前面所有芯片的IR-length之和以及后面所有IR－length之和。请看下面的例子：

JTAG 菊花链示例：

上面的图显示了JTAGICE mkII与4个芯片的菊花链相连。要访问芯片B，可在JTAGICE mkII菊花链设置对话框中做如下图所示的设置。

Accessing Device B

在通信连接过程中，AVR Studio首先要根据当前JTAG菊花链的设置情况与指定的目标芯片通信。如果设置与实际情况不符，AVR Studio会检测到错误，并给出提示，要求输入正确的设置。如果因为某种原因需要人为改变设置，可以开始启动调试前点击：工程菜单（project menue）－》ProjectWizard－》Select debug platform and device－》Open Platform Options，可以强制调出设置对话框。

如下图所示，在STK500/AVRISP/JTAGICE(mkI)/JTAGICE mkII的编程窗口中的Advanced一栏中 找到JTAG菊花链的设置。

在"COM Port Baud Rate"这一栏中，用户用户可以选择确定通讯速率与PC通信。如果在通讯出现问题，应要降低通信速率，或者改用USB。

debugWIRE连接

当使用debugWIRE与调试芯片连接后，连接对话框（Connection Dialog Box）的内容如下：

上图中的COM口（COM Port）选项是灰的，表明现在是通过USB与PC连接。

从图中可以看到，使用debugWIRE口连接仿真时，这个对话框中唯一可以使用的就是禁止debugwire（Disable debugWIRE）这个按钮。点击这个按钮可以禁止debugWIRE口，恢复ISP接口的使用。

调试对话框（Debug Dialog）

该对话框里包含了关于使用JTAG 或 debugWIRE调试的一些选项。

JTAG

当使用JTAG口调试时，该对话框的内容如下：

  • "在停止模式时计数器仍然运行（Run Timers in Stopped Mode）"。这个选项表示，当采用单步运行调试程序代码时，芯片的计数器照常运转。如果这个选项没有被选中，芯片中计数器就会严格按照时钟周期，并代码的单步执行相同步的精确运转。

  • "芯片编程芯片时保存EEPROM中的内容（Preserve EEPROM contents when reprogramming device）"。选中此会避免编程的时候擦除EEPROM中的数据。

  • "编程芯片时总是激活外部复位（Always activate external reset when reprogramming device）"。 在执行完芯片擦除指令后，JTAGICE mkII将会释放先前置低的RESET线，该选项可以允许/禁止这个功能。

  • "在输出窗口中显示断点信息（Print breakpoint information in output window）"。用户可以通过这个选项允许/禁止断点信息在消息输出窗口中的显示。

  • "禁止BREAK指令（Disable BREAK instruction）"。 JTAGICE mkII使用JTAG接口时支持3个硬件断点。当有超过3个的硬件断点时，将会在代码中插入一个BREAK指令。选定这个选项可以禁止此项功能。注意：这个选项不会影响人为设定的BREAK指令（在代码中），在仿真过程中，要跳过程序中一条人为设定的BREAK指令时，在该BREAK指令处点击右键，选择"Set next statement"。

  • "在运行模式中允许I/O调试寄存器（Enable I/O Debug Register (IDR) in run mode）"。选中此选项时，表示允许某些芯片（这些芯片中的IDR和OSCCAL寄存器共享同一个I/O地址）通过IDR/OSCCAL寄存器输出IDR事件。IDR事件的发生是在应用程序写IDR寄存器时。

  • "程序下载（Program Download）"。这一部分允许用户设定和选择程序下载的不同时机。

程序启动

"入口函数（Entry function）"。

当在AVR Studio中实行复位操作后，AVR Studio会返回到这个函数的开始处。默认的入口函数是'main'函数，但是用户可以定义成其他的函数，例如_C_startup。

"Warn & break if not found or not in section corresponding to boot reset fuses".

AVR Studio能检测所描述的入口函数是否存在于由复位启动熔丝位所设定的区域中。

如果这个选现被选中，当出现下面情况时会给出警告提示，程序则停止在复位中断向量处。

* 入口函数不存在，或没有检测到

* 入口函数在程序代码区，复位引导熔丝被编程

* 入口函数在引导装载区，复位引导熔丝没有被编程

如果这个选项没有被选中，就不会有警告提示产生，AVR Studio会找到入口函数的开始地方。

对于一个AVR汇编工程，Studio会停在复位向量处。

debugWIRE

使用debugWIRE调试时，调试标签框的内容如下：

与使用JTAG调试不同，"Preserve EEPROM...", "Always activate...", "Disable BREAK...", "...Enable I/O Debug..." and "...Program Startup..."这些选项都不可用。

debugWIRE不支持硬件断点。当在AVR Studio中插入一个断点（使用debugWIRE调试），JTAGICE mkII将在芯片中相应的程序地址处加入一个BREAK指令。

"程序下载（Program Download）"。这一部分允许用户设定和选择程序下载的不同时机。

状态标签（Status Dialog）

状态标签的内容显示如下。对于JTAG芯片，可以从芯片中读出JTAGID。可以从JTAGID中获得芯片版本的信息，具体方法请参考数据手册的相关部分。

状态标签报告了当前JTAGICE mkII 和目标芯片的状态。

PWM标签（PWM Dialog）(仅AT90PWM2/3有效)

这个标签仅对调试AT90PWM2/3芯片时可用。下面显示了功率放大控制器（Power Stage Controllers）和模拟比较器（Analog comparators）的设置。

处理器视图（ Processor view）

下面显示的是AVR Studio中的处理器视图，使用JTAG和debugWIRE时没有区别。

使用JTAGICE mkII时运行时钟周期计数器（Cycle Counter）、系统时钟频率（Frequency）、和运行时间计时表（StopWatch）功能无效，这是由于采用片上调试功能，程序是在芯片里实际运行而导致的。

  • 用JTAGICE mkII编程


Programming with JTAGICE mkII

用JTAGICE mkII编程

除了用JTAGICE mkII进行片上调试外，它还可以用作编程器。点击"Tools -> Program AVR -> Connect..."就会显示AVR 编程器选择对话框，如下所示：

注意: DebugWIRE不是一个编程接口，因此不支持编程。

在“Platform”中选定JTAGICE mkII并点击"Connect..."。如果“Port”中选定了“Auto”，AVR Studio将自动搜索COM端口，寻找JTAGICE mkII。如果指定了一个端口，那么AVR Studio仅在指定的端口中寻找JTAGICE mkII。注意：编程接口同样支持连城菊花链式的多个芯片编程。

如果不能连接到JTAGICE mkII，确保没有其他的设备或程序占用COM口，并确保没正在使用该JTAGICE mkII进行调试工作。

严重声明: 如果你禁止了JTAG Enable熔丝位，你就不能用JTAGICE mkII和目标芯片通讯。如果目标芯片没有应答，就会跳出一个实施外部复位选项和调整菊花链的选项拦。关于菊花链选项，也可以在编程对话框的“高级”标签中找到。

使用JTAG接口时，为确保编程成功，必须在对Flash或EEPROM编程前首先进行擦除芯片的操作。如果你要擦除EEPROM中的内容，请记住要禁止对 “ Preserve EEPROM”熔丝编程。

注意: 关于编程AVR芯片对话框的描述可以在帮助系统的STK500文档中找到。

使用JTAGICE mkII对AVR编程时，编程对话框的标题是JTAGICE mkII而不是STK500，但JTAGICE mkII的编程界面和STK500编程界面很相似，除了一些JTAGICE mkII所不支持的功能变灰以外。

编程对话框的主要标签如下图所示：

“advanced”标签内容如下，这里支持读取JTAG ID

命令行软件

一个类似DOS版的STK500的命令行软件，名为jtagiceii.exe，支持所有的JTAGICE mkII编程。这个程序可以在AVR Studio安装路径下的JTAGICEmkII文件夹下找到。

输入"jtagiceii.exe -h"可以获取所有有效的命令。注意，命令行界面同样支持菊花链。

其他主题：

  • 简介

  • 入门指导

  • 硬件描述

  • 注意事项

  • 疑难解答

  • 所支持的芯片


JTAGICE_mkII_Command_Line_Software

JTAGICE mkII 命令行软件

这里列出了JTAGICE mkII软件所有命令及可使用的参数

用法: jtagiceii.exe [命令] [参数]

命令:

-h, -? 显示本帮助.

-e 擦除芯片.

-j 读取JTAG ID 字符串.

-f <熔丝位> 写熔丝位的高/低字节. LSB 将会写到低字节,MSB 将会写道高字节.

-l <锁定位> 将特定值写入锁定位.

-p[f|e|b] 写入 FLASH (-pf), EEPROM (-pe) 或 两者 (-pb) 存储器， 要写入的数据文件名使用-if(FLASH) 和/或 ie(EEPROM)定义.

-q 读熔丝位. 如果被选中的器件有扩展熔丝位,也会被读出来.

-r[f|e|b] 读FLASH (-rf), EEPROM (-re) 或 both (-rb) 存储器. 要保存成的数据文件名使用-of(FLASH) 和/或 oe(EEPROM)定义.

-s 读标志位.

-v[f|e|b] 校验 FLASH (-vf), EEPROM (-ve) 或 两者 (-vb) 的存储器. 要输入的数据文件后要带有-if(FLASH) 和/或 ie(EEPROM),作为参数. 要求输入文件名,文件名后带有-if(FLASH) 和/或 ie(EEPROM),作为参数-E <扩展熔丝位> 写扩展熔丝位.

-F <熔丝位> 校验熔丝位的高/低字节.LSB 表明要写到低字节,MSB表明要写入高字节.

-G <扩展熔丝位> 将扩展熔丝位和给定值比较.

-O <地址> 读振荡器的值. 地址是在器件的数据手册(DataSheet)中指定的地址.

-S[f|e] <地址> 把用-O 或 -Z 读出的振荡器的值写到FLASH (-Sf) 或 EEPROM (-Se)给定的位置上去.

-Z <地址> (擦除芯片前)从EEPROM中指定的位置读取数据.这些数据可以用-S[f|e]命令重新写入EEPROM 或者FLASH中.

参数:

-ae <起始>,<终止> 指定读取EEPROM的地址范围.默认为整个存储器

-af <起始>,<终止>指定读取FLASH存储器的地址范围.默认为全部存储器

-c <接口> 指定要连接到的接口. 可以是USB, COM1-8 或 自动 (默认). 用USB的话, 仿真器的序列号也可以被指定: -c USB:00A00000002C

-d <芯片> [必须] 指定芯片的类型.

-ie <文件> 指定要写入到EEPROM中的文件.

-if <文件> 指定要写入到FLASH中的文件.

-oe <文件> 指定文件用来保存从EEPROM中读出的数据.

-of <文件> 指定文件用来保存从FLASH中读出的数据.

-z 无进程显示.应用与重定义输出文件.

-D <devsbefore,devsafter,bitsbefore,bitsafter> 进行菊花链设置.

-J <波特率> 省略不用，仅用作兼容.

-R 当编程的时候应用外部复位.

-Y 执行振荡器的频率调整.更多内容请看AVR053

用法示例: jtagiceii.exe -d ATmega128 -e -pf -if c:\tmp\test.hex

所支持的器件: AT76C, AT76C, AT90CAN128, ATmega128, ATmega16,

ATmega162, ATmega165, ATmega169, ATmega2560, ATmega2561,

ATmega32, ATmega323, ATmega325, ATmega3250, ATmega329,

ATmega3290, ATmega406, ATmega64

  • 手动固件升级


固件升级

JTAGICE mkII 固件升级

JTAGICE mkII一般情况下会被AVR Studio自动升级。当AVR Studio检测到随本身一起发布的固件比目前连接的JTAGICE mkII的固件版本新的时候，就会自动的进行固件的升级操作。当访问AVR Studio的tool菜单中的Program AVR选项，使用STK500/AVRISP/JTAGICE对话框窗口时候，自动升级也会进行.

如果JTAGICE mkII的固件不可靠的话，JTAGICE mkII升级和正常工作会停止。固件的不可靠会使的升级的时候，突然发生JTAGICEmkII 与 PC的通信被中断，或者JTAGICE mkII重复烧入错误的文件。这时候你需要进行人工的升级来使JTAGICEmlII重新正常工作。

下面列出了人工升级JTAGICE mkII的步骤，在任何情况都适用:

  1. 断开JTAGICEmkII的电源

  2. 断开它与任何目标板的连接

  3. 注意只有当 JTAGICE mkII不响应手动升级的时候才执行这一步！将PROBE插座上的TDI和TDO连接在一起，在PROBE插座的Vcc和Ground上提供电源，启动ICE。这是进入了自引导模式(Bootloader mode)。当固件出现严重错误的时候，这种方法可强制进行固件更新。在这种情况下，只有当升级成功完成后，JTAGICE mkII才会退出自引导模式。

  4. 打开 JTAGICE mkII 的电源

  5. 运行 AVR Studio
  6. 在tool菜单中运行"JTAGICE mkII Upgrade..."
  7. 点击"Start Upgrading"按钮
  8. 升级完成后重启电源
  9. 点击"Done"按钮
  10. 现在你的JTAGICEmkII已经升级好待用了！


Special Considerations

注意事项

当使用 JTAGICE mkII时，一些关于 JTAG 和 debugWIRE 接口的注意事项必须被考虑。

一般的注意事项 (针对两种接口)

对于 JTAG 和 debugWIRE都有如下的注意事项：

外围IO设备

尽管程序在断点处停止执行，但是大多数IO外围设备还会继续运行。例如：当使用UART口进行传输时遇到断点，UART传输将会继续完成并反映到相关的位设定。TXC状态标志位将会被置位，并在下一个次单步执行代码时为有效，尽管在实际的芯片中是延后发生的。

在停止模式时，所有的IO模块将继续运行，除了以下两个例外：

  • 定时器/计数器（Timer/Counters ）

  • 看门狗定时器（Watchdog Timer ）

停止模式时定时器/计数器

从片上（On-Chip）调试菜单的选项中，用户可以设定定时器/计数器在停止模式时是否继续执行。

看门狗定时器

在停止模式时，看门狗定时器会停止计时。 这样可以避免在停止模式中AVR被无意的重启。

单步执行

因为在停止模式时，IO还是继续执行，所以要注意避免因此产生的超时事件。

例如:

OUT PORTB, 0xAA

IN TEMP, PINB

这段程序在实际的芯片中运行时可能读不到正确的0xAA值。必须在输出及输入指令中插入一个NOP指令以确保输出的数据正确地锁存到输入寄存器后再读入。然而在JTAGICE mkII中单步执行时总会读到正确地0XAA值，因为在停止模式时IO总是全速持续运行，有足够的时间将数据输出到引脚并锁定到输入寄存器中。

调试的时候目标芯片复位或掉电

如果在调试的时候JTAGICE mkII发生掉电，通讯就会失败。如果仅是目标芯片掉电，那么调试可以继续执行。

然而，如果在调试的时候目标芯片复位或掉电，芯片可能进入AVR Studio和JTAGICE mkII预料不到的状态。

这种情况下，执行AVR Studio的某项操作 (Run, Single Step,...)将会更新视图，并反映当前目标芯片的状态。而放弃前面AVR Studio所达到的位置或状态。注意，当目标芯片关闭电源时，它会暂时忘记硬件断点。当在AVR Studio中执行运行，或复位命令时，会重新校正断点。

硬件复位时，硬件断点一直保留。

消息窗口

提示:消息窗口会给出AVR Studio和JTAGICE mkII正在执行的正确操作

访问16位寄存器

举例来说吧，TCNTn， OCRn 和 ICRn都是16位的寄存器，他们可以用8位的数据线来访问，但是要经过两次的读/写操作才能完成。如果只进行了一次就停止了，或在这种情况下单步执行，就会使访问的数据出错。

JTAG 接口注意事项

下面这些注意事项是JTAG特有的，不适用于debugWIRE。

JTAG 端口频率

使用AVR Studio时，将会建议你输入目标芯片的频率，并依此获得最佳的JTAG PORT频率。请参考前端处理软件 中关于如何获得最佳端口频率的描述。

注意

如果使用内部RC振荡器，各个芯片的频率可能会受温度和VCC的影响而各不相同。确保用这些频率中最高的值来计算JTAGICE mkII端口频率。

JTAG 有关的熔丝位设定

要正确使用JTAG接口，有两个熔丝位必须设置。他们是JTAG允许(JTAGEN)熔丝位和OCD允许(On-Chip debuging enabled ,简称OCDEN)熔丝位。出厂的默认设置是JTAGEN被编程而OCDEN没被编程。如果JTAGEN熔丝位被不小心禁掉了，那么只能通过另外的编程接口（如 ：使用STK500 或 AVRISP的ISP）来将它设置成允许。

ATmega128使用JTAGICE mkII

使用JTAGICE mkII调试ATmega128时不支持软件断点，但是支持硬件断点。

访问某些芯片中有共享的I/O地址的UBRRH/UCSRC寄存器

当访问这些寄存器时需要特别注意：

写访问.

当对这个I/O位置进行写操作时，URSEL（USART Register Select）位决定了要写到哪个寄存器。如果URSEL是0，则写到UBRRH中；如果URSEL为1，则写到UCSRC中。

下面的示例代码演示了如何对这两个寄存器进行写访问。

注意: 1.下面的代码假定了相关的头文件已经被包含；

就像代码所说明的那样，虽然共享同样的I /O地址，但是写访问不会受影响。

汇编代码：

...

; 设置UBRRH 为 2

ldi r16,0x02

out UBRRH,r16

...

; 将USBS和UCSZ1位设置成1，其余位设置成0

ldi r16,(1<<URSEL)|(1<<USBS)|(1<<UCSZ1)

out UCSRC,r16

...

C语言代码：

...

/* 设置UBRRH 为 2 */

UBRRH = 0x02;

...

/* 将USBS和UCSZ1位设置成1，其余位设置成0*/

UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ1);

...

读访问

对UBRRH或UCSRC寄存器进行读访问则相对复杂些。

然而在大多数的应用程序中，很少有必要读取这两个寄存器。

读操作是由时序控制的。对此I/O地址进行一次读取将返回UBRH的内容。接下来下一个周期马上再对此地址读取，就会返回UCSRC的内容。注意对UCSRC的读取时序是一个自动的操作。

在读的过程中要禁止中断（如关闭全局中断允许等）。

下面的代码示例了如何对UCSRC寄存器进行读访问。

注意: 1. 下面的代码都假定相关的头文件已经被包含

汇编代码将读出的UCSRC的值放在r16中

对UBRRH内容的访问就象访问普通的寄存器一样。只要它前面的指令不是对这个地址寄存器的访问。

汇编代码：

USART_ReadUCSRC:

; 读 UCSRC

in r16,UBRRH

in r16,UCSRC

ret

C语言代码：

unsigned char USART_ReadUCSRC( void )

{

unsigned char ucsrc;

/* 读 UCSRC */

ucsrc = UBRRH;

ucsrc = UCSRC;

return ucsrc;

}

使用JTAG接口时，JTAG引脚的功能

如果JTAG接口是被允许的，JTAG引脚的其它复用功能就不能使用了。它将被用作JTAG的专用引线，直到JTAG接口被禁止（在程序代码中将MCUCSR寄存器的JTD位清0，或者用编程器清除JTAGEN熔丝位）。

访问 IO 寄存器

对某些寄存器的访问将不得不影响单片机的状态。这些影响可能是改变状态寄存器，或破坏寄存器的内容。在这种情况下，对这些寄存器进行读取将导致以后的仿真出现问题。下面就是照芯片型号分类，将这些使用JTAGICE mKII时不能直接访问的寄存器列出：

  • ATmega16 and ATmega32

只能读: ADCSRA, ACSR, UCSRA, SPSR, TWCR, TIFR, GIFR

不能访问: UDR, SPDR, UCSRC/UBRRH, OCDR/OSCCAL

  • ATmega64 and ATmega128

只能读: ADCSRA, UCSR0A, SPSR, TIFR, EIFR, TWCR, ETIFR, UCSR1A

不能访问: UDR0A, SPDR, OCDR, UDR1

  • ATmega162

只能读: UCSR1A, ACSR, UCSR0A, SPSR, TIFR, GIFR, ETIFR

不能访问: UDR1, OCDR/OSCCAL, UDR0, SPDR, UCSR0C/UBRR0H, UCSR1C/UBRR1H

  • ATmega169, ATmega329, ATmega3290, ATmega325, ATmega3250

只能读: PINA, PINB, PINC, PIND, PINE, PINF, PING, TIFR0, TIFR1, TIFR2, EIFR, SPSR, ACSR, ADCSRA, USISR, UCSRA, LCDCRA

不能访问: SPDR, OCDR, UDR

JTAG 引脚

由于JTAG使用了四个JTAG引脚，因此可能会影响到芯片中与这4个引脚相关的其它功能。在实际应用时请参考相关的数据手册，也可以参考下面的表格：

Part | JTAG pins | 这些引脚的第二功能
ATmega16 ATmega32 | PC2 - PC5 | 无
ATmega162 | PC4 - PC7 | 外部SRAM地址线, A12 - A15 * 管脚电平改变中断, PCINT12 - PCINT15
ATmega169 ATmega329 ATmega3290 ATmega325 ATmega3250 ATmega64 ATmega128 AT90CAN128 | PF4 - PF7 | ADC 通道, ADC4 - ADC7

*注意：当仿真的ATmega162外部扩展了SRAM时，程序只能访问SRAM的低4Kb，因为JTAG接口仅使用4个最高位的地址线，外部SRAM设备的高4位地址线就不能连接到ATmega162，而要么置高要么置低。使用STK501时，只要拔掉A12 - A15的跳线就可以了。

debugWIRE 接口注意事项

下面是debugWIRE特有的注意事项：

局限性

dw（ebugWIRE communication）引脚和RESET（外部复位）引脚是同一个引脚。所以当使用debugWIRE时就不能再支持外部复位了。

用 debugWIRE系统仿真全速运行的芯片时，对所有的I/O仿真都很精确，一旦当CPU停止运行时，用调试器（AVR Studio）对I/O寄存器的访问就要小心了。

设置DWEN熔丝位允许后，在任何休眠模式下部分时钟系统将一直处在运行中，这将增加了电源消耗。所以，不使用debugWIRE时，要禁止DWEN熔丝位。

当设计一个使用debugWIRE的系统时，为保证正确的运行，要特别注意以下几点：

  • dW/(RESET)线上的上拉电阻要小于10k。对于debugWIRE功能，不需要上拉电阻。

  • 将RESET直接连到VCC上，debugWIRE将不能工作。

  • 使用debugWIRE时，连到RESET上的电容要断开。

  • 所有的外部复位源和连到RESET线上的设备要断开。

  • 不要将芯片上的锁定位编程。

debugWIRE 有关的熔丝位设定

使用 debugWIRE前，必须首先将DWEN（debugWIRE Enable Fusle）熔丝位编程。出厂时，这个熔丝位默认没有被编程。debugWIRE接口本身不能编程这个熔丝位。位了使DWEN熔丝位允许，必须使用其他如ISP模式。具体做法请参考这里。

请注意当允许SWEN时，必须要禁止锁定位，如果锁定位阻止了debugWIRE，SWEN又阻止了ISP接口，这种情况下必须使用高电压编程来擦除锁定位，然后设置熔丝位，选择使用debugWIRE或ISP接口。

访问 IO寄存器

对某些寄存器的访问将不得不影响单片机的状态。这些影响可能是改变状态寄存器，或破坏寄存器的内容。在这种情况下，对这些寄存器进行读取将导致以后的仿真出现问题。下面就按照芯片的分类，将这些使用JTAGICE mKII时不能直接访问的寄存器列出：

  • ATmega48, ATmega88 and ATmega168

只能读: TIFR0, TIFR1, TIFR2, PCIFR, EIFR, SPSR, TWCR, UCSR0A, OSCCAL, CLKPR, ADCSRA, PINB, PINC, PIND, WDTCSR, ACSR

不能访问: SPDR, MONDR, UDR0

  • ATtiny13

只能读: ADCSRA, ACSR, WDTCR, TIFR0, GIFR, OSCCAL, CLKPR, PINB, SPMCSR

不能访问: DWDR

  • ATtiny2313

只能读: ACSR, USISR, WDTCR, TIFR, EIFR, OSCCAL, CLKPR, PINA, PINB, PIND, UCSRA

不能访问: UDR, SPMCSR


Hardware Description

硬件描述

下面列出了关于JTAGICE mkII硬件的信息。

通用板描述

下面显示了JTAGICE mkII的方框图。这一部分我们将进一步对硬件及其实现进行描述。

JTAGICE mkII可以分成5个主要的模块，下面是他的方框图：

  • 通讯模块

  • 控制模块

  • 电平转换模块

  • 目标适配器

  • 电源供应模块

在下面的内容中，会依次讲解这些模块。

JTAGICE mkII 方框图

通讯模块

JTAGICE mkII可以通过USB或标准RS-232接口与AVR Studio进行通讯。请看下面的通讯模块的方框图：

USB

RS-232

控制模块

控制模块负责将前端处理软件的指令转换成AVR JTAG或debugWIRE的AVROCD指令。另外，此模块监视并设置了一套控制信号。它的方框图如下：

控制模块方框图

LED状态指示灯

JTAGICE mkII有3个LED状态指示灯，如下：

JTAGICE mkII LED指示灯

编号 | 颜色 | 描述
1 | 绿 | 用于指示目标板的电源
2 | 红 | 指示JTAGICE mkII 电源
3 | 绿/黄/红 | 绿： 数据传输 黄： 固件升级或初始化 红： 空闲，没有连接到目标板 不亮：空闲，已连接到 AVR Studio (如果2号灯亮的话)

电平转换模块

电平转换模块的目的是保证JTAGICE mkII与工作在不同电压下的目标板之间能正常通信。应用这个模块可以支持工作在1.8V 到5.5V的目标板。

JTAGICE mkII可以用一个外部电源供电，也可以由USB供电。有关电源供应的详细内容，请参考电源供应模块这一部分的内容。

电源供应模块

JTAGICE mkII的电源模块象下面框图描述的那样工作。JTAGICE mkII背面的电源开关，同时将外部电源和USB电源接通，一个内部选择开关将决定到底使用哪种电源。如果外部电源提供了足够的电能，将会默认选择外部电源供电。

注意: JTAGICE mkII不能由目标板供电

电源供应方框图

目标适配器

下面是目标适配器的图片。20芯的排线（flex-cable）将目标适配器连接到JTAGICE mkII。目标适配器有两个10脚的插头，他们都有相同的引脚编号和引脚标志。使用时应选择最适合目标板插头，但任何时刻都只能使用其中的一个。

目标适配器的图

JTAGICE mkII目标适配器的实际尺寸

连接器的引脚图（背面）

管脚 | 意义 | I/O | 描述
1 | TCK | 输出 | 检验时钟(Test Clock)，从JTAGICE mkII 到目标JTAG端口的时钟信号
2 | GND | - | 地
3 | TDO | 输入 | 检验数据输出(Test Data Out)，从目标JTAG端口到JTAGICE mkII的数据信号
4 | VTref | 输入 | 目标板参考电压(Target reference voltage)，目标板上的VDD，经常用来控制电平转换和目标板上的LED电源指示灯
5 | TMS | 输出 | 检验模式选择(Test Mode Select)，从JTAGICE mkII到目标JTAG口的模式选择信号
6 | nSRST | 输出/输入 | 从适配器到目标系统复位的集电极开路输出。这个引脚也是适配器的输入，所以目标板上的复位启动会报告给JTAGICE mkII
7 | - | - | 未连接
8 | nTRST | 不连接(输出) | 未连接，预留为同其他设备的兼容。(JTAG端口复位)
9 | TDI | 输出 | 检验数据输入(Test Data Input)，从JTAGICE mkII到JTAG端口的数据信号
10 | GND | - | 地

STK500 JTAG 适配器

JTAGICE mkII附带的STK500适配器，它提供了一种简单的方法将ICE与在STK500上支持JTAG接口的芯片连接。在通过JTAG接口连接到目标板中查看详细的信息。

JTAG 到 ISP 接口电缆

JTAGICE mkII所附带的JTAG 到 ISP 接口电缆，提供了一种简单的方法将JTAGICE插头与在STK500上AVR芯片的ISP引脚连接。这种电缆也可用于安装了与AVR STK500 ISP插头相同形式和定义的目标板。


问题解答

问题排解

下面的表格中列出了经常出现的问题，原因以及解决方法。

问 题 | 原 因 | 解决方法
JTAG 仿真启动了，但是突然失败了 | 1. JTAGICE mkII供电不足 2. 应用程序可能不小心将MCUCSR寄存器的JTAG Disable位写入了 3. 同步失败 | 1. 如果JTAGICE mkII仅由USB供电，要求USB至少提供500mA 电流 2. 将reset位拉低重新控制芯片，并改变程序代码使JTAG Disable位就不被写入。 3. 重新启动JTAGICE mkII 和目标板。减小PC 和 JTAGICE mkII的通讯速率也许可以修复。
用JTAGICE mkII将程序下载到芯片上后，仿真不能工作 | 1. JTAG ENABLE 熔丝位被设定为禁止 2. 编程接口还在活动，不能在同一时刻使用OCD和进行编程 | 1. 将JTAG ENABLE熔丝位编程为允许。 2. 关掉编程接口，然后进入仿真模式。
JTAGICE mkII被AVR Studio 或其他的前端处理软件检测到，但是它不能连接到目标芯片 | JTAG: JTAG ENABLE 熔丝位没有被编程 debugWIRE: DWEN 熔丝位没有被编程 | JTAG:用其他的编程模式将JTAG ENABLE熔丝位编程 debugWIRE: 用其他的编程接口将DWEN 熔丝位编程
AVR Studio不能检测到 JTAGICE mkII | 1. 串行端口缓冲器（ COM port buffer）太小 2. 同步失败 3. 串行电缆没有被正确的连接 4. 其他的程序或设备要求控制串口（COM port） | 1. 增加串行端口缓冲器 2. 重启JTAGICE mkII 和目标板 3. 确保串行电缆正确的连接 4. 关闭要求控制串口（COM port）的程序或设备
AVR Studio显示当前没有电压 | 1. 目标板上没有上电 2. Vtref 没有连上 3. 目标板电压太低 | 1. 向目标板供电 2. 确保你的插头连接上了Vtref 信号线 3. 确保目标板有足够的电压
OCD 熔丝位被禁止，但是在用JTAGICE mkII时, OCD仍然可用 | TAGICE mkII会自动的对OCD熔丝位进行编程，如果这个熔丝位被禁止的话 | 这是正确的操做
在AVR Studio IO视图窗中显示的一些IO寄存器的内容不能正确更新 | 当有效读取情况状态没有产生时,JTAGICE mkII不会更新AVR Studio IO 视图的显示 | 将该IO位置读到临时寄存器，在调试过程中在这个临时寄存器中对它进行观察。参看注意事项这一章，来了解哪些寄存器能使用此方式。
使用外部时钟时，不能在STK500和STK502上对芯片ATmega169仿真 | STK502板上的TOSC开关处在TOSC位置 | 将STK502板上的TOSC开关调到XTAL位置
某些时候，当使用软件断点的时候，程序会冻结，而不能正确的工作 | TAGICE mkII调试进程没有被正确的关闭，而断点指令仍然保留在flash区中 | 确保JTAGICE mkII调试进程正确关闭，或用正确的hex文件编程Flash
debugWIRE仿真器启动成功，但是突然运行失败 | 1. JTAGICE mkII供电不足 2.驱动电路或电容干扰了通讯中的RESET线 3. 同步失败 | 1. 如果JTAGICE mkII仅由USB供电，要求USB至少提供500mA 电流 2. 移除RESET线上的所有的驱动电路和电容。确保上拉电阻大于10k欧姆 3. 重启JTAGICE mkII 和目标板； 降低PC和JTAGICE mkII的通讯速率可能解决问题
使用debugWIRE调试后，不能用ISP进行下载 | 当使用debugWIRE 接口时ISP接口就会被禁止 | 按照通过debugWIRE 接口连接到目标板上描述的内容重新使ISP接口可用
ISP和debugWIRE 都不工作 | ISP和debugWIRE 接口都被禁止了。如果锁定位被编程了DebugWIRE就不会工作。 | 用高电压编程的方式连接到目标板，允许ISP或debugWIRE，并清除锁定位（如果使用debugWIRE）
使用debugWIRE 或 JTAG时跳出错误信息或出现其他奇怪现象 | 目标板没有工作在正常条件范围内。如使用系统频率高，但工作在电压低 | 确保目标板工作在安全工作区 （在该器件相应的用户手册上有描述），降低频率且/或增加电压


debugWire target identification failures

使用DebugWire时不能识别目标芯片

如果AVR Studio不能识别目标芯片的话会跳出下面的窗口。可能是因为下面这些原因：

  • 使用STK500时，板上插上了RESET跳线。在debugWIRE模式中RESET引脚被用来做信号线，所以要连接到nSRST引脚上。

  • RESET线的上拉电阻小于10K欧姆，或者RESET线上有容性负载。

  • 最有可能的一种情况就是芯片上的DWEN熔丝位被设定为禁止。debugWIRE是一个仅用于调试的接口，并不能对熔丝位进行编程，所以要置位DWEN熔丝位，就要使用SPI或高电压编程模式。在AVR Studio的对话框中，建议使用的JTAGICE mkII按SPI的方式连接，按照下面的步骤可以进入SPI模式：

  • 将JTAGICE mkII目标适配卡（Target Adapter card）上的鱿鱼状连接线连接到6脚的ISP插头上。已经连接好的3根线保持原样，你只需再连接3根。关于如何将目标适配卡和ISP插头连接的描述，请点这里。

  • 点击对话框中的Yes按钮。

AVR Studio现在就用SPI编程接口将DWEN熔丝位设置成允许。如果一切正常，就会跳出下面的窗口。

按照下面的步骤继续用debugWIRE调试：

  • 关掉STK500上的电源，再重新开启。

  • 你最好将在使用SPI编程模式时多连接的那三根线拔掉，调试的时候不需要这三根线。

如果你忘记了对STK500板重启电源，AVR Studio就不能进入debugWIRE模式，并跳出窗口来询问你是否重试。

  • 确保没有连接RESET跳线。

  • 将STK500板的电源关掉再开启。

  • 点击重试（Retry）按钮

注意: 如果AVR Studio不能进入SPI模式，下面的对话框会被显示：

重新检查鱿鱼状连接导线是不是按照通过debugWIRE接口连接到目标板上面所描述的那样正确连接的。 如果都连接正确，最有可能的原因就是禁止SPI编程模式即（SPIEN熔丝位被设置成禁止）。要想允许这个熔丝位就必须用高电压编程的方式。确保移除所有ISP插头和JTAGICE mkII之间的连接。连接上RESET跳线。按照高电压编程那一部分的内容进行高电压编程，将SPIEN熔丝位设置成允许，然后继续上面所说的调试。