归档:使用 JTAG 调试

概述

APM 的 JTAG 接口提供了额外的调试功能,在处理某些问题时非常有用。本页介绍如何配置 APM 设置,以便使用 JTAG 进行调试。

请注意,启用 JTAG 会禁用 ADC4、ADC5、ADC6 和 ADC7 引脚。APM 通常不使用这些引脚,但如果您的应用需要的 ADC 输入多于低端的四个引脚,则无法使用 JTAG。

所需硬件

显然,您需要一块 APM 板。油盘上有 JTAG 信号,因此我们假设您使用的也是油盘。其他电路板(如 Arduino Mega)的相关引脚位置请参见电路板文档。

要对 ATMega1280 的 JTAG 和 OCD 触发保护机制进行编程,需要某种 ISP 编程器。本文介绍的是廉价有效的 !BusPirate,但也可以使用其他编程器(如 STK500、GoodFET 等)。

最后但并非最不重要的一点是,您需要一个 AVR JTAG 单元。Atmel JTAGICE mkii 运行良好,但价格昂贵。本文使用的 JTAGICE mkii-CN 价格便宜得多。

http://www.mcuzone.com

通过 eBay 购买,价格约为 Atmel 设备的 1/3。JTAGICE 也可用作编程器。

请注意,mki-CN 设备似乎对 USB 设置非常敏感。如果连接到集线器时出现故障,请尝试将其直接连接到系统上的端口。

所需软件

需要 AVRDUDE 和 AVaRICE 工具以及 avr-gdb。

在 Windows 系统中,WinAVR 应安装所有所需工具。(待定:验证 AVaRICE 是否随 WinAVR 一起安装)

在 Mac OS 上,使用 MacPorts 工具安装工具。获取并安装 MacPorts 软件包,然后使用以下命令:

苏都  自我更新
苏都  安装 avrdude
苏都  安装 贪婪
苏都  安装 avr-gdb

如果已经安装了 AVR CrossPack,则可以省略 avr-gdb。

大多数 Linux 系统都有 avrdude、avarice 和 avr-gdb 软件包。有关安装这些软件包的详细信息,请参阅系统管理文档,或向朋友咨询。

初始设置

调试前,必须对 ATMega1280 的 JTAG 启用和片上调试启用触发保护机制进行编程。默认情况下,这两个触发保护机制都是禁用的,尽管在 boards.txt 文件中提供了一个诱人的选项,但 Arduino 似乎并未提供更改它们的方法。

将 APM 板和油盘板分开,将 ISP 编程器连接到 APM 板上的 AT1280 SPI 接口。图中使用的是 BusPirate 分线电缆。请注意,图中所示的导线颜色是 SparkFun 提供的导线颜色;其他供应商可能使用不同的颜色编码。请参考下表:

!BusPirate Pin

ISP 引脚

导线颜色

1(接地)

6

黑色

3 (+5)

2

7 (CLK)

3

黄的

8(MOSI)

4

橘色

9 (CS)

5

10 (MISO)

1

棕色

程序员类型应为 BusPirate。

如果将 JTAGICE mkII-CN 调试器用作 ISP 编程器,下面是连接表:

JTAGICE 引脚

ISP 引脚

运输署

1

Vref

2

TCK

3

TDI

4

SRST

5

接地

6

程序员类型应为 jtagmkii。注意:此配置尚未验证是否有效。

使用 AVRDUDE 命令可对 ATMega1280 上的触发保护机制进行编程,以启用 OCD 和 JTAG:

avrdude -P

-c

-p m1280 -U hfuse:w:0x1a:m -v

更换

编程器连接的端口,以及

编程器类型。

这只需要几秒钟,最后你会看到下面几行输出:

avrdude: 安全模式: lfuse 读数 作为 FF
avrdude: 安全模式: hfuse 读数 作为 1A
avrdude: 安全模式: efuse 读数 作为 F5
avrdude: 安全模式: 触发保护机制 好的

这些设置是永久性的;除非您重新刷新 APM 的引导加载程序,否则 JTAG 将保持永久启用状态。

要恢复默认触发保护机制设置,请使用

avrdude -P

-c

-p m1280 -U hfuse:w:0xda:m

JTAG 硬件设置

在油盘上,为扩展端口焊盘添加一个 2x3 接头,为模拟焊盘(GND-AN5)添加一个 1x7 接头。

按如下步骤连接 JTAG 调试器。请注意,在本示例中,SparkFun !BusPirate 霹雳线与 JTAGICE mkii-CN 相连。导线颜色可能有所不同,请参考下表:

