FreeBSDのurjtagでFTDIモジュールを使う

普段はMacで使っているurjtagですが、今手元にMacがないのでFreeBSDで試してみました。urjtagはpkgにあるので、installしてみます。

```
% jtag

UrJTAG 2021.03 #
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

jtag> cable
Usage: cable DRIVER [DRIVER_OPTS]
Select JTAG cable type.

DRIVER      name of cable
DRIVER_OPTS options for the selected cable

Type "cable DRIVER help" for info about options for cable DRIVER.
You can also use the driver "probe" to attempt autodetection.

List of supported cables:
ARCOM        Arcom JTAG Cable
ByteBlaster  Altera ByteBlaster/ByteBlaster II/ByteBlasterMV Parallel Port Download Cable
DLC5         Xilinx DLC5 JTAG Parallel Cable III
EA253        ETC EA253 JTAG Cable
EI012        ETC EI012 JTAG Cable
gpio         GPIO JTAG Chain
bsdgpio      BSD GPIO JTAG Chain
IGLOO        Excelpoint IGLOO JTAG Cable
KeithKoep    Keith & Koep JTAG cable
Lattice      Lattice Parallel Port JTAG Cable
Minimal      Minimal Parallel Port JTAG Cable
MPCBDM       Mpcbdm JTAG cable
TRITON       Ka-Ro TRITON Starterkit II (PXA255/250) JTAG Cable
WIGGLER      Macraigor Wiggler JTAG Cable
WIGGLER2     Modified (with CPU Reset) WIGGLER JTAG Cable
error: syntax: cable: #parameters should be >= 2, not 1
jtag> 
```

