ARMコア内蔵マイコンに装備されたJTAG I/Fに接続し、PCからソフトウェアやハードウェアのデバッグを行うためのハードウェアです。制御チップにFTDI社のFT2232を採用し、PCのUSBポートに接続することでJTAG I/FとRS232Cポートが増設されます。
なお、TINY JTAG-ICE2を制御するにはフリーソフトウェアであるOpenOCDが別途必要となります。
特徴 | USB 2.0 (最大12Mbit/sec);&br最大バウンダリスキャンレート 6Mbit/sec 1.5~5V TTLレベル対応(ESD保護 JESD 22レベル(JTAG端子のみ)) モニタLED装備(緑:VREF確定, 黄:SRST発行) RS232C I/F装備(TD,RD,GNDのみ) |
USBチップ | FTDI FT2232D |
適用可能CPU | OpenOCDで対応するターゲット(内蔵フラッシュ書き込み対応) ・Atmel AT91SAM7シリーズ ・NXP LPC1700,LPC2000シリーズ ・STMicroelectronics str71x/73x/75xシリーズ |
コネクタ形状 | USB:mini Bコネクタ JTAG-ICE:2.54mmピッチ2x10ピンヘッダ用コネクタオス(ARM社MultiICE互換) RS232C:2.54mmピッチ3ピンヘッダオス |
環境対応 | Pb Free・RoHS対応 |
TINY JTAG-ICE2に装備されたFT2232の入出力端子がそのままJTAG I/Fとして割り振られていますが、低電圧回路に対応させるためのバッファICが装備されています。またFT2232はデュアルUART/FIFO ICであり、JTAG I/FとしてChannelA、RS232CとしてChannelBを使用しています。
参考までにJTAG I/Fの内部接続図を掲載します。
openocdのGPL準拠の都合から、面倒ではありますが2種類のデバイスドライバのインストールを行う必要があります。勿論自身でビルドされるのであれば、ftdiのドライバベースでも構いません。
2種類という理由は、FT2232は見かけ上2つのデバイスとして認識され、一方をFTDI社のドライバベースのシリアルI/F、もう一方をWinUSBベースのJTAG I/Fとして構成するためです。
こちらにてコンパイル済みバイナリを提供中です。アーカイブファイルをフォルダの階層構造ごと展開の後、パスの通った場所にコピーします。
デバイスのJTAG I/FとTINY JTAG-ICE2を接続し、電源を供給した後にOpenOCDを実行します。デフォルト状態でOpenOCDがサポートする設定ファイルは限られていますので、見つからない場合は自作する以外にありません。ひとまず弊社のAT91SAM7S256マイコンボードを例に起動する方法を紹介します。
openocd.exe -s ./tcl -f daemon.cfg -f interface/tiny_jtagice.cfg -f target/sam7.cfg
最初に -s で設定ファイルの検索対象となるルートフォルダを指定し、以後に指定するオプションで設定ファイルを検索する必要がある場合に備えます。
後は必要なだけ -f で設定ファイルを指定していきます。
daemon.cfg はOpenOCDのデーモン機能に関する設定。
#============================================ # Daemon configuration #============================================ telnet_port 4444 gdb_port 3333 tcl_port 6666
interface/tiny_jtagice.cfg はTINY JTAG-ICE2をPCのJTAG I/Fとして使用する事を宣言。
#============================================ # JTAG interface configuration #============================================ interface ftdi ftdi_layout_init 0x0c08 0x0f1b ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400 ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800 ftdi_device_desc "TINY JTAG-ICE" ftdi_vid_pid 0x0403 0x6010
target/sam7.cfg はAT91SAM7Sを対象とした諸設定。
#============================================ # JTAG interface configuration #============================================ reset_config srst_only srst_pulls_trst if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME sam7 } if { [info exists ENDIAN] } { set _ENDIAN $ENDIAN } else { set _ENDIAN little } if { [info exists CPUTAPID ] } { set _CPUTAPID $CPUTAPID } else { set _CPUTAPID 0x3f0f0f0f } jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID #============================================ # Target configuration #============================================ set _TARGETNAME $_CHIPNAME.cpu target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME $_TARGETNAME configure -event reset-init { soft_reset_halt # RSTC_CR : Reset peripherals mww 0xfffffd00 0xa5000004 # disable watchdog mww 0xfffffd44 0x00008000 # enable user reset mww 0xfffffd08 0xa5000001 # CKGR_MOR : enable the main oscillator mww 0xfffffc20 0x00000601 sleep 10 # CKGR_PLLR: 96.1097 MHz mww 0xfffffc2c 0x00481c0e sleep 10 # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz mww 0xfffffc30 0x00000007 sleep 10 # MC_FMR: flash mode (FWS=1,FMCN=73) mww 0xffffff60 0x00490100 sleep 100 } #============================================ # Flash configuration #============================================ $_TARGETNAME configure -work-area-phys 0x00200000 -work-area-size 0x2000 -work-area-backup 0 set _FLASHNAME $_CHIPNAME.flash flash bank $_FLASHNAME.0 at91sam7 0 0 0 0 $_TARGETNAME 0 0 0 0 0 0 0 18432
いずれも個別のファイルになっている必要は有りませんが、OpenOCDが対応するI/Fやデバイスが多い事から、最近では共有できる内容であれば分割して記述する方向になっているようです。
なお、ファイル名に日本語や全角は使えないのと、フォルダの区切り記号は\(エンもしくはバックスラッシュ)ではなく/(スラッシュ)を使用すると問題が少なくなります。