手軽に自作できるJTAGインターフェイスといえば、 FT2232を使用したAmontec JTAGkey互換品が有名です。 また、JTAG Keyは多くの方が自作されているので、情報も豊富です。 ということで、 神木さんとか ZUSさん を参考にJTAGkey Cloneを作成しました。パソコン側のソフトウェアはOpenOCD 0.4.0です。
FT2232は2ch USB-シリアル変換ICですので、 PortAをJTAG、PortBをシリアルポートとして使えるようにしました。 ただし、シリアルポートの信号レベルはTTLです。 また、FT2232のVCCIO=5Vにおける入力信号(TDO/NSRST)の閾値は、 MAX1.5Vですので、バッファしないでそのまま引き出すことにしました。 出力信号は、ターゲットの電源電圧にあわせるため、 74VHCでバッファしています。
基板は、無理やりFRISKケースに入るサイズで作成しました。 JTAGピン配置は独自です。回路図と基板パターンのデータを参考までに置いておきます。
OpenOCDのソースコードをここから、 FTDIのライブラリをFTDIからダウンロードしてきます。 あとは、入手したFTDIのライブラリをOpenOCDのディレクトリあたりに解凍して、 OpenOCDをコンパイルします。
$ ./configure --enable-ft2232_ftd2xx --with-ftd2xx-win32-zipdir=./CDM20602 --disable-werror $ make $ make install
神木さん のところを参考に、tcl/interface/jtagkey.cfgを基に下記のように修正して、 myjtagkey.cfgを作成します。今回はAmontec JTAGkeyに化かすわけではないので、 device_descとpidはFT2232オリジナルのものにします。
# # Amontec JTAGkey # http://www.amontec.com/jtagkey.shtml # interface ft2232 ft2232_device_desc "Dual RS232 A" ft2232_layout jtagkey ft2232_vid_pid 0x0403 0x6010
Wikimuraさん のところを参考に、STM32F用の設定ファイルを作成します。 source [find *]で、上で作成したJTAGkeyの設定ファイルを参照しています。
# # STM32-myjtagkey # set CPUTAPID 0x3ba00477 set BSTAPID1 0x16410041 source [find /usr/src/openocd-0.4.0/tcl/interface/myjtagkey.cfg] source [find /usr/src/openocd-0.4.0/tcl/target/stm32.cfg]
作成した設定ファイル(stm32-myjtagkey.cfg)を引数にOpenOCDを起動するとターゲットに接続できます。 操作は、telnet経由で行えます。
$ openocd -f ../stm32-myjtagkey.cfg Open On-Chip Debugger 0.4.0 (2010-08-09-04:08) Licensed under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxygen/bugs.html 1000 kHz jtag_nsrst_delay: 100 jtag_ntrst_delay: 100 Info : device: 4 "2232C" Info : deviceID: 67330064 Info : SerialNumber: A Info : Description: Dual RS232 A Info : clock speed 1000 kHz Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba0 0, ver: 0x3) Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410 , ver: 0x1) Info : stm32.cpu: hardware has 6 breakpoints, 4 watchpoints Info : accepting 'telnet' connection from 0 TapName Enabled IdCode Expected IrLen IrCap IrMask -- ------------------- -------- ---------- ---------- ----- ----- ------ 0 stm32.cpu Y 0x3ba00477 0x3ba00477 4 0x01 0x0f 1 stm32.bs Y 0x16410041 0x06412041 5 0x01 0x03 0x06410041 0x06410041 0x06410041 0x06410041