updated docs a bit.
[openocd.git] / doc / openocd.texi
1 \input texinfo @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename openocd.info
4 @settitle Open On-Chip Debugger (OpenOCD)
5 @dircategory Development
6 @direntry
7 * OpenOCD: (openocd). Open On-Chip Debugger.
8 @end direntry
9 @c %**end of header
10
11 @include version.texi
12
13 @copying
14 Copyright @copyright{} 2007-2008 Spen @email{spen@@spen-soft.co.uk}@*
15 Copyright @copyright{} 2008 Oyvind Harboe @email{oyvind.harboe@@zylin.com}
16 @quotation
17 Permission is granted to copy, distribute and/or modify this document
18 under the terms of the GNU Free Documentation License, Version 1.2 or
19 any later version published by the Free Software Foundation; with no
20 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
21 Texts. A copy of the license is included in the section entitled ``GNU
22 Free Documentation License''.
23 @end quotation
24 @end copying
25
26 @titlepage
27 @title Open On-Chip Debugger (OpenOCD)
28 @subtitle Edition @value{EDITION} for OpenOCD version @value{VERSION}
29 @subtitle @value{UPDATED}
30 @page
31 @vskip 0pt plus 1filll
32 @insertcopying
33 @end titlepage
34
35 @contents
36
37 @node Top, About, , (dir)
38 @top OpenOCD
39
40 This manual documents edition @value{EDITION} of the Open On-Chip Debugger
41 (OpenOCD) version @value{VERSION}, @value{UPDATED}.
42
43 @insertcopying
44
45 @menu
46 * About:: About OpenOCD.
47 * Developers:: OpenOCD developers
48 * Building:: Building OpenOCD
49 * Running:: Running OpenOCD
50 * Configuration:: OpenOCD Configuration.
51 * Target library:: Target library
52 * Commands:: OpenOCD Commands
53 * Sample Scripts:: Sample Target Scripts
54 * TFTP:: TFTP
55 * GDB and OpenOCD:: Using GDB and OpenOCD
56 * TCL and OpenOCD:: Using TCL and OpenOCD
57 * TCL scripting API:: Tcl scripting API
58 * Upgrading:: Deprecated/Removed Commands
59 * FAQ:: Frequently Asked Questions
60 * License:: GNU Free Documentation License
61 * Index:: Main index.
62 @end menu
63
64 @node About
65 @unnumbered About
66 @cindex about
67
68 The Open On-Chip Debugger (OpenOCD) aims to provide debugging, in-system programming
69 and boundary-scan testing for embedded target devices. The targets are interfaced
70 using JTAG (IEEE 1149.1) compliant hardware, but this may be extended to other
71 connection types in the future.
72
73 OpenOCD currently supports Wiggler (clones), FTDI FT2232 based JTAG interfaces, the
74 Amontec JTAG Accelerator, and the Gateworks GW1602. It allows ARM7 (ARM7TDMI and ARM720t),
75 ARM9 (ARM920t, ARM922t, ARM926ej--s, ARM966e--s), XScale (PXA25x, IXP42x) and
76 Cortex-M3 (Luminary Stellaris LM3 and ST STM32) based cores to be debugged.
77
78 Flash writing is supported for external CFI compatible flashes (Intel and AMD/Spansion
79 command set) and several internal flashes (LPC2000, AT91SAM7, STR7x, STR9x, LM3
80 and STM32x). Preliminary support for using the LPC3180's NAND flash controller is included.
81
82 @node Developers
83 @chapter Developers
84 @cindex developers
85
86 OpenOCD was created by Dominic Rath as part of a diploma thesis written at the
87 University of Applied Sciences Augsburg (@uref{http://www.fh-augsburg.de}).
88 Others interested in improving the state of free and open debug and testing technology
89 are welcome to participate.
90
91 Other developers have contributed support for additional targets and flashes as well
92 as numerous bugfixes and enhancements. See the AUTHORS file for regular contributors.
93
94 The main OpenOCD web site is available at @uref{http://openocd.berlios.de/web/}
95
96 @node Building
97 @chapter Building
98 @cindex building OpenOCD
99
100 If you are interested in getting actual work done rather than building
101 OpenOCD, then check if your interface supplier provides binaries for
102 you. Chances are that that binary is from some SVN version that is more
103 stable than SVN trunk where bleeding edge development takes place.
104
105
106 You can download the current SVN version with SVN client of your choice from the
107 following repositories:
108
109 (@uref{svn://svn.berlios.de/openocd/trunk})
110
111 or
112
113 (@uref{http://svn.berlios.de/svnroot/repos/openocd/trunk})
114
115 Using the SVN command line client, you can use the following command to fetch the
116 latest version (make sure there is no (non-svn) directory called "openocd" in the
117 current directory):
118
119 @smallexample
120 svn checkout svn://svn.berlios.de/openocd/trunk openocd
121 @end smallexample
122
123 Building OpenOCD requires a recent version of the GNU autotools.
124 On my build system, I'm using autoconf 2.13 and automake 1.9. For building on Windows,
125 you have to use Cygwin. Make sure that your @env{PATH} environment variable contains no
126 other locations with Unix utils (like UnxUtils) - these can't handle the Cygwin
127 paths, resulting in obscure dependency errors (This is an observation I've gathered
128 from the logs of one user - correct me if I'm wrong).
129
130 You further need the appropriate driver files, if you want to build support for
131 a FTDI FT2232 based interface:
132 @itemize @bullet
133 @item @b{ftdi2232} libftdi (@uref{http://www.intra2net.com/opensource/ftdi/})
134 @item @b{ftd2xx} libftd2xx (@uref{http://www.ftdichip.com/Drivers/D2XX.htm})
135 @item When using the Amontec JTAGkey, you have to get the drivers from the Amontec
136 homepage (@uref{www.amontec.com}), as the JTAGkey uses a non-standard VID/PID.
137 @end itemize
138
139 libftdi is supported under windows. Versions earlier than 0.13 will require patching.
140 see contrib/libftdi for more details.
141
142 In general, the D2XX driver provides superior performance (several times as fast),
143 but has the draw-back of being binary-only - though that isn't that bad, as it isn't
144 a kernel module, only a user space library.
145
146 To build OpenOCD (on both Linux and Cygwin), use the following commands:
147 @smallexample
148 ./bootstrap
149 @end smallexample
150 Bootstrap generates the configure script, and prepares building on your system.
151 @smallexample
152 ./configure
153 @end smallexample
154 Configure generates the Makefiles used to build OpenOCD.
155 @smallexample
156 make
157 @end smallexample
158 Make builds OpenOCD, and places the final executable in ./src/.
159
160 The configure script takes several options, specifying which JTAG interfaces
161 should be included:
162
163 @itemize @bullet
164 @item
165 @option{--enable-parport}
166 @item
167 @option{--enable-parport_ppdev}
168 @item
169 @option{--enable-parport_giveio}
170 @item
171 @option{--enable-amtjtagaccel}
172 @item
173 @option{--enable-ft2232_ftd2xx}
174 @footnote{Using the latest D2XX drivers from FTDI and following their installation
175 instructions, I had to use @option{--enable-ft2232_libftd2xx} for OpenOCD to
176 build properly.}
177 @item
178 @option{--enable-ft2232_libftdi}
179 @item
180 @option{--with-ftd2xx=/path/to/d2xx/}
181 @item
182 @option{--enable-gw16012}
183 @item
184 @option{--enable-usbprog}
185 @item
186 @option{--enable-presto_libftdi}
187 @item
188 @option{--enable-presto_ftd2xx}
189 @item
190 @option{--enable-jlink}
191 @end itemize
192
193 If you want to access the parallel port using the PPDEV interface you have to specify
194 both the @option{--enable-parport} AND the @option{--enable-parport_ppdev} option since
195 the @option{--enable-parport_ppdev} option actually is an option to the parport driver
196 (see @uref{http://forum.sparkfun.com/viewtopic.php?t=3795} for more info).
197
198 Cygwin users have to specify the location of the FTDI D2XX package. This should be an
199 absolute path containing no spaces.
200
201 Linux users should copy the various parts of the D2XX package to the appropriate
202 locations, i.e. /usr/include, /usr/lib.
203
204 Miscellaneous configure options
205
206 @itemize @bullet
207 @item
208 @option{--enable-gccwarnings} - enable extra gcc warnings during build
209 @end itemize
210
211 @node Running
212 @chapter Running
213 @cindex running OpenOCD
214 @cindex --configfile
215 @cindex --debug_level
216 @cindex --logfile
217 @cindex --search
218 OpenOCD runs as a daemon, waiting for connections from clients (Telnet, GDB, Other).
219 Run with @option{--help} or @option{-h} to view the available command line switches.
220
221 It reads its configuration by default from the file openocd.cfg located in the current
222 working directory. This may be overwritten with the @option{-f <configfile>} command line
223 switch. The @option{-f} command line switch can be specified multiple times, in which case the config files
224 are executed in order.
225
226 Also it is possible to interleave commands w/config scripts using the @option{-c} command line switch.
227
228 To enable debug output (when reporting problems or working on OpenOCD itself), use
229 the @option{-d} command line switch. This sets the @option{debug_level} to "3", outputting
230 the most information, including debug messages. The default setting is "2", outputting
231 only informational messages, warnings and errors. You can also change this setting
232 from within a telnet or gdb session using @option{debug_level <n>} @xref{debug_level}.
233
234 You can redirect all output from the daemon to a file using the @option{-l <logfile>} switch.
235
236 Search paths for config/script files can be added to OpenOCD by using
237 the @option{-s <search>} switch. The current directory and the OpenOCD target library
238 is in the search path by default.
239
240 Note! OpenOCD will launch the GDB & telnet server even if it can not establish a connection
241 with the target. In general, it is possible for the JTAG controller to be unresponsive until
242 the target is set up correctly via e.g. GDB monitor commands in a GDB init script.
243
244 @node Configuration
245 @chapter Configuration
246 @cindex configuration
247 OpenOCD runs as a daemon, and reads it current configuration
248 by default from the file openocd.cfg in the current directory. A different configuration
249 file can be specified with the @option{-f <conf.file>} command line switch specified when starting OpenOCD.
250
251 The configuration file is used to specify on which ports the daemon listens for new
252 connections, the JTAG interface used to connect to the target, the layout of the JTAG
253 chain, the targets that should be debugged, and connected flashes.
254
255 @section Daemon configuration
256
257 @itemize @bullet
258 @item @b{init}
259 @*This command terminates the configuration stage and enters the normal
260 command mode. This can be useful to add commands to the startup scripts and commands
261 such as resetting the target, programming flash, etc. To reset the CPU upon startup,
262 add "init" and "reset" at the end of the config script or at the end of the
263 OpenOCD command line using the @option{-c} command line switch.
264 @cindex init
265 @item @b{telnet_port} <@var{number}>
266 @cindex telnet_port
267 @*Port on which to listen for incoming telnet connections
268 @item @b{tcl_port} <@var{number}>
269 @cindex tcl_port
270 @*Port on which to listen for incoming TCL syntax. This port is intended as
271 a simplified RPC connection that can be used by clients to issue commands
272 and get the output from the TCL engine.
273 @item @b{gdb_port} <@var{number}>
274 @cindex gdb_port
275 @*First port on which to listen for incoming GDB connections. The GDB port for the
276 first target will be gdb_port, the second target will listen on gdb_port + 1, and so on.
277 @item @b{gdb_breakpoint_override} <@var{hard|soft|disabled}>
278 @cindex gdb_breakpoint_override
279 @anchor{gdb_breakpoint_override}
280 @*Force breakpoint type for gdb 'break' commands.
281 The raison d'etre for this option is to support GDB GUI's without
282 a hard/soft breakpoint concept where the default OpenOCD and
283 GDB behaviour is not sufficient. Note that GDB will use hardware
284 breakpoints if the memory map has been set up for flash regions.
285
286 This option replaces older arm7_9 target commands that addressed
287 the same issue.
288 @item @b{gdb_detach} <@var{resume|reset|halt|nothing}>
289 @cindex gdb_detach
290 @*Configures what OpenOCD will do when gdb detaches from the daeman.
291 Default behaviour is <@var{resume}>
292 @item @b{gdb_memory_map} <@var{enable|disable}>
293 @cindex gdb_memory_map
294 @*Set to <@var{enable}> to cause OpenOCD to send the memory configuration to gdb when
295 requested. gdb will then know when to set hardware breakpoints, and program flash
296 using the gdb load command. @option{gdb_flash_program enable} will also need enabling
297 for flash programming to work.
298 Default behaviour is <@var{enable}>
299 @xref{gdb_flash_program}.
300 @item @b{gdb_flash_program} <@var{enable|disable}>
301 @cindex gdb_flash_program
302 @anchor{gdb_flash_program}
303 @*Set to <@var{enable}> to cause OpenOCD to program the flash memory when a
304 vFlash packet is received.
305 Default behaviour is <@var{enable}>
306 @end itemize
307
308 @section JTAG interface configuration
309
310 @itemize @bullet
311 @item @b{interface} <@var{name}>
312 @cindex interface
313 @*Use the interface driver <@var{name}> to connect to the target. Currently supported
314 interfaces are
315 @itemize @minus
316 @item @b{parport}
317 PC parallel port bit-banging (Wigglers, PLD download cable, ...)
318 @end itemize
319 @itemize @minus
320 @item @b{amt_jtagaccel}
321 Amontec Chameleon in its JTAG Accelerator configuration connected to a PC's EPP
322 mode parallel port
323 @end itemize
324 @itemize @minus
325 @item @b{ft2232}
326 FTDI FT2232 based devices using either the open-source libftdi or the binary only
327 FTD2XX driver. The FTD2XX is superior in performance, but not available on every
328 platform. The libftdi uses libusb, and should be portable to all systems that provide
329 libusb.
330 @end itemize
331 @itemize @minus
332 @item @b{ep93xx}
333 Cirrus Logic EP93xx based single-board computer bit-banging (in development)
334 @end itemize
335 @itemize @minus
336 @item @b{presto}
337 ASIX PRESTO USB JTAG programmer.
338 @end itemize
339 @itemize @minus
340 @item @b{usbprog}
341 usbprog is a freely programmable USB adapter.
342 @end itemize
343 @itemize @minus
344 @item @b{gw16012}
345 Gateworks GW16012 JTAG programmer.
346 @end itemize
347 @itemize @minus
348 @item @b{jlink}
349 Segger jlink usb adapter
350 @end itemize
351 @end itemize
352
353 @itemize @bullet
354 @item @b{jtag_speed} <@var{reset speed}>
355 @cindex jtag_speed
356 @*Limit the maximum speed of the JTAG interface. Usually, a value of zero means maximum
357 speed. The actual effect of this option depends on the JTAG interface used.
358
359 The speed used during reset can be adjusted using setting jtag_speed during
360 pre_reset and post_reset events.
361 @itemize @minus
362
363 @item wiggler: maximum speed / @var{number}
364 @item ft2232: 6MHz / (@var{number}+1)
365 @item amt jtagaccel: 8 / 2**@var{number}
366 @item jlink: maximum speed in kHz (0-12000), 0 will use RTCK
367 @end itemize
368
369 Note: Make sure the jtag clock is no more than @math{1/6th × CPU-Clock}. This is
370 especially true for synthesized cores (-S).
371
372 @item @b{jtag_khz} <@var{reset speed kHz}>
373 @cindex jtag_khz
374 @*Same as jtag_speed, except that the speed is specified in maximum kHz. If
375 the device can not support the rate asked for, or can not translate from
376 kHz to jtag_speed, then an error is returned. 0 means RTCK. If RTCK
377 is not supported, then an error is reported.
378
379 @item @b{reset_config} <@var{signals}> [@var{combination}] [@var{trst_type}] [@var{srst_type}]
380 @cindex reset_config
381 @*The configuration of the reset signals available on the JTAG interface AND the target.
382 If the JTAG interface provides SRST, but the target doesn't connect that signal properly,
383 then OpenOCD can't use it. <@var{signals}> can be @option{none}, @option{trst_only},
384 @option{srst_only} or @option{trst_and_srst}.
385
386 [@var{combination}] is an optional value specifying broken reset signal implementations.
387 @option{srst_pulls_trst} states that the testlogic is reset together with the reset of
388 the system (e.g. Philips LPC2000, "broken" board layout), @option{trst_pulls_srst} says
389 that the system is reset together with the test logic (only hypothetical, I haven't
390 seen hardware with such a bug, and can be worked around).
391 @option{combined} imples both @option{srst_pulls_trst} and @option{trst_pulls_srst}.
392 The default behaviour if no option given is @option{separate}.
393
394 The [@var{trst_type}] and [@var{srst_type}] parameters allow the driver type of the
395 reset lines to be specified. Possible values are @option{trst_push_pull} (default)
396 and @option{trst_open_drain} for the test reset signal, and @option{srst_open_drain}
397 (default) and @option{srst_push_pull} for the system reset. These values only affect
398 JTAG interfaces with support for different drivers, like the Amontec JTAGkey and JTAGAccelerator.
399
400 @item @b{jtag_device} <@var{IR length}> <@var{IR capture}> <@var{IR mask}> <@var{IDCODE instruction}>
401 @cindex jtag_device
402 @*Describes the devices that form the JTAG daisy chain, with the first device being
403 the one closest to TDO. The parameters are the length of the instruction register
404 (4 for all ARM7/9s), the value captured during Capture-IR (0x1 for ARM7/9), and a mask
405 of bits that should be validated when doing IR scans (all four bits (0xf) for ARM7/9).
406 The IDCODE instruction will in future be used to query devices for their JTAG
407 identification code. This line is the same for all ARM7 and ARM9 devices.
408 Other devices, like CPLDs, require different parameters. An example configuration
409 line for a Xilinx XC9500 CPLD would look like this:
410 @smallexample
411 jtag_device 8 0x01 0x0e3 0xfe
412 @end smallexample
413 The instruction register (IR) is 8 bits long, during Capture-IR 0x01 is loaded into
414 the IR, but only bits 0-1 and 5-7 should be checked, the others (2-4) might vary.
415 The IDCODE instruction is 0xfe.
416
417 @item @b{jtag_nsrst_delay} <@var{ms}>
418 @cindex jtag_nsrst_delay
419 @*How long (in milliseconds) OpenOCD should wait after deasserting nSRST before
420 starting new JTAG operations.
421 @item @b{jtag_ntrst_delay} <@var{ms}>
422 @cindex jtag_ntrst_delay
423 @*Same @b{jtag_nsrst_delay}, but for nTRST
424
425 The jtag_n[st]rst_delay options are useful if reset circuitry (like a reset supervisor,
426 or on-chip features) keep a reset line asserted for some time after the external reset
427 got deasserted.
428 @end itemize
429
430 @section parport options
431
432 @itemize @bullet
433 @item @b{parport_port} <@var{number}>
434 @cindex parport_port
435 @*Either the address of the I/O port (default: 0x378 for LPT1) or the number of
436 the @file{/dev/parport} device
437
438 When using PPDEV to access the parallel port, use the number of the parallel port:
439 @option{parport_port 0} (the default). If @option{parport_port 0x378} is specified
440 you may encounter a problem.
441 @item @b{parport_cable} <@var{name}>
442 @cindex parport_cable
443 @*The layout of the parallel port cable used to connect to the target.
444 Currently supported cables are
445 @itemize @minus
446 @item @b{wiggler}
447 @cindex wiggler
448 The original Wiggler layout, also supported by several clones, such
449 as the Olimex ARM-JTAG
450 @item @b{wiggler2}
451 @cindex wiggler2
452 Same as original wiggler except an led is fitted on D5.
453 @item @b{wiggler_ntrst_inverted}
454 @cindex wiggler_ntrst_inverted
455 Same as original wiggler except TRST is inverted.
456 @item @b{old_amt_wiggler}
457 @cindex old_amt_wiggler
458 The Wiggler configuration that comes with Amontec's Chameleon Programmer. The new
459 version available from the website uses the original Wiggler layout ('@var{wiggler}')
460 @item @b{chameleon}
461 @cindex chameleon
462 The Amontec Chameleon's CPLD when operated in configuration mode. This is only used to
463 program the Chameleon itself, not a connected target.
464 @item @b{dlc5}
465 @cindex dlc5
466 The Xilinx Parallel cable III.
467 @item @b{triton}
468 @cindex triton
469 The parallel port adapter found on the 'Karo Triton 1 Development Board'.
470 This is also the layout used by the HollyGates design
471 (see @uref{http://www.lartmaker.nl/projects/jtag/}).
472 @item @b{flashlink}
473 @cindex flashlink
474 The ST Parallel cable.
475 @item @b{arm-jtag}
476 @cindex arm-jtag
477 Same as original wiggler except SRST and TRST connections reversed and
478 TRST is also inverted.
479 @item @b{altium}
480 @cindex altium
481 Altium Universal JTAG cable.
482 @end itemize
483 @item @b{parport_write_on_exit} <@var{on}|@var{off}>
484 @cindex parport_write_on_exit
485 @*This will configure the parallel driver to write a known value to the parallel
486 interface on exiting OpenOCD
487 @end itemize
488
489 @section amt_jtagaccel options
490 @itemize @bullet
491 @item @b{parport_port} <@var{number}>
492 @cindex parport_port
493 @*Either the address of the I/O port (default: 0x378 for LPT1) or the number of the
494 @file{/dev/parport} device
495 @end itemize
496 @section ft2232 options
497
498 @itemize @bullet
499 @item @b{ft2232_device_desc} <@var{description}>
500 @cindex ft2232_device_desc
501 @*The USB device description of the FTDI FT2232 device. If not specified, the FTDI
502 default value is used. This setting is only valid if compiled with FTD2XX support.
503 @item @b{ft2232_serial} <@var{serial-number}>
504 @cindex ft2232_serial
505 @*The serial number of the FTDI FT2232 device. If not specified, the FTDI default
506 values are used.
507 @item @b{ft2232_layout} <@var{name}>
508 @cindex ft2232_layout
509 @*The layout of the FT2232 GPIO signals used to control output-enables and reset
510 signals. Valid layouts are
511 @itemize @minus
512 @item @b{usbjtag}
513 "USBJTAG-1" layout described in the original OpenOCD diploma thesis
514 @item @b{jtagkey}
515 Amontec JTAGkey and JTAGkey-tiny
516 @item @b{signalyzer}
517 Signalyzer
518 @item @b{olimex-jtag}
519 Olimex ARM-USB-OCD
520 @item @b{m5960}
521 American Microsystems M5960
522 @item @b{evb_lm3s811}
523 Luminary Micro EVB_LM3S811 as a JTAG interface (not onboard processor), no TRST or
524 SRST signals on external connector
525 @item @b{comstick}
526 Hitex STR9 comstick
527 @item @b{stm32stick}
528 Hitex STM32 Performance Stick
529 @item @b{flyswatter}
530 Tin Can Tools Flyswatter
531 @item @b{turtelizer2}
532 egnite Software turtelizer2
533 @item @b{oocdlink}
534 OOCDLink
535 @end itemize
536
537 @item @b{ft2232_vid_pid} <@var{vid}> <@var{pid}>
538 @*The vendor ID and product ID of the FTDI FT2232 device. If not specified, the FTDI
539 default values are used. Multiple <@var{vid}>, <@var{pid}> pairs may be given, eg.
540 @smallexample
541 ft2232_vid_pid 0x0403 0xcff8 0x15ba 0x0003
542 @end smallexample
543 @item @b{ft2232_latency} <@var{ms}>
544 @*On some systems using ft2232 based JTAG interfaces the FT_Read function call in
545 ft2232_read() fails to return the expected number of bytes. This can be caused by
546 USB communication delays and has proved hard to reproduce and debug. Setting the
547 FT2232 latency timer to a larger value increases delays for short USB packages but it
548 also reduces the risk of timeouts before receiving the expected number of bytes.
549 The OpenOCD default value is 2 and for some systems a value of 10 has proved useful.
550 @end itemize
551
552 @section ep93xx options
553 @cindex ep93xx options
554 Currently, there are no options available for the ep93xx interface.
555
556 @page
557 @section Target configuration
558
559 @itemize @bullet
560 @item @b{target} <@var{type}> <@var{endianess}> <@var{JTAG pos}>
561 <@var{variant}>
562 @cindex target
563 @*Defines a target that should be debugged. Currently supported types are:
564 @itemize @minus
565 @item @b{arm7tdmi}
566 @item @b{arm720t}
567 @item @b{arm9tdmi}
568 @item @b{arm920t}
569 @item @b{arm922t}
570 @item @b{arm926ejs}
571 @item @b{arm966e}
572 @item @b{cortex_m3}
573 @item @b{feroceon}
574 @item @b{xscale}
575 @item @b{mips_m4k}
576 @end itemize
577
578 If you want to use a target board that is not on this list, see Adding a new
579 target board
580
581 Endianess may be @option{little} or @option{big}.
582
583 @item @b{target_script} <@var{target#}> <@var{event}> <@var{script_file}>
584 @cindex target_script
585 @*Event is one of the following:
586 @option{pre_reset}, @option{reset}, @option{post_reset}, @option{post_halt},
587 @option{pre_resume} or @option{gdb_program_config}.
588 @option{post_reset} and @option{reset} will produce the same results.
589
590 @item @b{working_area} <@var{target#}> <@var{address}> <@var{size}> <@var{backup}|@var{nobackup}> [@option{virtual address}]
591 @cindex working_area
592 @*Specifies a working area for the debugger to use. This may be used to speed-up
593 downloads to target memory and flash operations, or to perform otherwise unavailable
594 operations (some coprocessor operations on ARM7/9 systems, for example). The last
595 parameter decides whether the memory should be preserved (<@var{backup}>) or can simply be overwritten (<@var{nobackup}>). If possible, use
596 a working_area that doesn't need to be backed up, as performing a backup slows down operation.
597 @end itemize
598
599 @subsection arm7tdmi options
600 @cindex arm7tdmi options
601 target arm7tdmi <@var{endianess}> <@var{jtag#}>
602 @*The arm7tdmi target definition requires at least one additional argument, specifying
603 the position of the target in the JTAG daisy-chain. The first JTAG device is number 0.
604 The optional [@var{variant}] parameter has been removed in recent versions.
605 The correct feature set is determined at runtime.
606
607 @subsection arm720t options
608 @cindex arm720t options
609 ARM720t options are similar to ARM7TDMI options.
610
611 @subsection arm9tdmi options
612 @cindex arm9tdmi options
613 ARM9TDMI options are similar to ARM7TDMI options. Supported variants are
614 @option{arm920t}, @option{arm922t} and @option{arm940t}.
615 This enables the hardware single-stepping support found on these cores.
616
617 @subsection arm920t options
618 @cindex arm920t options
619 ARM920t options are similar to ARM9TDMI options.
620
621 @subsection arm966e options
622 @cindex arm966e options
623 ARM966e options are similar to ARM9TDMI options.
624
625 @subsection cortex_m3 options
626 @cindex cortex_m3 options
627 use variant <@var{variant}> @option{lm3s} when debugging luminary lm3s targets. This will cause
628 openocd to use a software reset rather than asserting SRST to avoid a issue with clearing
629 the debug registers. This is fixed in Fury Rev B, DustDevil Rev B, Tempest, these revisions will
630 be detected and the normal reset behaviour used.
631
632 @subsection xscale options
633 @cindex xscale options
634 Supported variants are @option{ixp42x}, @option{ixp45x}, @option{ixp46x},
635 @option{pxa250}, @option{pxa255}, @option{pxa26x}.
636
637 @section Flash configuration
638 @cindex Flash configuration
639
640 @itemize @bullet
641 @item @b{flash bank} <@var{driver}> <@var{base}> <@var{size}> <@var{chip_width}>
642 <@var{bus_width}> <@var{target#}> [@var{driver_options ...}]
643 @cindex flash bank
644 @*Configures a flash bank at <@var{base}> of <@var{size}> bytes and <@var{chip_width}>
645 and <@var{bus_width}> bytes using the selected flash <driver>.
646 @end itemize
647
648 @subsection lpc2000 options
649 @cindex lpc2000 options
650
651 @b{flash bank lpc2000} <@var{base}> <@var{size}> 0 0 <@var{target#}> <@var{variant}>
652 <@var{clock}> [@var{calc_checksum}]
653 @*LPC flashes don't require the chip and bus width to be specified. Additional
654 parameters are the <@var{variant}>, which may be @var{lpc2000_v1} (older LPC21xx and LPC22xx)
655 or @var{lpc2000_v2} (LPC213x, LPC214x, LPC210[123], LPC23xx and LPC24xx), the number
656 of the target this flash belongs to (first is 0), the frequency at which the core
657 is currently running (in kHz - must be an integral number), and the optional keyword
658 @var{calc_checksum}, telling the driver to calculate a valid checksum for the exception
659 vector table.
660
661 @subsection cfi options
662 @cindex cfi options
663
664 @b{flash bank cfi} <@var{base}> <@var{size}> <@var{chip_width}> <@var{bus_width}>
665 <@var{target#}> [@var{jedec_probe}|@var{x16_as_x8}]
666 @*CFI flashes require the number of the target they're connected to as an additional
667 argument. The CFI driver makes use of a working area (specified for the target)
668 to significantly speed up operation.
669
670 @var{chip_width} and @var{bus_width} are specified in bytes.
671
672 The @var{jedec_probe} option is used to detect certain non-CFI flash roms, like AM29LV010 and similar types.
673
674 @var{x16_as_x8} ???
675
676 @subsection at91sam7 options
677 @cindex at91sam7 options
678
679 @b{flash bank at91sam7} 0 0 0 0 <@var{target#}>
680 @*AT91SAM7 flashes only require the @var{target#}, all other values are looked up after
681 reading the chip-id and type.
682
683 @subsection str7 options
684 @cindex str7 options
685
686 @b{flash bank str7x} <@var{base}> <@var{size}> 0 0 <@var{target#}> <@var{variant}>
687 @*variant can be either STR71x, STR73x or STR75x.
688
689 @subsection str9 options
690 @cindex str9 options
691
692 @b{flash bank str9x} <@var{base}> <@var{size}> 0 0 <@var{target#}>
693 @*The str9 needs the flash controller to be configured prior to Flash programming, eg.
694 @smallexample
695 str9x flash_config 0 4 2 0 0x80000
696 @end smallexample
697 This will setup the BBSR, NBBSR, BBADR and NBBADR registers respectively.
698
699 @subsection str9 options (str9xpec driver)
700
701 @b{flash bank str9xpec} <@var{base}> <@var{size}> 0 0 <@var{target#}>
702 @*Before using the flash commands the turbo mode will need enabling using str9xpec
703 @option{enable_turbo} <@var{num>.}
704
705 Only use this driver for locking/unlocking the device or configuring the option bytes.
706 Use the standard str9 driver for programming.
707
708 @subsection stellaris (LM3Sxxx) options
709 @cindex stellaris (LM3Sxxx) options
710
711 @b{flash bank stellaris} <@var{base}> <@var{size}> 0 0 <@var{target#}>
712 @*stellaris flash plugin only require the @var{target#}.
713
714 @subsection stm32x options
715 @cindex stm32x options
716
717 @b{flash bank stm32x} <@var{base}> <@var{size}> 0 0 <@var{target#}>
718 @*stm32x flash plugin only require the @var{target#}.
719
720 @subsection aduc702x options
721 @cindex aduc702x options
722
723 @b{flash bank aduc702x} <@var{base}> <@var{size}> 0 0 <@var{target#}>
724 @*aduc702x flash plugin require the flash @var{base}, @var{size} and @var{target#}.
725
726 @section mFlash configuration
727 @cindex mFlash configuration
728
729 @itemize @bullet
730 @item @b{mflash bank} <@var{soc}> <@var{base}> <@var{chip_width}> <@var{bus_width}>
731 <@var{RST pin}> <@var{WP pin}> <@var{DPD pin}> <@var{target #}>
732 @cindex mflash bank
733 @*Configures a mflash for <@var{soc}> host bank at <@var{base}>. <@var{chip_width}> and
734 <@var{bus_width}> are bytes order. Pin number format is dependent on host GPIO calling convention.
735 If WP or DPD pin was not used, write -1. Currently, mflash bank support s3c2440 and pxa270.
736 @end itemize
737 (ex. of s3c2440) mflash <@var{RST pin}> is GPIO B1, <@var{WP pin}> and <@var{DPD pin}> are not used.
738 @smallexample
739 mflash bank s3c2440 0x10000000 2 2 1b -1 -1 0
740 @end smallexample
741 (ex. of pxa270) mflash <@var{RST pin}> is GPIO 43, <@var{DPD pin}> is not used and <@var{DPD pin}> is GPIO 51.
742 @smallexample
743 mflash bank pxa270 0x08000000 2 2 43 -1 51 0
744 @end smallexample
745
746 @node Target library
747 @chapter Target library
748 @cindex Target library
749
750 OpenOCD comes with a target configuration script library. These scripts can be
751 used as-is or serve as a starting point.
752
753 The target library is published together with the openocd executable and
754 the path to the target library is in the OpenOCD script search path.
755 Similarly there are example scripts for configuring the JTAG interface.
756
757 The command line below uses the example parport configuration scripts
758 that ship with OpenOCD, then configures the str710.cfg target and
759 finally issues the init and reset command. The communication speed
760 is set to 10kHz for reset and 8MHz for post reset.
761
762
763 @smallexample
764 openocd -f interface/parport.cfg -f target/str710.cfg -c "init" -c "reset"
765 @end smallexample
766
767
768 To list the target scripts available:
769
770 @smallexample
771 $ ls /usr/local/lib/openocd/target
772
773 arm7_fast.cfg lm3s6965.cfg pxa255.cfg stm32.cfg xba_revA3.cfg
774 at91eb40a.cfg lpc2148.cfg pxa255_sst.cfg str710.cfg zy1000.cfg
775 at91r40008.cfg lpc2294.cfg sam7s256.cfg str912.cfg
776 at91sam9260.cfg nslu2.cfg sam7x256.cfg wi-9c.cfg
777 @end smallexample
778
779
780 @node Commands
781 @chapter Commands
782 @cindex commands
783
784 OpenOCD allows user interaction through a GDB server (default: port 3333),
785 a telnet interface (default: port 4444), and a TCL interface (default: port 5555). The command line interpreter
786 is available from both the telnet interface and a GDB session. To issue commands to the
787 interpreter from within a GDB session, use the @option{monitor} command, e.g. use
788 @option{monitor poll} to issue the @option{poll} command. All output is relayed through the
789 GDB session.
790
791 The TCL interface is used as a simplified RPC mechanism that feeds all the
792 input into the TCL interpreter and returns the output from the evaluation of
793 the commands.
794
795 @section Daemon
796
797 @itemize @bullet
798 @item @b{sleep} <@var{msec}>
799 @cindex sleep
800 @*Wait for n milliseconds before resuming. Useful in connection with script files
801 (@var{script} command and @var{target_script} configuration).
802
803 @item @b{shutdown}
804 @cindex shutdown
805 @*Close the OpenOCD daemon, disconnecting all clients (GDB, Telnet, Other).
806
807 @item @b{debug_level} [@var{n}]
808 @cindex debug_level
809 @anchor{debug_level}
810 @*Display or adjust debug level to n<0-3>
811
812 @item @b{fast} [@var{enable|disable}]
813 @cindex fast
814 @*Default disabled. Set default behaviour of OpenOCD to be "fast and dangerous". For instance ARM7/9 DCC memory
815 downloads and fast memory access will work if the JTAG interface isn't too fast and
816 the core doesn't run at a too low frequency. Note that this option only changes the default
817 and that the indvidual options, like DCC memory downloads, can be enabled and disabled
818 individually.
819
820 The target specific "dangerous" optimisation tweaking options may come and go
821 as more robust and user friendly ways are found to ensure maximum throughput
822 and robustness with a minimum of configuration.
823
824 Typically the "fast enable" is specified first on the command line:
825
826 @smallexample
827 openocd -c "fast enable" -c "interface dummy" -f target/str710.cfg
828 @end smallexample
829
830 @item @b{log_output} <@var{file}>
831 @cindex log_output
832 @*Redirect logging to <file> (default: stderr)
833
834 @item @b{script} <@var{file}>
835 @cindex script
836 @*Execute commands from <file>
837
838 @end itemize
839
840 @subsection Target state handling
841 @itemize @bullet
842 @item @b{power} <@var{on}|@var{off}>
843 @cindex reg
844 @*Turn power switch to target on/off.
845 No arguments: print status.
846
847
848 @item @b{reg} [@option{#}|@option{name}] [value]
849 @cindex reg
850 @*Access a single register by its number[@option{#}] or by its [@option{name}].
851 No arguments: list all available registers for the current target.
852 Number or name argument: display a register
853 Number or name and value arguments: set register value
854
855 @item @b{poll} [@option{on}|@option{off}]
856 @cindex poll
857 @*Poll the target for its current state. If the target is in debug mode, architecture
858 specific information about the current state is printed. An optional parameter
859 allows continuous polling to be enabled and disabled.
860
861 @item @b{halt} [@option{ms}]
862 @cindex halt
863 @*Send a halt request to the target and wait for it to halt for up to [@option{ms}] milliseconds.
864 Default [@option{ms}] is 5 seconds if no arg given.
865 Optional arg @option{ms} is a timeout in milliseconds. Using 0 as the [@option{ms}]
866 will stop OpenOCD from waiting.
867
868 @item @b{wait_halt} [@option{ms}]
869 @cindex wait_halt
870 @*Wait for the target to enter debug mode. Optional [@option{ms}] is
871 a timeout in milliseconds. Default [@option{ms}] is 5 seconds if no
872 arg given.
873
874 @item @b{resume} [@var{address}]
875 @cindex resume
876 @*Resume the target at its current code position, or at an optional address.
877 OpenOCD will wait 5 seconds for the target to resume.
878
879 @item @b{step} [@var{address}]
880 @cindex step
881 @*Single-step the target at its current code position, or at an optional address.
882
883 @item @b{reset} [@option{run}|@option{halt}|@option{init}]
884 @cindex reset
885 @*Perform a hard-reset. The optional parameter specifies what should happen after the reset.
886
887 With no arguments a "reset run" is executed
888 @itemize @minus
889 @item @b{run}
890 @cindex reset run
891 @*Let the target run.
892 @item @b{halt}
893 @cindex reset halt
894 @*Immediately halt the target (works only with certain configurations).
895 @item @b{init}
896 @cindex reset init
897 @*Immediately halt the target, and execute the reset script (works only with certain
898 configurations)
899 @end itemize
900
901 @item @b{soft_reset_halt}
902 @cindex reset
903 @*Requesting target halt and executing a soft reset.
904 @end itemize
905
906 @subsection Memory access commands
907 @itemize @bullet
908 @item @b{meminfo}
909
910 display available ram memory.
911 @end itemize
912 These commands allow accesses of a specific size to the memory system:
913 @itemize @bullet
914 @item @b{mdw} <@var{addr}> [@var{count}]
915 @cindex mdw
916 @*display memory words
917 @item @b{mdh} <@var{addr}> [@var{count}]
918 @cindex mdh
919 @*display memory half-words
920 @item @b{mdb} <@var{addr}> [@var{count}]
921 @cindex mdb
922 @*display memory bytes
923 @item @b{mww} <@var{addr}> <@var{value}>
924 @cindex mww
925 @*write memory word
926 @item @b{mwh} <@var{addr}> <@var{value}>
927 @cindex mwh
928 @*write memory half-word
929 @item @b{mwb} <@var{addr}> <@var{value}>
930 @cindex mwb
931 @*write memory byte
932
933 @item @b{load_image} <@var{file}> <@var{address}> [@option{bin}|@option{ihex}|@option{elf}]
934 @cindex load_image
935 @anchor{load_image}
936 @*Load image <@var{file}> to target memory at <@var{address}>
937 @item @b{fast_load_image} <@var{file}> <@var{address}> [@option{bin}|@option{ihex}|@option{elf}]
938 @cindex fast_load_image
939 @anchor{fast_load_image}
940 @*Normally you should be using @b{load_image} or GDB load. However, for
941 testing purposes or when IO overhead is significant(OpenOCD running on embedded
942 host), then storing the image in memory and uploading the image to the target
943 can be a way to upload e.g. multiple debug sessions when the binary does not change.
944 Arguments as @b{load_image}, but image is stored in OpenOCD host
945 memory, i.e. does not affect target. This approach is also useful when profiling
946 target programming performance as IO and target programming can easily be profiled
947 seperately.
948 @item @b{fast_load}
949 @cindex fast_image
950 @anchor{fast_image}
951 @*Loads image stored in memory by @b{fast_load_image} to current target. Must be preceeded by fast_load_image.
952 @item @b{dump_image} <@var{file}> <@var{address}> <@var{size}>
953 @cindex dump_image
954 @anchor{dump_image}
955 @*Dump <@var{size}> bytes of target memory starting at <@var{address}> to a
956 (binary) <@var{file}>.
957 @item @b{verify_image} <@var{file}> <@var{address}> [@option{bin}|@option{ihex}|@option{elf}]
958 @cindex verify_image
959 @*Verify <@var{file}> against target memory starting at <@var{address}>.
960 This will first attempt comparison using a crc checksum, if this fails it will try a binary compare.
961 @end itemize
962
963 @subsection Breakpoint commands
964 @cindex Breakpoint commands
965 @itemize @bullet
966 @item @b{bp} <@var{addr}> <@var{len}> [@var{hw}]
967 @cindex bp
968 @*set breakpoint <address> <length> [hw]
969 @item @b{rbp} <@var{addr}>
970 @cindex rbp
971 @*remove breakpoint <adress>
972 @item @b{wp} <@var{addr}> <@var{len}> <@var{r}|@var{w}|@var{a}> [@var{value}] [@var{mask}]
973 @cindex wp
974 @*set watchpoint <address> <length> <r/w/a> [value] [mask]
975 @item @b{rwp} <@var{addr}>
976 @cindex rwp
977 @*remove watchpoint <adress>
978 @end itemize
979
980 @subsection Flash commands
981 @cindex Flash commands
982 @itemize @bullet
983 @item @b{flash banks}
984 @cindex flash banks
985 @*List configured flash banks
986 @item @b{flash info} <@var{num}>
987 @cindex flash info
988 @*Print info about flash bank <@option{num}>
989 @item @b{flash probe} <@var{num}>
990 @cindex flash probe
991 @*Identify the flash, or validate the parameters of the configured flash. Operation
992 depends on the flash type.
993 @item @b{flash erase_check} <@var{num}>
994 @cindex flash erase_check
995 @*Check erase state of sectors in flash bank <@var{num}>. This is the only operation that
996 updates the erase state information displayed by @option{flash info}. That means you have
997 to issue an @option{erase_check} command after erasing or programming the device to get
998 updated information.
999 @item @b{flash protect_check} <@var{num}>
1000 @cindex flash protect_check
1001 @*Check protection state of sectors in flash bank <num>.
1002 @option{flash erase_sector} using the same syntax.
1003 @item @b{flash erase_sector} <@var{num}> <@var{first}> <@var{last}>
1004 @cindex flash erase_sector
1005 @anchor{flash erase_sector}
1006 @*Erase sectors at bank <@var{num}>, starting at sector <@var{first}> up to and including
1007 <@var{last}>. Sector numbering starts at 0. Depending on the flash type, erasing may
1008 require the protection to be disabled first (e.g. Intel Advanced Bootblock flash using
1009 the CFI driver).
1010 @item @b{flash erase_address} <@var{address}> <@var{length}>
1011 @cindex flash erase_address
1012 @*Erase sectors starting at <@var{address}> for <@var{length}> bytes
1013 @item @b{flash write_bank} <@var{num}> <@var{file}> <@var{offset}>
1014 @cindex flash write_bank
1015 @anchor{flash write_bank}
1016 @*Write the binary <@var{file}> to flash bank <@var{num}>, starting at
1017 <@option{offset}> bytes from the beginning of the bank.
1018 @item @b{flash write_image} [@var{erase}] <@var{file}> [@var{offset}] [@var{type}]
1019 @cindex flash write_image
1020 @anchor{flash write_image}
1021 @*Write the image <@var{file}> to the current target's flash bank(s). A relocation
1022 [@var{offset}] can be specified and the file [@var{type}] can be specified
1023 explicitly as @option{bin} (binary), @option{ihex} (Intel hex), @option{elf}
1024 (ELF file) or @option{s19} (Motorola s19). Flash memory will be erased prior to programming
1025 if the @option{erase} parameter is given.
1026 @item @b{flash protect} <@var{num}> <@var{first}> <@var{last}> <@option{on}|@option{off}>
1027 @cindex flash protect
1028 @*Enable (@var{on}) or disable (@var{off}) protection of flash sectors <@var{first}> to
1029 <@var{last}> of @option{flash bank} <@var{num}>.
1030 @end itemize
1031
1032 @subsection mFlash commands
1033 @cindex mFlash commands
1034 @itemize @bullet
1035 @item @b{mflash probe}
1036 @cindex mflash probe
1037 Probe mflash.
1038 @item @b{mflash write} <@var{num}> <@var{file}> <@var{offset}>
1039 @cindex mflash write
1040 Write the binary <@var{file}> to mflash bank <@var{num}>, starting at
1041 <@var{offset}> bytes from the beginning of the bank.
1042 @item @b{mflash dump} <@var{num}> <@var{file}> <@var{offset}> <@var{size}>
1043 @cindex mflash dump
1044 Dump <size> bytes, starting at <@var{offset}> bytes from the beginning of the <@var{num}> bank
1045 to a <@var{file}>.
1046 @end itemize
1047
1048 @page
1049 @section Target Commands
1050 @cindex Target Commands
1051
1052 @subsection Overview
1053 @cindex Overview
1054 Pre "TCL" - many commands in OpenOCD where implemented as C functions. Post "TCL"
1055 (Jim-Tcl to be more exact, June 2008) TCL became a bigger part of OpenOCD.
1056
1057 One of the biggest changes is the introduction of 'target specific'
1058 commands. When every time you create a target, a special command name is
1059 created specifically for that target.
1060 For example - in TCL/TK - if you create a button (or any other screen object) you
1061 can specify various "button configuration parameters". One of those parameters is
1062 the "object cmd/name" [ In TK - this is referred to as the object path ]. Later
1063 you can use that 'path' as a command to modify the button, for example to make it
1064 "grey", or change the color. In effect, the "path" function is an 'object
1065 oriented command'. The TCL change in OpenOCD follows the same principle, you create
1066 a target, and a specific "targetname" command is created.
1067
1068 There are two methods of creating a target:
1069
1070 @enumerate
1071 @item
1072 Using the old syntax (deprecated). Target names are autogenerated as:
1073 "target0", "target1", etc.;
1074 @cindex old syntax
1075 @item
1076 Using the new syntax, you can specify the name of the target.
1077 @cindex new syntax
1078 @end enumerate
1079
1080 As most users will have a single JTAG target, and by default the command name will
1081 probably default to "target0", thus for reasons of simplicity the instructions below
1082 use the name "target0".
1083
1084 @subsection Commands
1085 @cindex Commands
1086 OpenOCD has the following 'target' or 'target-like' commands:
1087
1088 @enumerate
1089 @item
1090 @b{targets (plural)} - lists all known targets and a little bit of information about each
1091 target, most importantly the target *COMMAND*NAME* (it also lists the target number);
1092 @cindex targets
1093 @item
1094 @b{target (singular)} - used to create, configure list, etc the targets;
1095 @cindex target
1096 @item
1097 @b{target0} - the command object for the first target. Unless you specified another name.
1098 @cindex target0
1099 @end enumerate
1100
1101 @subsubsection Targets Command
1102 @cindex Targets Command
1103 The "targets" command has 2 functions:
1104
1105 @itemize
1106 @item
1107 With a parameter, you can change the current command line target.
1108
1109 NOTE: "with a parameter" is really only useful with 'multiple JTAG targets' not something
1110 you normally encounter (ie: If you had 2 arm chips - sharing the same JTAG chain).
1111 @verbatim
1112 # using a target name.
1113 (gdb) mon targets target0
1114 # or a target by number.
1115 (gdb) mon targets 3
1116 @end verbatim
1117 @cindex with a parameter
1118 @item
1119 Plain, without any parameter lists targets, for example:
1120
1121 @verbatim
1122 (gdb) mon targets
1123 CmdName Type Endian ChainPos State
1124 -- ---------- ---------- ---------- -------- ----------
1125 0: target0 arm7tdmi little 0 halted
1126 @end verbatim
1127
1128 This shows:
1129 @enumerate a
1130 @item
1131 in this example, a single target;
1132 @item
1133 target number 0 (1st column);
1134 @item
1135 the 'object name' is target0 (the default name);
1136 @item
1137 it is an arm7tdmi;
1138 @item
1139 little endian;
1140 @item
1141 the position in the JTAG chain;
1142 @item
1143 and is currently halted.
1144 @end enumerate
1145 @cindex without any parameter
1146 @end itemize
1147
1148 @subsubsection Target Command
1149 @cindex Target Command
1150
1151 The "target" command has the following options:
1152 @itemize
1153 @item
1154 target create
1155
1156 @verbatim
1157 target create CMDNAME TYPE ... config options ...
1158 argv[0] = 'target'
1159 argv[1] = 'create'
1160 argv[2] = the 'object command'
1161 (normally, target0, see (3) above)
1162 argv[3] = the target type, ie: arm7tdmi
1163 argv[4..N] = configuration parameters
1164 @end verbatim
1165 @item
1166 target types
1167
1168 Lists all supported target types; ie: arm7tdmi, xscale, fericon, cortex-m3.
1169 The result TCL list of all known target types (and is human readable).
1170 @item
1171 target names
1172
1173 Returns a TCL list of all known target commands (and is human readable).
1174
1175 Example:
1176 @verbatim
1177 foreach t [target names] {
1178 puts [format "Target: %s\n" $t]
1179 }
1180 @end verbatim
1181 @item
1182 target current
1183
1184 Returns the TCL command name of the current target.
1185
1186 Example:
1187 @verbatim
1188 set ct [target current]
1189 set t [$ct cget -type]
1190
1191 puts "Current target name is: $ct, and is a: $t"
1192 @end verbatim
1193 @item
1194 target number <VALUE>
1195
1196 Returns the TCL command name of the specified target.
1197
1198 Example
1199 @verbatim
1200 set thename [target number $x]
1201 puts [format "Target %d is: %s\n" $x $thename]
1202 @end verbatim
1203 For instance, assuming the defaults
1204 @verbatim
1205 target number 0
1206 @end verbatim
1207 Would return 'target0' (or whatever you called it)
1208 @item
1209 target count
1210
1211 Returns the larget+1 target number.
1212
1213 Example:
1214 @verbatim
1215 set c [target count]
1216 for { set x 0 } { $x < $c } { incr x } {
1217 # Assuming you have this function..
1218 print_target_details $x
1219 }
1220 @end verbatim
1221 @end itemize
1222
1223 @subsubsection Target0 Command
1224 @cindex Target0 Command
1225 The "target0" command (the "Target Object" command):
1226
1227 Once a target is 'created' a command object by that targets name is created, for example
1228 @verbatim
1229 target create BiGRed arm7tdmi -endian little -chain-position 3
1230 @end verbatim
1231
1232 Would create a [case sensitive] "command" BiGRed
1233
1234 If you use the old [deprecated] syntax, the name is automatically
1235 generated and is in the form:
1236 @verbatim
1237 target0, target1, target2, target3, ... etc.
1238 @end verbatim
1239
1240 @subsubsection Target CREATE, CONFIGURE and CGET Options Command
1241 @cindex Target CREATE, CONFIGURE and CGET Options Command
1242 The commands:
1243 @verbatim
1244 target create CMDNAME TYPE [configure-options]
1245 CMDNAME configure [configure-options]
1246 CMDNAME cget [configure-options]
1247 @end verbatim
1248 @itemize
1249 @item
1250 In the 'create' case, one is creating the target and can specify any
1251 number of configuration parameters.
1252 @item
1253 In the 'CMDNAME configure' case, one can change the setting [Not all things can, or should be changed].
1254 @item
1255 In the 'CMDNAME cget' case, the goal is to query the target for a
1256 specific configuration option.
1257 @end itemize
1258
1259 In the above, the "default" name target0 is 'target0'.
1260
1261 Example:
1262
1263 From the (gdb) prompt, one can type this:
1264
1265 @verbatim
1266 (gdb) mon target0 configure -endian big
1267 @end verbatim
1268
1269 And change target0 to 'big-endian'. This is a contrived example,
1270 specifically for this document - don't expect changing endian
1271 'mid-operation' to work you should set the endian at creation.
1272
1273 Known options [30/august/2008] are:
1274 @itemize
1275 @item
1276 [Mandatory 'create' Options]
1277 @itemize
1278 @item
1279 type arm7tdmi|arm720|etc ...
1280 @item
1281 chain-position NUMBER
1282 @item
1283 endian ENDIAN
1284 @end itemize
1285 @item
1286 Optional
1287 @itemize
1288 @item
1289 event EVENTNAME "tcl-action"
1290 @item
1291 reset RESETACTION
1292 @item
1293 work-area-virt ADDR
1294 @item
1295 work-area-phys ADDR
1296 @item
1297 work-area-size ADDR
1298 @item
1299 work-area-backup BOOLEAN
1300 @end itemize
1301 @end itemize
1302 Hint: To get a list of available options, try this:
1303 @verbatim
1304 (gdb) mon target0 cget -BLAHBLAHBLAH
1305 @end verbatim
1306
1307 the above causes an error - and a helpful list of valid options.
1308
1309 One can query any of the above options at run time, for example:
1310 @verbatim
1311 (gdb) mon target0 cget -OPTION [param]
1312 @end verbatim
1313
1314 Example TCL script
1315
1316 @verbatim
1317 # For all targets...
1318 set c [target count]
1319 for { set x 0 } { $x < $c } { incr x ] {
1320 set n [target number $x]
1321 set t [$n cget -type]
1322 set e [$n cget -endian]
1323 puts [format "%d: %s, %s, endian: %s\n" $x $n $t $n]
1324 }
1325 @end verbatim
1326
1327 Might produce:
1328
1329 @verbatim
1330 0: pic32chip, mips_m4k, endain: little
1331 1: arm7, arm7tdmi, endian: big
1332 2: blackfin, bf534, endian: little
1333 @end verbatim
1334
1335 Notice the above example is not target0, target1, target2 Why? Because in this contrived multi-target example -
1336 more human understandable target names might be helpful.
1337
1338 For example these two are the same:
1339
1340 @verbatim
1341 (gdb) mon blackfin configure -event FOO {puts "Hi mom"}
1342 @end verbatim
1343
1344 or:
1345
1346 @verbatim
1347 (gdb) mon [target number 2] configure -event FOO {puts "Hi mom"}
1348 @end verbatim
1349
1350 In the second case, we use [] to get the command name of target #2, in this contrived example - it is "blackfin".
1351
1352 Two important configuration options are:
1353
1354 "-event" and "-reset"
1355
1356 The "-reset" option specifies what should happen when the chip is reset, for example should it 'halt', 're-init',
1357 or what.
1358
1359 The "-event" option less you specify a TCL command to occur when a specific event occurs.
1360
1361 @subsubsection Other Target Commands
1362 @cindex Other Target Commands
1363 @itemize
1364 @item @b{profile} <@var{seconds}> <@var{gmon.out}>
1365
1366 Profiling samples the CPU PC as quickly as OpenOCD is able, which will be used as a random sampling of PC.
1367 @end itemize
1368
1369 @subsection Target Events
1370 @cindex Target Events
1371
1372 @subsubsection Overview
1373 @cindex Overview
1374 At various points in time - certain 'target' events happen. You can create a custom event action to occur at that time.
1375 For example - after reset, the PLLs and CLOCKs may need to be reconfigured, or perhaps the SDRAM needs to be re-initialized.
1376 Often the easiest way to do that is to create a simple script file containing the series of (mww [poke memory]) commands
1377 you would type by hand, to reconfigure the target clocks. You could specify the "event action" like this:
1378
1379 @verbatim
1380 (gdb) mon target0 configure -event reset-init "script cfg.clocks"
1381 @end verbatim
1382
1383 In the above example, when the event "reset-init" occurs, the "action-string" will be evaluated as if you typed it at the
1384 console:
1385 @itemize
1386 @item @b{Option1} - The simple approach (above) is to create a script file with lots of "mww" (memory write word) commands
1387 to configure your targets clocks and/or external memory;
1388 @item @b{Option2} - You can instead create a fancy TCL procedure and invoke that procedure instead of sourcing a file [In fact,
1389 "script" is a TCL procedure that loads a file].
1390 @end itemize
1391
1392 @subsubsection Details
1393 @cindex Details
1394 There are many events one could use, to get a current list of events type the following invalid command, you'll get a helpful
1395 "runtime error" message, see below [list valid as of 30/august/2008]:
1396
1397 @verbatim
1398 (gdb) mon target0 cget -event FAFA
1399 Runtime error, file "../../../openocd23/src/helper/command.c", line 433:
1400 -event: Unknown: FAFA, try one of: old-pre_reset,
1401 old-gdb_program_config, old-post_reset, halted,
1402 resumed, resume-start, resume-end, reset-start,
1403 reset-assert-pre, reset-assert-post,
1404 reset-deassert-pre, reset-deassert-post,
1405 reset-halt-pre, reset-halt-post, reset-wait-pre,
1406 reset-wait-post, reset-init, reset-end,
1407 examine-start, examine-end, debug-halted,
1408 debug-resumed, gdb-attach, gdb-detach,
1409 gdb-flash-write-start, gdb-flash-write-end,
1410 gdb-flash-erase-start, gdb-flash-erase-end,
1411 resume-start, resume-ok, or resume-end
1412 @end verbatim
1413
1414 NOTE: The event-names "old-*" are deprecated and exist only to help old scripts continue to function, and the old "target_script"
1415 command to work. Please do not rely on them.
1416
1417 These are some other important names:
1418 @itemize
1419 @item gdb-flash-erase-start
1420 @item gdb-flash-erase-end
1421 @item gdb-flash-write-start
1422 @item gdb-flash-write-end
1423 @end itemize
1424
1425 These occur when GDB/OpenOCD attempts to erase & program the FLASH chip via GDB. For example - some PCBs may have a simple GPIO
1426 pin that acts like a "flash write protect" you might need to write a script that disables "write protect".
1427
1428 To get a list of current 'event actions', type the following command:
1429
1430 @verbatim
1431 (gdb) mon target0 eventlist
1432
1433 Event actions for target (0) target0
1434
1435 Event | Body
1436 ------------------------- | ----------------------------------------
1437 old-post_reset | script event/sam7x256_reset.script
1438 @end verbatim
1439
1440 Here is a simple example for all targets:
1441
1442 @verbatim
1443 (gdb) mon foreach x [target names] { $x eventlist }
1444 @end verbatim
1445
1446 The above uses some TCL tricks:
1447 @enumerate a
1448 @item foreach VARIABLE LIST BODY
1449 @item to generate the list, we use [target names]
1450 @item the BODY, contains $x - the loop variable and expands to the target specific name
1451 @end enumerate
1452
1453 Recalling the earlier discussion - the "object command" there are other things you can
1454 do besides "configure" the target.
1455
1456 Note: Many of these commands exist as "global" commands, and they also exist as target
1457 specific commands. For example, the "mww" (memory write word) operates on the current
1458 target if you have more then 1 target, you must switch. In contrast to the normal
1459 commands, these commands operate on the specific target. For example, the command "mww"
1460 writes data to the *current* command line target.
1461
1462 Often, you have only a single target - but if you have multiple targets (ie: a PIC32
1463 and an at91sam7 - your reset-init scripts might get a bit more complicated, ie: you must
1464 specify which of the two chips you want to write to. Writing 'pic32' clock configuration
1465 to an at91sam7 does not work).
1466
1467 The commands are [as of 30/august/2008]:
1468 @verbatim
1469 TNAME mww ADDRESS VALUE
1470 TNAME mwh ADDRESS VALUE
1471 TNAME mwb ADDRESS VALUE
1472 Write(poke): 32, 16, 8bit values to memory.
1473
1474 TNAME mdw ADDRESS VALUE
1475 TNAME mdh ADDRESS VALUE
1476 TNAME mdb ADDRESS VALUE
1477 Human 'hexdump' with ascii 32, 16, 8bit values
1478
1479 TNAME mem2array [see mem2array command]
1480 TNAME array2mem [see array2mem command]
1481
1482 TNAME curstate
1483 Returns the current state of the target.
1484
1485 TNAME examine
1486 See 'advanced target reset'
1487 TNAME poll
1488 See 'advanced target reset'
1489 TNAME reset assert
1490 See 'advanced target reset'
1491 TNAME reset deassert
1492 See 'advanced target reset'
1493 TNAME halt
1494 See 'advanced target reset'
1495 TNAME waitstate STATENAME
1496 See 'advanced target reset'
1497 @end verbatim
1498
1499 @page
1500 @section Target Specific Commands
1501 @cindex Target Specific Commands
1502
1503 @subsection AT91SAM7 specific commands
1504 @cindex AT91SAM7 specific commands
1505 The flash configuration is deduced from the chip identification register. The flash
1506 controller handles erases automatically on a page (128/265 byte) basis so erase is
1507 not necessary for flash programming. AT91SAM7 processors with less than 512K flash
1508 only have a single flash bank embedded on chip. AT91SAM7xx512 have two flash planes
1509 that can be erased separatly. Only an EraseAll command is supported by the controller
1510 for each flash plane and this is called with
1511 @itemize @bullet
1512 @item @b{flash erase} <@var{num}> @var{first_plane} @var{last_plane}
1513 @*bulk erase flash planes first_plane to last_plane.
1514 @item @b{at91sam7 gpnvm} <@var{num}> <@var{bit}> <@option{set}|@option{clear}>
1515 @cindex at91sam7 gpnvm
1516 @*set or clear a gpnvm bit for the processor
1517 @end itemize
1518
1519 @subsection STR9 specific commands
1520 @cindex STR9 specific commands
1521 These are flash specific commands when using the str9xpec driver.
1522 @itemize @bullet
1523 @item @b{str9xpec enable_turbo} <@var{num}>
1524 @cindex str9xpec enable_turbo
1525 @*enable turbo mode, simply this will remove the str9 from the chain and talk
1526 directly to the embedded flash controller.
1527 @item @b{str9xpec disable_turbo} <@var{num}>
1528 @cindex str9xpec disable_turbo
1529 @*restore the str9 into jtag chain.
1530 @item @b{str9xpec lock} <@var{num}>
1531 @cindex str9xpec lock
1532 @*lock str9 device. The str9 will only respond to an unlock command that will
1533 erase the device.
1534 @item @b{str9xpec unlock} <@var{num}>
1535 @cindex str9xpec unlock
1536 @*unlock str9 device.
1537 @item @b{str9xpec options_read} <@var{num}>
1538 @cindex str9xpec options_read
1539 @*read str9 option bytes.
1540 @item @b{str9xpec options_write} <@var{num}>
1541 @cindex str9xpec options_write
1542 @*write str9 option bytes.
1543 @end itemize
1544
1545 @subsection STR9 configuration
1546 @cindex STR9 configuration
1547 @itemize @bullet
1548 @item @b{str9x flash_config} <@var{bank}> <@var{BBSR}> <@var{NBBSR}>
1549 <@var{BBADR}> <@var{NBBADR}>
1550 @cindex str9x flash_config
1551 @*Configure str9 flash controller.
1552 @smallexample
1553 eg. str9x flash_config 0 4 2 0 0x80000
1554 This will setup
1555 BBSR - Boot Bank Size register
1556 NBBSR - Non Boot Bank Size register
1557 BBADR - Boot Bank Start Address register
1558 NBBADR - Boot Bank Start Address register
1559 @end smallexample
1560 @end itemize
1561
1562 @subsection STR9 option byte configuration
1563 @cindex STR9 option byte configuration
1564 @itemize @bullet
1565 @item @b{str9xpec options_cmap} <@var{num}> <@option{bank0}|@option{bank1}>
1566 @cindex str9xpec options_cmap
1567 @*configure str9 boot bank.
1568 @item @b{str9xpec options_lvdthd} <@var{num}> <@option{2.4v}|@option{2.7v}>
1569 @cindex str9xpec options_lvdthd
1570 @*configure str9 lvd threshold.
1571 @item @b{str9xpec options_lvdsel} <@var{num}> <@option{vdd}|@option{vdd_vddq}>
1572 @cindex str9xpec options_lvdsel
1573 @*configure str9 lvd source.
1574 @item @b{str9xpec options_lvdwarn} <@var{bank}> <@option{vdd}|@option{vdd_vddq}>
1575 @cindex str9xpec options_lvdwarn
1576 @*configure str9 lvd reset warning source.
1577 @end itemize
1578
1579 @subsection STM32x specific commands
1580 @cindex STM32x specific commands
1581
1582 These are flash specific commands when using the stm32x driver.
1583 @itemize @bullet
1584 @item @b{stm32x lock} <@var{num}>
1585 @cindex stm32x lock
1586 @*lock stm32 device.
1587 @item @b{stm32x unlock} <@var{num}>
1588 @cindex stm32x unlock
1589 @*unlock stm32 device.
1590 @item @b{stm32x options_read} <@var{num}>
1591 @cindex stm32x options_read
1592 @*read stm32 option bytes.
1593 @item @b{stm32x options_write} <@var{num}> <@option{SWWDG}|@option{HWWDG}>
1594 <@option{RSTSTNDBY}|@option{NORSTSTNDBY}> <@option{RSTSTOP}|@option{NORSTSTOP}>
1595 @cindex stm32x options_write
1596 @*write stm32 option bytes.
1597 @item @b{stm32x mass_erase} <@var{num}>
1598 @cindex stm32x mass_erase
1599 @*mass erase flash memory.
1600 @end itemize
1601
1602 @subsection Stellaris specific commands
1603 @cindex Stellaris specific commands
1604
1605 These are flash specific commands when using the Stellaris driver.
1606 @itemize @bullet
1607 @item @b{stellaris mass_erase} <@var{num}>
1608 @cindex stellaris mass_erase
1609 @*mass erase flash memory.
1610 @end itemize
1611
1612 @page
1613 @section Architecture Specific Commands
1614 @cindex Architecture Specific Commands
1615
1616 @subsection ARMV4/5 specific commands
1617 @cindex ARMV4/5 specific commands
1618
1619 These commands are specific to ARM architecture v4 and v5, like all ARM7/9 systems
1620 or Intel XScale (XScale isn't supported yet).
1621 @itemize @bullet
1622 @item @b{armv4_5 reg}
1623 @cindex armv4_5 reg
1624 @*Display a list of all banked core registers, fetching the current value from every
1625 core mode if necessary. OpenOCD versions before rev. 60 didn't fetch the current
1626 register value.
1627 @item @b{armv4_5 core_mode} [@var{arm}|@var{thumb}]
1628 @cindex armv4_5 core_mode
1629 @*Displays the core_mode, optionally changing it to either ARM or Thumb mode.
1630 The target is resumed in the currently set @option{core_mode}.
1631 @end itemize
1632
1633 @subsection ARM7/9 specific commands
1634 @cindex ARM7/9 specific commands
1635
1636 These commands are specific to ARM7 and ARM9 targets, like ARM7TDMI, ARM720t,
1637 ARM920t or ARM926EJ-S.
1638 @itemize @bullet
1639 @item @b{arm7_9 dbgrq} <@var{enable}|@var{disable}>
1640 @cindex arm7_9 dbgrq
1641 @*Enable use of the DBGRQ bit to force entry into debug mode. This should be
1642 safe for all but ARM7TDMI--S cores (like Philips LPC).
1643 @item @b{arm7_9 fast_memory_access} <@var{enable}|@var{disable}>
1644 @cindex arm7_9 fast_memory_access
1645 @anchor{arm7_9 fast_memory_access}
1646 @*Allow OpenOCD to read and write memory without checking completion of
1647 the operation. This provides a huge speed increase, especially with USB JTAG
1648 cables (FT2232), but might be unsafe if used with targets running at a very low
1649 speed, like the 32kHz startup clock of an AT91RM9200.
1650 @item @b{arm7_9 dcc_downloads} <@var{enable}|@var{disable}>
1651 @cindex arm7_9 dcc_downloads
1652 @*Enable the use of the debug communications channel (DCC) to write larger (>128 byte)
1653 amounts of memory. DCC downloads offer a huge speed increase, but might be potentially
1654 unsafe, especially with targets running at a very low speed. This command was introduced
1655 with OpenOCD rev. 60.
1656 @end itemize
1657
1658 @subsection ARM720T specific commands
1659 @cindex ARM720T specific commands
1660
1661 @itemize @bullet
1662 @item @b{arm720t cp15} <@var{num}> [@var{value}]
1663 @cindex arm720t cp15
1664 @*display/modify cp15 register <@option{num}> [@option{value}].
1665 @item @b{arm720t md<bhw>_phys} <@var{addr}> [@var{count}]
1666 @cindex arm720t md<bhw>_phys
1667 @*Display memory at physical address addr.
1668 @item @b{arm720t mw<bhw>_phys} <@var{addr}> <@var{value}>
1669 @cindex arm720t mw<bhw>_phys
1670 @*Write memory at physical address addr.
1671 @item @b{arm720t virt2phys} <@var{va}>
1672 @cindex arm720t virt2phys
1673 @*Translate a virtual address to a physical address.
1674 @end itemize
1675
1676 @subsection ARM9TDMI specific commands
1677 @cindex ARM9TDMI specific commands
1678
1679 @itemize @bullet
1680 @item @b{arm9tdmi vector_catch} <@var{all}|@var{none}>
1681 @cindex arm9tdmi vector_catch
1682 @*Catch arm9 interrupt vectors, can be @option{all} @option{none} or any of the following:
1683 @option{reset} @option{undef} @option{swi} @option{pabt} @option{dabt} @option{reserved}
1684 @option{irq} @option{fiq}.
1685
1686 Can also be used on other arm9 based cores, arm966, arm920t and arm926ejs.
1687 @end itemize
1688
1689 @subsection ARM966E specific commands
1690 @cindex ARM966E specific commands
1691
1692 @itemize @bullet
1693 @item @b{arm966e cp15} <@var{num}> [@var{value}]
1694 @cindex arm966e cp15
1695 @*display/modify cp15 register <@option{num}> [@option{value}].
1696 @end itemize
1697
1698 @subsection ARM920T specific commands
1699 @cindex ARM920T specific commands
1700
1701 @itemize @bullet
1702 @item @b{arm920t cp15} <@var{num}> [@var{value}]
1703 @cindex arm920t cp15
1704 @*display/modify cp15 register <@option{num}> [@option{value}].
1705 @item @b{arm920t cp15i} <@var{num}> [@var{value}] [@var{address}]
1706 @cindex arm920t cp15i
1707 @*display/modify cp15 (interpreted access) <@option{opcode}> [@option{value}] [@option{address}]
1708 @item @b{arm920t cache_info}
1709 @cindex arm920t cache_info
1710 @*Print information about the caches found. This allows you to see if your target
1711 is a ARM920T (2x16kByte cache) or ARM922T (2x8kByte cache).
1712 @item @b{arm920t md<bhw>_phys} <@var{addr}> [@var{count}]
1713 @cindex arm920t md<bhw>_phys
1714 @*Display memory at physical address addr.
1715 @item @b{arm920t mw<bhw>_phys} <@var{addr}> <@var{value}>
1716 @cindex arm920t mw<bhw>_phys
1717 @*Write memory at physical address addr.
1718 @item @b{arm920t read_cache} <@var{filename}>
1719 @cindex arm920t read_cache
1720 @*Dump the content of ICache and DCache to a file.
1721 @item @b{arm920t read_mmu} <@var{filename}>
1722 @cindex arm920t read_mmu
1723 @*Dump the content of the ITLB and DTLB to a file.
1724 @item @b{arm920t virt2phys} <@var{va}>
1725 @cindex arm920t virt2phys
1726 @*Translate a virtual address to a physical address.
1727 @end itemize
1728
1729 @subsection ARM926EJS specific commands
1730 @cindex ARM926EJS specific commands
1731
1732 @itemize @bullet
1733 @item @b{arm926ejs cp15} <@var{num}> [@var{value}]
1734 @cindex arm926ejs cp15
1735 @*display/modify cp15 register <@option{num}> [@option{value}].
1736 @item @b{arm926ejs cache_info}
1737 @cindex arm926ejs cache_info
1738 @*Print information about the caches found.
1739 @item @b{arm926ejs md<bhw>_phys} <@var{addr}> [@var{count}]
1740 @cindex arm926ejs md<bhw>_phys
1741 @*Display memory at physical address addr.
1742 @item @b{arm926ejs mw<bhw>_phys} <@var{addr}> <@var{value}>
1743 @cindex arm926ejs mw<bhw>_phys
1744 @*Write memory at physical address addr.
1745 @item @b{arm926ejs virt2phys} <@var{va}>
1746 @cindex arm926ejs virt2phys
1747 @*Translate a virtual address to a physical address.
1748 @end itemize
1749
1750 @page
1751 @section Debug commands
1752 @cindex Debug commands
1753 The following commands give direct access to the core, and are most likely
1754 only useful while debugging OpenOCD.
1755 @itemize @bullet
1756 @item @b{arm7_9 write_xpsr} <@var{32-bit value}> <@option{0=cpsr}, @option{1=spsr}>
1757 @cindex arm7_9 write_xpsr
1758 @*Immediately write either the current program status register (CPSR) or the saved
1759 program status register (SPSR), without changing the register cache (as displayed
1760 by the @option{reg} and @option{armv4_5 reg} commands).
1761 @item @b{arm7_9 write_xpsr_im8} <@var{8-bit value}> <@var{rotate 4-bit}>
1762 <@var{0=cpsr},@var{1=spsr}>
1763 @cindex arm7_9 write_xpsr_im8
1764 @*Write the 8-bit value rotated right by 2*rotate bits, using an immediate write
1765 operation (similar to @option{write_xpsr}).
1766 @item @b{arm7_9 write_core_reg} <@var{num}> <@var{mode}> <@var{value}>
1767 @cindex arm7_9 write_core_reg
1768 @*Write a core register, without changing the register cache (as displayed by the
1769 @option{reg} and @option{armv4_5 reg} commands). The <@var{mode}> argument takes the
1770 encoding of the [M4:M0] bits of the PSR.
1771 @end itemize
1772
1773 @page
1774 @section JTAG commands
1775 @cindex JTAG commands
1776 @itemize @bullet
1777 @item @b{scan_chain}
1778 @cindex scan_chain
1779 @*Print current scan chain configuration.
1780 @item @b{jtag_reset} <@var{trst}> <@var{srst}>
1781 @cindex jtag_reset
1782 @*Toggle reset lines.
1783 @item @b{endstate} <@var{tap_state}>
1784 @cindex endstate
1785 @*Finish JTAG operations in <@var{tap_state}>.
1786 @item @b{runtest} <@var{num_cycles}>
1787 @cindex runtest
1788 @*Move to Run-Test/Idle, and execute <@var{num_cycles}>
1789 @item @b{statemove} [@var{tap_state}]
1790 @cindex statemove
1791 @*Move to current endstate or [@var{tap_state}]
1792 @item @b{irscan} <@var{device}> <@var{instr}> [@var{dev2}] [@var{instr2}] ...
1793 @cindex irscan
1794 @*Execute IR scan <@var{device}> <@var{instr}> [@var{dev2}] [@var{instr2}] ...
1795 @item @b{drscan} <@var{device}> [@var{dev2}] [@var{var2}] ...
1796 @cindex drscan
1797 @*Execute DR scan <@var{device}> [@var{dev2}] [@var{var2}] ...
1798 @item @b{verify_ircapture} <@option{enable}|@option{disable}>
1799 @cindex verify_ircapture
1800 @*Verify value captured during Capture-IR. Default is enabled.
1801 @item @b{var} <@var{name}> [@var{num_fields}|@var{del}] [@var{size1}] ...
1802 @cindex var
1803 @*Allocate, display or delete variable <@var{name}> [@var{num_fields}|@var{del}] [@var{size1}] ...
1804 @item @b{field} <@var{var}> <@var{field}> [@var{value}|@var{flip}]
1805 @cindex field
1806 Display/modify variable field <@var{var}> <@var{field}> [@var{value}|@var{flip}].
1807 @end itemize
1808
1809 @page
1810 @section Target Requests
1811 @cindex Target Requests
1812 OpenOCD can handle certain target requests, currently debugmsg are only supported for arm7_9 and cortex_m3.
1813 See libdcc in the contrib dir for more details.
1814 @itemize @bullet
1815 @item @b{target_request debugmsgs} <@var{enable}|@var{disable}>
1816 @cindex target_request debugmsgs
1817 @*Enable/disable target debugmsgs requests. debugmsgs enable messages to be sent to the debugger while the target is running.
1818 @end itemize
1819
1820 @node TFTP
1821 @chapter TFTP
1822 @cindex TFTP
1823 If OpenOCD runs on an embedded host(as ZY1000 does), then tftp can
1824 be used to access files on PCs(either developer PC or some other PC).
1825
1826 The way this works is to prefix a filename by "/tftp/ip/" and append
1827 the tftp path on the tftp server(tftpd). E.g. "load_image /tftp/10.0.0.96/c:\temp\abc.elf"
1828 will load c:\temp\abc.elf from the developer pc (10.0.0.96) into memory as
1829 if the file was hosted on the embedded host.
1830
1831 In order to achieve decent performance, you must choose a tftp server
1832 that supports a packet size bigger than the default packet size(512 bytes). There
1833 are numerous tftp servers out there(free and commercial) and you will have to do
1834 a bit of googling to find something that fits your requirements.
1835
1836 @node Sample Scripts
1837 @chapter Sample Scripts
1838 @cindex scripts
1839
1840 This page shows how to use the target library.
1841
1842 The configuration script can be divided in the following section:
1843 @itemize @bullet
1844 @item daemon configuration
1845 @item interface
1846 @item jtag scan chain
1847 @item target configuration
1848 @item flash configuration
1849 @end itemize
1850
1851 Detailed information about each section can be found at OpenOCD configuration.
1852
1853 @section AT91R40008 example
1854 @cindex AT91R40008 example
1855 To start OpenOCD with a target script for the AT91R40008 CPU and reset
1856 the CPU upon startup of the OpenOCD daemon.
1857 @smallexample
1858 openocd -f interface/parport.cfg -f target/at91r40008.cfg -c init -c reset
1859 @end smallexample
1860
1861
1862 @node GDB and OpenOCD
1863 @chapter GDB and OpenOCD
1864 @cindex GDB and OpenOCD
1865 OpenOCD complies with the remote gdbserver protocol, and as such can be used
1866 to debug remote targets.
1867
1868 @section Connecting to gdb
1869 @cindex Connecting to gdb
1870 Use GDB 6.7 or newer with OpenOCD if you run into trouble. For instance 6.3 has a
1871 known bug where it produces bogus memory access errors, which has since
1872 been fixed: look up 1836 in http://sourceware.org/cgi-bin/gnatsweb.pl?database=gdb
1873
1874
1875 A connection is typically started as follows:
1876 @smallexample
1877 target remote localhost:3333
1878 @end smallexample
1879 This would cause gdb to connect to the gdbserver on the local pc using port 3333.
1880
1881 To see a list of available OpenOCD commands type @option{monitor help} on the
1882 gdb commandline.
1883
1884 OpenOCD supports the gdb @option{qSupported} packet, this enables information
1885 to be sent by the gdb server (openocd) to gdb. Typical information includes
1886 packet size and device memory map.
1887
1888 Previous versions of OpenOCD required the following gdb options to increase
1889 the packet size and speed up gdb communication.
1890 @smallexample
1891 set remote memory-write-packet-size 1024
1892 set remote memory-write-packet-size fixed
1893 set remote memory-read-packet-size 1024
1894 set remote memory-read-packet-size fixed
1895 @end smallexample
1896 This is now handled in the @option{qSupported} PacketSize.
1897
1898 @section Programming using gdb
1899 @cindex Programming using gdb
1900
1901 By default the target memory map is sent to gdb, this can be disabled by
1902 the following OpenOCD config option:
1903 @smallexample
1904 gdb_memory_map disable
1905 @end smallexample
1906 For this to function correctly a valid flash config must also be configured
1907 in OpenOCD. For faster performance you should also configure a valid
1908 working area.
1909
1910 Informing gdb of the memory map of the target will enable gdb to protect any
1911 flash area of the target and use hardware breakpoints by default. This means
1912 that the OpenOCD option @option{gdb_breakpoint_override} is not required when
1913 using a memory map. @xref{gdb_breakpoint_override}.
1914
1915 To view the configured memory map in gdb, use the gdb command @option{info mem}
1916 All other unasigned addresses within gdb are treated as RAM.
1917
1918 GDB 6.8 and higher set any memory area not in the memory map as inaccessible,
1919 this can be changed to the old behaviour by using the following gdb command.
1920 @smallexample
1921 set mem inaccessible-by-default off
1922 @end smallexample
1923
1924 If @option{gdb_flash_program enable} is also used, gdb will be able to
1925 program any flash memory using the vFlash interface.
1926
1927 gdb will look at the target memory map when a load command is given, if any
1928 areas to be programmed lie within the target flash area the vFlash packets
1929 will be used.
1930
1931 If the target needs configuring before gdb programming, a script can be executed.
1932 @smallexample
1933 target_script 0 gdb_program_config config.script
1934 @end smallexample
1935
1936 To verify any flash programming the gdb command @option{compare-sections}
1937 can be used.
1938
1939 @node TCL and OpenOCD
1940 @chapter TCL and OpenOCD
1941 @cindex TCL and OpenOCD
1942 OpenOCD embeds a TCL interpreter (see JIM) for command parsing and scripting
1943 support.
1944
1945 The TCL interpreter can be invoked from the interactive command line, files, and a network port.
1946
1947 The command and file interfaces are fairly straightforward, while the network
1948 port is geared toward intergration with external clients. A small example
1949 of an external TCL script that can connect to openocd is shown below.
1950
1951 @verbatim
1952 # Simple tcl client to connect to openocd
1953 puts "Use empty line to exit"
1954 set fo [socket 127.0.0.1 6666]
1955 puts -nonewline stdout "> "
1956 flush stdout
1957 while {[gets stdin line] >= 0} {
1958 if {$line eq {}} break
1959 puts $fo $line
1960 flush $fo
1961 gets $fo line
1962 puts $line
1963 puts -nonewline stdout "> "
1964 flush stdout
1965 }
1966 close $fo
1967 @end verbatim
1968
1969 This script can easily be modified to front various GUIs or be a sub
1970 component of a larger framework for control and interaction.
1971
1972
1973 @node TCL scripting API
1974 @chapter TCL scripting API
1975 @cindex TCL scripting API
1976 API rules
1977
1978 The commands are stateless. E.g. the telnet command line has a concept
1979 of currently active target, the Tcl API proc's take this sort of state
1980 information as an argument to each proc.
1981
1982 There are three main types of return values: single value, name value
1983 pair list and lists.
1984
1985 Name value pair. The proc 'foo' below returns a name/value pair
1986 list.
1987
1988 @verbatim
1989
1990 > set foo(me) Duane
1991 > set foo(you) Oyvind
1992 > set foo(mouse) Micky
1993 > set foo(duck) Donald
1994
1995 If one does this:
1996
1997 > set foo
1998
1999 The result is:
2000
2001 me Duane you Oyvind mouse Micky duck Donald
2002
2003 Thus, to get the names of the associative array is easy:
2004
2005 foreach { name value } [set foo] {
2006 puts "Name: $name, Value: $value"
2007 }
2008 @end verbatim
2009
2010 Lists returned must be relatively small. Otherwise a range
2011 should be passed in to the proc in question.
2012
2013 Low level commands are prefixed with "openocd_", e.g. openocd_flash_banks
2014 is the low level API upon which "flash banks" is implemented.
2015
2016 @itemize @bullet
2017 @item @b{ocd_mem2array} <@var{varname}> <@var{width}> <@var{addr}> <@var{nelems}>
2018
2019 Read memory and return as a TCL array for script processing
2020 @item @b{ocd_array2mem} <@var{varname}> <@var{width}> <@var{addr}> <@var{nelems}>
2021
2022 Convert a TCL array to memory locations and write the values
2023 @item @b{ocd_flash_banks} <@var{driver}> <@var{base}> <@var{size}> <@var{chip_width}> <@var{bus_width}> <@var{target}> [@option{driver options} ...]
2024
2025 Return information about the flash banks
2026 @end itemize
2027
2028 OpenOCD commands can consist of two words, e.g. "flash banks". The
2029 startup.tcl "unknown" proc will translate this into a tcl proc
2030 called "flash_banks".
2031
2032
2033 @node Upgrading
2034 @chapter Deprecated/Removed Commands
2035 @cindex Deprecated/Removed Commands
2036 Certain OpenOCD commands have been deprecated/removed during the various revisions.
2037
2038 @itemize @bullet
2039 @item @b{load_binary}
2040 @cindex load_binary
2041 @*use @option{load_image} command with same args. @xref{load_image}.
2042 @item @b{target}
2043 @cindex target
2044 @*@option{target} no longer take the reset_init, reset_run, run_and_halt, run_and_init. The @option{reset} command
2045 always does a @option{reset run} when passed no arguments.
2046 @item @b{dump_binary}
2047 @cindex dump_binary
2048 @*use @option{dump_image} command with same args. @xref{dump_image}.
2049 @item @b{flash erase}
2050 @cindex flash erase
2051 @*use @option{flash erase_sector} command with same args. @xref{flash erase_sector}.
2052 @item @b{flash write}
2053 @cindex flash write
2054 @*use @option{flash write_bank} command with same args. @xref{flash write_bank}.
2055 @item @b{flash write_binary}
2056 @cindex flash write_binary
2057 @*use @option{flash write_bank} command with same args. @xref{flash write_bank}.
2058 @item @b{arm7_9 fast_writes}
2059 @cindex arm7_9 fast_writes
2060 @*use @option{arm7_9 fast_memory_access} command with same args. @xref{arm7_9 fast_memory_access}.
2061 @item @b{flash auto_erase}
2062 @cindex flash auto_erase
2063 @*use @option{flash write_image} command passing @option{erase} as the first parameter. @xref{flash write_image}.
2064 @item @b{daemon_startup}
2065 @cindex daemon_startup
2066 @*this config option has been removed, simply adding @option{init} and @option{reset halt} to
2067 the end of your config script will give the same behaviour as using @option{daemon_startup reset}
2068 and @option{target cortex_m3 little reset_halt 0}.
2069 @item @b{arm7_9 sw_bkpts}
2070 @cindex arm7_9 sw_bkpts
2071 @*On by default. See also @option{gdb_breakpoint_override}. @xref{gdb_breakpoint_override}.
2072 @item @b{arm7_9 force_hw_bkpts}
2073 @cindex arm7_9 force_hw_bkpts
2074 @*Use @option{gdb_breakpoint_override} instead. Note that GDB will use hardware breakpoints
2075 for flash if the gdb memory map has been set up(default when flash is declared in
2076 target configuration). @xref{gdb_breakpoint_override}.
2077 @item @b{run_and_halt_time}
2078 @cindex run_and_halt_time
2079 @*This command has been removed for simpler reset behaviour, it can be simulated with the
2080 following commands:
2081 @smallexample
2082 reset run
2083 sleep 100
2084 halt
2085 @end smallexample
2086 @end itemize
2087
2088 @node FAQ
2089 @chapter FAQ
2090 @cindex faq
2091 @enumerate
2092 @item OpenOCD complains about a missing cygwin1.dll.
2093
2094 Make sure you have Cygwin installed, or at least a version of OpenOCD that
2095 claims to come with all the necessary dlls. When using Cygwin, try launching
2096 OpenOCD from the Cygwin shell.
2097
2098 @item I'm trying to set a breakpoint using GDB (or a frontend like Insight or
2099 Eclipse), but OpenOCD complains that "Info: arm7_9_common.c:213
2100 arm7_9_add_breakpoint(): sw breakpoint requested, but software breakpoints not enabled".
2101
2102 GDB issues software breakpoints when a normal breakpoint is requested, or to implement
2103 source-line single-stepping. On ARMv4T systems, like ARM7TDMI, ARM720t or ARM920t,
2104 software breakpoints consume one of the two available hardware breakpoints.
2105
2106 @item When erasing or writing LPC2000 on-chip flash, the operation fails sometimes
2107 and works sometimes fine.
2108
2109 Make sure the core frequency specified in the @option{flash lpc2000} line matches the
2110 clock at the time you're programming the flash. If you've specified the crystal's
2111 frequency, make sure the PLL is disabled, if you've specified the full core speed
2112 (e.g. 60MHz), make sure the PLL is enabled.
2113
2114 @item When debugging using an Amontec Chameleon in its JTAG Accelerator configuration,
2115 I keep getting "Error: amt_jtagaccel.c:184 amt_wait_scan_busy(): amt_jtagaccel timed
2116 out while waiting for end of scan, rtck was disabled".
2117
2118 Make sure your PC's parallel port operates in EPP mode. You might have to try several
2119 settings in your PC BIOS (ECP, EPP, and different versions of those).
2120
2121 @item When debugging with OpenOCD and GDB (plain GDB, Insight, or Eclipse),
2122 I get lots of "Error: arm7_9_common.c:1771 arm7_9_read_memory():
2123 memory read caused data abort".
2124
2125 The errors are non-fatal, and are the result of GDB trying to trace stack frames
2126 beyond the last valid frame. It might be possible to prevent this by setting up
2127 a proper "initial" stack frame, if you happen to know what exactly has to
2128 be done, feel free to add this here.
2129
2130 @item I get the following message in the OpenOCD console (or log file):
2131 "Warning: arm7_9_common.c:679 arm7_9_assert_reset(): srst resets test logic, too".
2132
2133 This warning doesn't indicate any serious problem, as long as you don't want to
2134 debug your core right out of reset. Your .cfg file specified @option{jtag_reset
2135 trst_and_srst srst_pulls_trst} to tell OpenOCD that either your board,
2136 your debugger or your target uC (e.g. LPC2000) can't assert the two reset signals
2137 independently. With this setup, it's not possible to halt the core right out of
2138 reset, everything else should work fine.
2139
2140 @item When using OpenOCD in conjunction with Amontec JTAGkey and the Yagarto
2141 Toolchain (Eclipse, arm-elf-gcc, arm-elf-gdb), the debugging seems to be
2142 unstable. When single-stepping over large blocks of code, GDB and OpenOCD
2143 quit with an error message. Is there a stability issue with OpenOCD?
2144
2145 No, this is not a stability issue concerning OpenOCD. Most users have solved
2146 this issue by simply using a self-powered USB hub, which they connect their
2147 Amontec JTAGkey to. Apparently, some computers do not provide a USB power
2148 supply stable enough for the Amontec JTAGkey to be operated.
2149
2150 @item When using the Amontec JTAGkey, sometimes OpenOCD crashes with the
2151 following error messages: "Error: ft2232.c:201 ft2232_read(): FT_Read returned:
2152 4" and "Error: ft2232.c:365 ft2232_send_and_recv(): couldn't read from FT2232".
2153 What does that mean and what might be the reason for this?
2154
2155 First of all, the reason might be the USB power supply. Try using a self-powered
2156 hub instead of a direct connection to your computer. Secondly, the error code 4
2157 corresponds to an FT_IO_ERROR, which means that the driver for the FTDI USB
2158 chip ran into some sort of error - this points us to a USB problem.
2159
2160 @item When using the Amontec JTAGkey, sometimes OpenOCD crashes with the following
2161 error message: "Error: gdb_server.c:101 gdb_get_char(): read: 10054".
2162 What does that mean and what might be the reason for this?
2163
2164 Error code 10054 corresponds to WSAECONNRESET, which means that the debugger (GDB)
2165 has closed the connection to OpenOCD. This might be a GDB issue.
2166
2167 @item In the configuration file in the section where flash device configurations
2168 are described, there is a parameter for specifying the clock frequency for
2169 LPC2000 internal flash devices (e.g.
2170 @option{flash bank lpc2000 0x0 0x40000 0 0 0 lpc2000_v1 14746 calc_checksum}),
2171 which must be specified in kilohertz. However, I do have a quartz crystal of a
2172 frequency that contains fractions of kilohertz (e.g. 14,745,600 Hz, i.e. 14,745.600 kHz).
2173 Is it possible to specify real numbers for the clock frequency?
2174
2175 No. The clock frequency specified here must be given as an integral number.
2176 However, this clock frequency is used by the In-Application-Programming (IAP)
2177 routines of the LPC2000 family only, which seems to be very tolerant concerning
2178 the given clock frequency, so a slight difference between the specified clock
2179 frequency and the actual clock frequency will not cause any trouble.
2180
2181 @item Do I have to keep a specific order for the commands in the configuration file?
2182
2183 Well, yes and no. Commands can be given in arbitrary order, yet the devices
2184 listed for the JTAG scan chain must be given in the right order (jtag_device),
2185 with the device closest to the TDO-Pin being listed first. In general,
2186 whenever objects of the same type exist which require an index number, then
2187 these objects must be given in the right order (jtag_devices, targets and flash
2188 banks - a target references a jtag_device and a flash bank references a target).
2189
2190 @item Sometimes my debugging session terminates with an error. When I look into the
2191 log file, I can see these error messages: Error: arm7_9_common.c:561
2192 arm7_9_execute_sys_speed(): timeout waiting for SYSCOMP
2193
2194 TODO.
2195
2196 @end enumerate
2197
2198 @include fdl.texi
2199
2200 @node Index
2201 @unnumbered Index
2202
2203 @printindex cp
2204
2205 @bye

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)