跳至內容

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

祝您好運!

進一步閱讀

[編輯 | 編輯原始碼]
華夏公益教科書