installer (0904_1.1.2) | 2010-09-19 12:40 |
toppersjsp4lpc (Release 1.0.4) | 2010-03-27 17:10 |
OpenOCDの設定には二つのポイントがあります。
このページでは、この二つについてそれぞれ説明します。なお、JTAGインターフェースはBesttechnology社のTINY JTAG-ICEを使っています。
TINY JTAG-ICEはAmontec社のJTAGkey互換ICEです。現在TINY JTAG-ICEは生産中止となっており、代わりにTINY JTAG-ICE2が販売されています。両者の設定は同じはずです。
OpenOCDにはJTAGkey用のコンフィグレーションファイルが用意されていますので、それを流用します。ファイルは trunk/tcl/interface/jtagkey.cfgです。適当なディレクトリにコピーし、tinyjtag.cfgと改名してください。内容を以下のように書き換えます。
# # Besttechnology TINY JTAG-ICE BTE067 # # http://www.besttechnology.co.jp/modules/knowledge/?BTE067B%20TINY%20JTAG-ICE2 # interface ft2232 ft2232_device_desc "TINY JTAG-ICE A" ft2232_layout jtagkey ft2232_vid_pid 0x0403 0x6010
このままコピーした方が早いかもしれません。
ターゲットCPUの設定をするために trunk/tcl/target/lpc2378.cfgを適当なディレクトリにコピーし、lpc2388.cfgに改名します。
設定ファイルの立場から見ると、LPC2378とLPC2388はメモリサイズが異なるだけです。そこで、設定ファイルのSRAMファイルに関する記述を32kBから64kBに変更します。また、コメントも書き換えます。具体的には
です。変更後のファイルを以下に示します。
# NXP LPC2388 ARM7TDMI-S with 512kB Flash and 64kB Local On-Chip SRAM (98kB total), clocked with 4MHz internal RC oscillator if { [info exists CHIPNAME] } { set _CHIPNAME $CHIPNAME } else { set _CHIPNAME lpc2388 } if { [info exists ENDIAN] } { set _ENDIAN $ENDIAN } else { set _ENDIAN little } if { [info exists CPUTAPID ] } { set _CPUTAPID $CPUTAPID } else { set _CPUTAPID 0x4f1f0f0f } #delays on reset lines jtag_nsrst_delay 200 jtag_ntrst_delay 200 # LPC2000 -> SRST causes TRST reset_config trst_and_srst srst_pulls_trst jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID set _TARGETNAME [format "%s.cpu" $_CHIPNAME] target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi-s_r4 # LPC2388 has 64kB of SRAM on its main system bus (so-called Local On-Chip SRAM) $_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x40000000 -work-area-size 0x10000 -work-area-backup 0 $_TARGETNAME configure -event reset-init { # Force target into ARM state soft_reset_halt #do not remap 0x0000-0x0020 to anything but the flash mwb 0xE01FC040 0x01 } # LPC2388 has 512kB of FLASH, but upper 8kB are occupied by bootloader. # After reset the chip uses its internal 4MHz RC oscillator #flash bank lpc2000 <base> <size> 0 0 <target#> <variant> flash bank lpc2000 0x0 0x0007D000 0 0 0 lpc2000_v2 4000 calc_checksum # 4MHz / 6 = 666kHz, so use 500 jtag_khz 500
JTAGインターフェースとターゲットの設定が完了したら、ターゲットと接続して試験を行います。OpenOCDはコマンドラインから起動します。
suikan:~$ sudo /opt/openocd/bin/openocd -f tinyjtag.cfg -f lpc2388.cfg [sudo] password for suikan: Open On-Chip Debugger 0.3.0-in-development (2009-08-24-21:11) svn:2604 $URL: svn://svn.berlios.de/openocd/trunk/src/openocd.c $ For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS jtag_nsrst_delay: 200 jtag_ntrst_delay: 200 500 kHz Info : clock speed 500 kHz Info : JTAG tap: lpc2388.cpu tap/device found: 0x4f1f0f0f (mfg: 0x787, part: 0xf1f0, ver: 0x4) Info : JTAG Tap/device matched Error: EmbeddedICE v7 handling might be broken target state: halted target halted in ARM state due to breakpoint, current mode: Supervisor cpsr: 0xa00000d3 pc: 0x000000fc
"Embedded ICE v7 ..."というエラーメッセージが出ていますが、詳細は不明です。多くの場所で報告されていますが、実害なく使っている人も多いようです。taget stateはその時のターゲットの状態によって表示されないこともあるようです。
もう少し詳しく状態を見てみたい方は、telnet経由でOpenOCDに接続することも出来ます。上記の状態のまま
を実行すると、OpenOCDのコマンドライン・インターフェースに接続できます。helpでコマンド一覧を見ることが出来ます。
halt armv4_5 reg
でレジスタを表示出来るなら、接続出来ていると考えて良いでしょう。