归档:使用 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 价格便宜得多。
通过 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)的插件也可替代使用。