跳至内容

Mizar32/JTAG

来自维基教科书,开放的书籍,开放的世界

JTAG 是一种技术,允许您通过在板子上的芯片运行时进入芯片内部来读取和更改其内容,从而调试数字硬件。

您可以使用它擦除和重新编程整个 AVR32UC3A 的闪存,包括位于前 8KB 的 USB DFU 引导加载程序。

当 AVR32 运行时,您可以使用它来停止程序、检查 CPU 寄存器和内存的内容,以及设置程序再次运行,以及设置硬件断点等。

硬件视图

[编辑 | 编辑源代码]
An AVR JTAG ICE MKII programmer and Mizar32 board
一个 AVR JTAG ICE MKII 和 Mizar32

每个 Mizar32 主板都有一个 10 针 JTAG 连接器。要使用它,您需要一个外部 JTAG 模拟器,例如 Atmel 的 AVR32 JTAG ICE MKII

软件视图

[编辑 | 编辑源代码]

要通过 JTAG 转换器与 Mizar32 交谈,您还需要安装一些程序。

Atmel 现在只在您使用其图形开发环境 AVR32 Studio 6 时才支持 JTAG。

命令行工具 avr32program 和/或 avr32gdbproxy 现在很难找到。

安装命令行工具

[编辑 | 编辑源代码]

查找它们

[编辑 | 编辑源代码]

古老的 Atmel AVR32 GNU 工具链版本 2.4.2 包含一些在后续版本中遗漏的额外工具。它们不再公开发布,但您可能仍然可以从以下地址下载:

在 Debian/Ubuntu 上安装 avr32program

[编辑 | 编辑源代码]

要能够使用 JTAG 编程设备,您需要安装 avr32program 命令。它曾经包含在 Atmel GNU 工具链中,直到版本 2.4.2,但出于某种原因,它被从后续版本中省略了。在这里,我们展示如何从 Atmel 的 Ubuntu 9.04 包中在现代 32 位版本的 Debian 或 Ubuntu 上安装它。

mkdir tmp; cd tmp
wget http://www.atmel.com/Images/avr32_gnu_toolchain_2.4.2_ubuntu_904.zip
unzip avr32_gnu_toolchain_2.4.2_ubuntu_904.zip

这会创建 15 个 *.deb 软件包文件,其中大多数不是很有用。安装必要的软件包

sudo dpkg -i avr32program* libavr32ocd* avr32parts* libavrtools*

如果它抱怨

dpkg: dependency problems prevent configuration of libavrtools:
 libavrtools depends on libboost-filesystem1.34.1 (>= 1.34.1-8); however:
  Package libboost-filesystem1.34.1 is not installed.
 libavrtools depends on libboost-thread1.34.1 (>= 1.34.1-8); however:
  Package libboost-thread1.34.1 is not installed.
...
 avr32program depends on libavr32ocd (>= 4.1.0); however:
  Package libavr32ocd is not configured yet.

获取并安装它所需的古代库

wget http://archive.debian.org/debian/pool/main/b/boost/libboost-filesystem1.34.1_1.34.1-14_i386.deb
wget http://archive.debian.org/debian/pool/main/b/boost/libboost-thread1.34.1_1.34.1-14_i386.deb
wget http://archive.debian.org/debian/pool/main/x/xerces-c2/libxerces-c28_2.8.0-3+lenny1_i386.deb
wget http://archive.debian.org/debian/pool/main/i/icu/libicu38_3.8.1-3+lenny3_i386.deb
sudo dpkg -i libboost* libxerxes* libicu*

并完成安装

apt-get -f install

Atmel 的 Ubuntu 9.10 软件包包含与 9.04 相同的软件,但依赖于过时的库版本,这些版本更难找到。

如果您有一个 64 位的 Ubuntu 安装,您的生活会更加困难,因为

  • Atmel 仅为 Ubuntu 9.10 分发了 64 位版本的软件
  • avr32programavr32gdbproxy 需要您安装 libboost-thread1.38
  • Debian 从未发布 libboost-1.38,而 Ubuntu 的 boost1.38 存档 神秘地为空。

这为您留下两个选择:

  • 找到程序所需的 boost-1.38 软件包
  • 安装来自 9.04 的 32 位软件包以及所有所需库的 32 位版本。

祝您好运!请告诉我结果如何……

在 Debian/Ubuntu 上安装 avr32gdbproxy

[编辑 | 编辑源代码]

另一个程序 avr32gdbproxy 可与 AVR32 JTAGICE Mk.II JTAG 编程设备一起使用来调试在板上运行的 C 代码。它需要与 avr32program 相似的魔法

dpkg -k avr32gdbproxy* libavr32sim* libelfdwarfparser*

并且,如果它抱怨 libboost-date-timelibmpfr1ldbl 丢失,请执行

wget http://archive.debian.org/debian/pool/main/b/boost/libboost-date-time1.34.1_1.34.1-14_i386.deb
wget http://archive.debian.org/debian/pool/main/m/mpfr/libmpfr1ldbl_2.3.1.dfsg.1-2_i386.deb
dpkg -i libboost-date-time*.deb libmpfr*.deb 

最后

apt-get -f install

这应该会获取并安装 libgmp3c2(如果它尚未安装)。

使用 JTAG

[编辑 | 编辑源代码]

使用 avr32program 编程固件

[编辑 | 编辑源代码]

如今,我们通常使用 USB DFU 引导加载程序来重新编程 Mizar32。包含 JTAG 编程命令和二进制文件的最后一个 SimpleMachines 固件版本是 Mizar32 固件版本 20110320,适用于 128K 型号,但您可以将该版本的脚本和文件与来自较新版本的 eLua 二进制文件一起重用。

擦除和重新编程整个设备的命令序列相当复杂,因此请下载上述版本并检查 program-mizar32-jtag.sh

您需要将 AVR32 JTAG ICE MKII 编程器通过其 USB 接口连接到您的 PC,并通过 10 针 JTAG 接口连接到 Mizar32。为两者供电。

安装 avr32program 程序(见上文),然后获取并编程固件

wget http://mizar32.googlecode.com/files/mizar32-firmware-20110320.tgz
tar xfz mizar32-firmware-20110320.tgz
cd mizar32-firmware-20110320
sh program-mizar32-jtag.sh

这将重新编程闪存的整个内容:USB DFU 引导加载程序、ISP 配置字、通用保险丝位和 eLua 解释器。然后它将启动板子运行。

使用 avr32gdbproxy 调试 eLua

[编辑 | 编辑源代码]

您将需要

  • avr32-gdb,包含在 Atmel 的 GNU 工具链版本中
  • avr32gdbproxy - 见上文
  • 您 PC 上的 .elf,与您编程到 Mizar32 上的相同
  • 一个 JTAG 编程器设备(USB 到 JTAG 转换器)

并且,在一切连接并打开并运行的情况下,在 PC 上说

 $ avr32gdbproxy &    # Start the proxy daemon, listening on port 4711
 $ avr32-gdb *.elf    # Whichever .elf file you programmed to the Mizar32
 gdb> target extended-remote localhost:4711
 gdb> run

祝您好运!

进一步阅读

[编辑 | 编辑源代码]
华夏公益教科书