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
を追加してやるとどうやらうまくいったようだ。
実際に書き込むのは必要になってから考える。