JTAG 引脚

油盘针

导线颜色

TCK

ADC4

棕色

TMS

ADC5

绿化

运输署

ADC6

橘色

TDI

ADC7

白色

接地

接地

黑、红

Vref

+5

黄的

SRST

重置

软件设置

硬件设置完成后,使用 JTAG 调试的方法有很多种。下面的步骤只涉及基础知识。

AVaRICE 是连接 JTAG 设备和调试器的桥梁。有些设置会在调试器启动时自动启动该工具,有些则需要手动启动。成功调试 APM 的关键是将 -capture 参数传递给 AVaRICE,而不是尝试下载新程序。

假定通过 USB 连接了 JTAGICE mkii(或克隆),要手动启动 AVaRICE,请使用

贪婪 --mkII --捕捉 --jtag USB :4242

你会看到类似的输出:

AVaRICE 版本 2.10, 12 月 22 2010 21:38:18

默认 JTAG 比特率为 250 kHz。

JTAG 配置开始。找到设备:JTAGICEmkII 序列号:00:a0:00:40:26:63 报告的 JTAG 设备 ID:0x9703 已配置设备 ID:0x9703 atmega1280 JTAG 配置完成。等待 4242 端口的连接。

请注意,每次调试器断开连接时 AVaRICE 都会退出,因此如果调试器尚未对其进行管理,请做好定期重启的准备。显示 "等待连接 "信息后,就可以连接调试器了。

调试由 Arduino 生成的代码

Arduino 会尽力向用户隐藏构建过程中的不洁部分。这可能会导致查找调试所需的文件略显困难。在 Arduino IDE 中单击 "验证 "按钮时按住 SHIFT 键,您将看到 Arduino 在构建草图时执行的命令。假设构建成功,最后列出的命令(在 "Binary sketch...(二进制草图)"行之前)将与 Mac OS 系统中的示例相似:

/卷数/数据/应用/Arduino.应用/目录/资源/Java/硬件/工具/avr/箱柜/avr-objcopy -O ihex -R .eeprom
/变异/文件夹/Bu/布尔津-0aFa4N+++0Me1I2U++1dw/-Tmp-/build159308262941509457.文件/GPS_AUTO_test.cpp.小精灵
/变异/文件夹/Bu/布尔津-0aFa4N+++0Me1I2U++1dw/-Tmp-/build159308262941509457.文件/GPS_AUTO_test.cpp.六角

调试器要加载的文件是 .elf 文件,在本例中为

/var/folders/Bu/Burcn-0aFa4N+++0Me1I2U++1dw/-Tmp-/build159308262941509457.tmp/GPS_AUTO_test.cpp.elf

文件的名称取决于草图名称,位置也因系统而异,但在退出并重启 Arduino 之前,特定草图的文件将保持不变。请注意,每次编译草图时,包含该文件的目录都会被删除并重新创建。

要使用 avr-gdb 调试该文件,请使用 Arduino 编译草图并将其上传到 APM。如上所述启动 AVaRICE,然后启动 GDB:

avr-gdb /变异/文件夹/Bu/布尔津-0aFa4N+++0Me1I2U++1dw/-Tmp-/build159308262941509457.文件/GPS_AUTO_test.cpp.小精灵

你会看到 GDB 启动:

GNU gdb 6.8
版权 (C) 2008 免费 软件 基金会, 公司.
许可证 GPLv3+: GNU GPL 版本 3  之后

  免费的 软件:   免费的  改变  再分配 .
那里  没有 保修,   范围 准许  法学.  类型 "显示复制";
 "显示保修"; 对于 详情.
 GDB  配置 作为 "--host=i386-apple-darwin9.8.0 --target=avr"...
(gdb)

在 (gdb) 提示符下,告诉 GDB 连接到 AVaRICE:

(gdb) 目标 远程 本地主机:4242

这将停止 APM 上运行的程序,并告诉您程序停止的位置:

远程 除错 使用 本地主机:4242
0x00002992  AP_GPS_NMEA::阅读 (=0x8007aa)
 /卷数/数据/用户/铁匠/工作/迈克/ArduPilot/素描本/图书馆/AP_GPS/AP_GPS_NMEA.cpp:72
72      数字 = 端口->;
可用();
(gdb)

使用 "continue "命令再次启动程序运行,然后点击 control-C 停止程序运行。

此时,可以正常使用 GDB。其他与 GDB 兼容或基于 GDB 的调试器(如 DDD 或 Insight),以及各种集成开发环境(如 Eclipse)的插件也可替代使用。