Top > STM32F >JTAGインターフェイス

JTAGインターフェイス

 手軽に自作できる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の準備

OpenOCDのソースコードをここから、 FTDIのライブラリをFTDIからダウンロードしてきます。 あとは、入手したFTDIのライブラリをOpenOCDのディレクトリあたりに解凍して、 OpenOCDをコンパイルします。

$ ./configure --enable-ft2232_ftd2xx --with-ftd2xx-win32-zipdir=./CDM20602 --disable-werror
$ make
$ make install

JTAGkey用の設定

神木さん のところを参考に、tcl/interface/jtagkey.cfgを基に下記のように修正して、 myjtagkey.cfgを作成します。今回はAmontec JTAGkeyに化かすわけではないので、 device_descとpidはFT2232オリジナルのものにします。

myjtagkey.cfg
#
# Amontec JTAGkey
# http://www.amontec.com/jtagkey.shtml
#

interface ft2232
ft2232_device_desc "Dual RS232 A"
ft2232_layout jtagkey
ft2232_vid_pid 0x0403 0x6010

STM32F用の設定

Wikimuraさん のところを参考に、STM32F用の設定ファイルを作成します。 source [find *]で、上で作成したJTAGkeyの設定ファイルを参照しています。

stm32-myjtagkey.cfg
#
# 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]

STM32F用への接続

 作成した設定ファイル(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