なんとびっくりFTDIのサポートが入っていないバイナリです。あちゃくせ（庄内弁）ごとにlibftdiのpkgは依存で入ります。余談ですが私が入れてもらった[bsdgpio](https://qiita.com/yamori813/items/475fb544036535ac7cfb)は入ってます。bsdgpioはMIPS SOCのGPIOで使えるようにしたものです。

しかたないので自力でビルドしてみます。

```
% setenv CFLAGS "-I/usr/local/include/libftdi1 -I/usr/local/include"
% setenv LDFLAGS "-L/usr/local/lib -lftdi1"
% ./configure --disable-python

...

urjtag is now configured for

  Libraries:
    libusb     : no
    libftdi    : yes (have async mode)
    libftd2xx  : no
    inpout32   : no

  Subsystems:
    SVF        : yes
    BSDL       : yes
    STAPL      : no

  Drivers:
    Bus        : ahbjtag arm9tdmi au1500 avr32 bcm1250 blackfin bscoach ejtag ejtag_dma fjmem ixp425 ixp435 ixp465 jopcyc h7202 lh7a400 mpc5200 mpc824x mpc8313 mpc837x ppc405ep ppc440gx_ebc8 prototype pxa2x0 pxa27x s3c4510 sa1110 sh7727 sh7750r sh7751r sharc_21065L sharc_21369_ezkit slsup3 tx4925 zefant_xs3 
    Cable      : arcom byteblaster dlc5 ea253 ei012 ft2232 gpio bsdgpio igloo keithkoep lattice mpcbdm triton usbblaster wiggler 
    Lowlevel   : ftdi ppi 

  Language bindings:
    python     : no

% make

...

% ./src/apps/jtag/jtag 

UrJTAG 2021.03 #
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

jtag> cable
Usage: cable DRIVER [DRIVER_OPTS]
Select JTAG cable type.

DRIVER      name of cable
DRIVER_OPTS options for the selected cable

Type "cable DRIVER help" for info about options for cable DRIVER.
You can also use the driver "probe" to attempt autodetection.

List of supported cables:
ARCOM           Arcom JTAG Cable
ByteBlaster     Altera ByteBlaster/ByteBlaster II/ByteBlasterMV Parallel Port Download Cable
DLC5            Xilinx DLC5 JTAG Parallel Cable III
EA253           ETC EA253 JTAG Cable
EI012           ETC EI012 JTAG Cable
FT2232          Generic FTDI FT2232 Cable
ARM-USB-OCD     Olimex ARM-USB-OCD[-TINY] (FT2232) Cable
ARM-USB-OCD-H   Olimex ARM-USB-TINY-H (FT2232H) Cable
Flyswatter      TinCanTools Flyswatter (FT2232) Cable
gnICE           Analog Devices Blackfin gnICE (FT2232) Cable (EXPERIMENTAL)
gnICE+          Analog Devices Blackfin gnICE+ (FT2232H) Cable (EXPERIMENTAL)
JTAGkey         Amontec JTAGkey (FT2232) Cable
JTAGv3          XDS100 compatible JTAG/serial (FT2232) Cable
JTAGv5          XDS100v2 compatible JTAG/serial (FT2232H) Cable
KT-LINK         KrisTech KT-LINK (FT2232H based) Cable
milkymist       Milkymist JTAG/serial (FT2232) Cable
OOCDLink-s      OOCDLink-s (FT2232) Cable (EXPERIMENTAL)
Signalyzer      Xverve DT-USB-ST Signalyzer Tool (FT2232) Cable (EXPERIMENTAL)
Turtelizer2     Turtelizer 2 Rev. B (FT2232) Cable (EXPERIMENTAL)
USB-JTAG-RS232  USB<=>JTAG&RS232 (FT2232) Cable (EXPERIMENTAL)
usbScarab2      KrisTech usbScarabeus2 (FT2232) Cable
USB-to-JTAG-IF  USB to JTAG Interface (FT2232) Cable (EXPERIMENTAL)
DigilentHS1     Digilent HS1 Adapter
FT4232          Generic FTDI FT4232 Cable
gpio            GPIO JTAG Chain
bsdgpio         BSD GPIO JTAG Chain
IGLOO           Excelpoint IGLOO JTAG Cable
KeithKoep       Keith & Koep JTAG cable
Lattice         Lattice Parallel Port JTAG Cable
Minimal         Minimal Parallel Port JTAG Cable
MPCBDM          Mpcbdm JTAG cable
TRITON          Ka-Ro TRITON Starterkit II (PXA255/250) JTAG Cable
UsbBlaster      Altera USB-Blaster Cable
WIGGLER         Macraigor Wiggler JTAG Cable
WIGGLER2        Modified (with CPU Reset) WIGGLER JTAG Cable
error: syntax: cable: #parameters should be >= 2, not 1
```

FTDIなしのurjtagはクリープをいれないコーヒーなので、だれかportsにフィードバックしてください。

使うときはsudoでコマンドを上げてvidとpidを指定しないとダメみたいです。

```
jtag> cable ft2232 vid=0x0403 pid=0x6010
Connected to libftdi driver.
```

ちなみに実際に使うときは、uftdi.koがロードされると使えなくなるので、devdをkillしてからUSBを接続します。なんかもっとスマートな方法ないのかしら。

デバイスHACKでurjtagと同じくらい重宝しているflashromもpkgがありますが、こちらはFTDIがデフォルトOFFです。flashromでFTDIモジュールを使いたい場合はportsでオプションONでビルドしてインストールしてください。

urjtagはFT2232DなどのMPSSEが使えるすべてのモジュールで使えますが、flashromは232HなどのHi SpeedなMPSSEモジュールでしか使えません。

# MAX IIを焼いてみた

BSDLファイルから設定ファイルを作りQuartusで作ったsvfファイルをUsbBlasterで焼いてみました。

```
% sudo ./src/apps/jtag/jtag

UrJTAG 2021.03 #
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008, 2009 Kolja Waschk and the respective authors

UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.

warning: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.

jtag> cable UsbBlaster
Connected to libftdi driver.
jtag> detect
IR length: 10
Chain length: 1
Device Id: 00000010000010100001000011011101 (0x020A10DD)
  Manufacturer: Altera (0x0DD)
  Part(0):      EPM240 (0x20A1)
  Stepping:     0
  Filename:     /usr/local/share/urjtag/altera/epm240/epm240
jtag> svf test2.svf stop progress
warning: USB-Blaster frequency is fixed to 12000000 Hz
warning: unimplemented mode 'ABSENT' for TRST
detail: Parsing  11640/11645 ( 99%)detail: 
detail: Scanned device output matched expected TDO values.
jtag> quit
```