From PaparazziUAV
Jump to: navigation, search


Ubuntu/Debian packages

openocd 0.5 is a recommendation of the paparazzi-dev package, install it if not already done so. For older distributions (Debian squeeze, Ubunutu Lucid, Maverick and Natty) backported packages are available in the ppa:paparazzi-uav/ppa. See Installation. The latest paparazzi-arm-multilib packages also already include gdb for arm.

from source


The low level interfacing is done by libftdi. The package libftdi-dev should already have been installed as a dependency of paprazzi-dev.

As an alternative you can get it from although this is outdated! It is possible to use a closed source version from FTDI, too.

tar xvfz libftdi-0.10.tar.gz
cd libftdi-0.10
make install


Get the OpenOCD software Make sure you have automake and autoconf installed.

git clone git://
cd openocd
./configure --enable-ft2232_libftdi
make install

For some debian distributions you might have to add '/usr/local/lib' to /etc/ and call


JTAG Debug Configuration


GDB needs to exactly know the target architecture and OpenOCD currently does not automatically hand GDB all the needed details. You will need a xml file with the target description, save it and load it in your .gdbinit:

 set tdesc filename ~/path/to/gdb_cortex_m3_target.xml

For lisa/m boards file lisa-m.cfg should look like:

# the Lost Illusions Serendipitous Autopilot
# Work-area size (RAM size) = 64kB for STM32F103RB device
source [find target/stm32f1x.cfg]


Generate an OpenOCD config - this one worked, might need some polishing

#daemon configuration
telnet_port 4444
gdb_port 3333

interface ft2232
ft2232_layout "jtagkey"
ft2232_vid_pid 0x0403 0xcff8
jtag_speed 2

# reset_config <signals> [combination] [trst_type] [srst_type]
reset_config trst_and_srst

#jtag scan chain
jtag_device 4 0x1 0xf 0xe
jtag_nsrst_delay 333
jtag_ntrst_delay 333

#target configuration, what to do on a target reset
target arm7tdmi little run_and_halt 0 arm7tdmi-s_r4
run_and_halt_time 0 30
daemon_startup reset
#target_script 0 reset openocd.script
working_area 0 0x40000000 0x4000 nobackup
# flash bank lpc2000 <base> <size> 0 0 <variant> <target#> <clock> ['calc_checksum']
# mthomas: LPC2138 @ 12MHz 0x7D000 from 500*1024 (not 512!)
flash bank lpc2000 0x0 0x7D000 0 0 lpc2000_v2 0 12000 calc_checksum

This .gdbinit should start gdb in the correct way for the lpc21xx:

#set directories $cdir:$cwd:../lcds16x2/
set can-use-hw-watchpoints 2
set complaints 33
set history save
set history size 333
set logging on
set output-radix 0x10
set step-mode on
set trust-readonly-sections on
set verbose on
set watchdog 15

target remote localhost:3333
monitor soft_reset_halt
# only for RAM: monitor arm7_9 sw_bkpts enable
monitor arm7_9 force_hw_bkpts enable
hbreak main

Read this using the LPC2148 examples: