USB JTAGアダプタ

先日PCの動作が不安定になりMBを換装したのだが、数日後ふと背面を眺めてるとパラレルポートがないことに気づいた。

そこでこれまでつかっていたAVRライタとJTAGアダプタ(digilent製)が使えなくなったのでとりあえずJTAGの方をなんとかすることに。

OpenOCDで使えるAmontec JTAGKeyというのがあったので、資料*1を参考に互換性のあるアダプタを作ってみた。


ハード編

手持ちのTC74VHC244FをふたつとTC7C04Fひとつで適当に作る。
ロジックICにはVrefを入れてFT2232LのVCCIOに3.3Vを入れている。一応2.5-5V対応のはず。運がよければ1.8Vでも使えると思う。

0.5mmピッチのハンダ付けは裏返して瞬間接着剤でとめた後、とにかく頑張る。
逆光にしてマクロ撮影してズームするとブリッジがよくわかって便利。


USBケーブルをつなぐとちゃんと/dev/ttyUSB0,/dev/ttyUSB1というのが作成されるようでひとまず成功。

ソフト編

Fedora12,OpenOCD(v0.3.1)は公式リポジトリからインストールしている前提で。

とりあえず/usr/share/openocd/scripts/interface/jtagkey.cfgをコピペしてみるも、どうも認識していないような感じがする。
dmesgをよくみてみると

usb 1-4.1: New USB device found, idVendor=0403, idProduct=6010

という行を発見。

interface ft2232
ft2232_layout jtagkey
ft2232_vid_pid 0x0403 0x6010

pidを書き換えると先に進むようになったが今度はpermissionが足りないというエラーが。


ここで/dev/ttyUSB0をchmod 666してみるがよく考えるとこのアダプタはFT2232Lのシリアル通信モード(?)を使っているので意味がない。
そこで関係ありそうなudevのルールを書き換えたところ、ちゃんとJTAGチェインがどうこうと言うようになった。

/etc/udev/rules.d/99-libftdi.rules:

SUBSYSTEM=="usb_device", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010",MODE="0664", GROUP="plugdev"

書き換え後(usb_device -> usb, 0664 -> 0666):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010",MODE="0666", GROUP="plugdev"


そこでdigilentのSpartan2評価ボードをつないでみるとご丁寧にも

Warn : There are no enabled taps.  AUTO PROBING MIGHT NOT WORK!!
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -expected-id 0x8061c093 ..."
Warn : AUTO auto0.tap - use "... -irlen 3"

と表示されたので

jtag newtap auto0 tap -expected-id 0x8061c093 -irlen 3

を追加してやるとどうやらうまくいったようだ。

実際に書き込むのは必要になってから考える。