openOCD Configuration
Nov 22, 2013Technology
###OpenOCD Device Scan Install and view the OpenOCD:
$ pacman -S openocd
[Trusty@XXXyyy debian_octopress]$ openocd -v
Open On-Chip Debugger 0.7.0 (2013-11-02-01:53)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Insert your openJTAG debug board, and view its connection:
[Trusty@XXXyyy debian_octopress]$ lsusb
Bus 001 Device 016: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)
From the dmesg information:
[15767.673553] usb 1-1: new full-speed USB device number 11 using xhci_hcd
[15767.695990] usb 1-1: Device not responding to set address.
[15767.938262] usb 1-1: Device not responding to set address.
[15768.140725] usb 1-1: device not accepting address 11, error -71
[15768.421057] usb 1-1: new full-speed USB device number 13 using xhci_hcd
[15769.015800] usbcore: registered new interface driver usbserial
[15769.016012] usbcore: registered new interface driver usbserial_generic
[15769.016075] usbserial: USB Serial support registered for generic
[15769.020028] usbcore: registered new interface driver ftdi_sio
[15769.020050] usbserial: USB Serial support registered for FTDI USB Serial Device
[15769.020458] usb 1-1: Ignoring serial port reserved for JTAG
[15769.020499] ftdi_sio 1-1:1.1: FTDI USB Serial Device converter detected
[15769.020544] usb 1-1: Detected FT2232C
[15769.020548] usb 1-1: Number of endpoints 2
[15769.020550] usb 1-1: Endpoint 1 MaxPacketSize 64
[15769.020553] usb 1-1: Endpoint 2 MaxPacketSize 64
[15769.020555] usb 1-1: Setting MaxPacketSize 64
[15769.026647] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
[15975.012193] usb 1-1: USB disconnect, device number 13
[15975.012449] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[15975.012465] ftdi_sio 1-1:1.1: device disconnected
[15975.270658] usb 1-1: new full-speed USB device number 14 using xhci_hcd
[15975.355869] usb 1-1: Ignoring serial port reserved for JTAG
[15975.366867] ftdi_sio 1-1:1.1: FTDI USB Serial Device converter detected
[15975.366902] usb 1-1: Detected FT2232C
[15975.366904] usb 1-1: Number of endpoints 2
[15975.366906] usb 1-1: Endpoint 1 MaxPacketSize 64
[15975.366908] usb 1-1: Endpoint 2 MaxPacketSize 64
[15975.366909] usb 1-1: Setting MaxPacketSize 64
[15975.371933] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
[16608.914153] usb 1-1: USB disconnect, device number 14
[16608.914371] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[16608.914402] ftdi_sio 1-1:1.1: device disconnected
[16609.394763] usb 1-1: new full-speed USB device number 15 using xhci_hcd
[16609.395097] usb 1-1: Device not responding to set address.
[16609.598734] usb 1-1: Device not responding to set address.
[16609.801899] usb 1-1: device not accepting address 15, error -71
[16609.962045] usb 1-1: new full-speed USB device number 16 using xhci_hcd
[16609.962371] usb 1-1: Device not responding to set address.
[16610.250376] usb 1-1: Ignoring serial port reserved for JTAG
[16610.261380] ftdi_sio 1-1:1.1: FTDI USB Serial Device converter detected
[16610.261428] usb 1-1: Detected FT2232C
[16610.261431] usb 1-1: Number of endpoints 2
[16610.261433] usb 1-1: Endpoint 1 MaxPacketSize 64
[16610.261435] usb 1-1: Endpoint 2 MaxPacketSize 64
[16610.261437] usb 1-1: Setting MaxPacketSize 64
[16610.266397] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
From the above information we could know, Now we have a new Serial port named ttyUSB0, and also a FT2232C debug port. Currently we don’t use Serial Port, FT2232 is all we want to configure.
###OpenOCD Configuration
We have to make a cfg file for OpenOCD to use. There are some pre-defined configuration files for us to refer under the directory of “/usr/share/openocd/scripts/", since we know the debug board information and we know exactly the development board info, we can easily write our own OpenOCD startup scripts.
Get the interface definition via:
[Trusty@XXXyyy interface]$ pwd
/usr/share/openocd/scripts/interface
[Trusty@XXXyyy interface]$ grep "1457" ./ -r
./neodb.cfg:ft2232_vid_pid 0x1457 0x5118
./ftdi/neodb.cfg:ftdi_vid_pid 0x1457 0x5118
So we directly copy the neodb.cfg to our openocd.cfg under our home directory. But the usb name of our OpenOCD is changed,
ft2232_device_desc "USB<=>JTAG&RS232
The definition is taken from the output of “lsusb -v -d 1457:5118”
We also want to define the port for telnet and gdb connection
#########daemon configuration####
telnet_port 4444
gdb_port 3333
The Target configuration is taken from the /usr/share/openocd/scripts/target/stm32f1x.cfg, which is the definition of the stm32f1x. Copy them directly to your own config file.
Finally your configuration file should be listed as:
#########daemon configuration####
telnet_port 4444
gdb_port 3333
########Interface Info###########
################################################
# Since our board takes the same vid_pid
# We directly use openmoko's definition.
################################################
#
# Openmoko USB JTAG/RS232 adapter
#
# http://wiki.openmoko.org/wiki/Debug_Board_v3
#
interface ft2232
ft2232_device_desc "USB<=>JTAG&RS232"
ft2232_layout jtagkey
ft2232_vid_pid 0x1457 0x5118
########Board Info###########
# Adjust Work-area size (RAM size) according to MCU in use:
#STM32F103VC --> 48KB
#STM32F103RB --> 20KB
#set WORKAREASIZE 0x5000
# STM32F103RE --> 64KB
# set WORKAREASIZE 0x10000
# reset_config parameter (see OpenOCD manual):
# none --> srst and trst of MCU not connected to JTAG device
# srst_only --> only srst of MCU connected to JTAG device
# trst_only --> only trst of MCU connected to JTAG device
# srst_and_trst --> srst and trst of MCU connected to JTAG device
# default setting: "reset_config none" will produce a single reset via SYSRESETREQ (JTAG commands) at reset pin of MCU
#reset_config none
#script for stm32f1x family
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32f1x
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
# Work-area is a space in RAM used for flash programming
# By default use 16kB
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x4000
}
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
adapter_khz 1000
adapter_nsrst_delay 100
jtag_ntrst_delay 100
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
# See STM Document RM0008
# Section 26.6.3
set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
if { [info exists BSTAPID] } {
# FIXME this never gets used to override defaults...
set _BSTAPID $BSTAPID
} else {
# See STM Document RM0008
# Section 29.6.2
# Low density devices, Rev A
set _BSTAPID1 0x06412041
# Medium density devices, Rev A
set _BSTAPID2 0x06410041
# Medium density devices, Rev B and Rev Z
set _BSTAPID3 0x16410041
set _BSTAPID4 0x06420041
# High density devices, Rev A
set _BSTAPID5 0x06414041
# Connectivity line devices, Rev A and Rev Z
set _BSTAPID6 0x06418041
# XL line devices, Rev A
set _BSTAPID7 0x06430041
# VL line devices, Rev A and Z In medium-density and high-density value line devices
set _BSTAPID8 0x06420041
# VL line devices, Rev A
set _BSTAPID9 0x06428041
}
jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 \
-expected-id $_BSTAPID2 -expected-id $_BSTAPID3 \
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5 \
-expected-id $_BSTAPID6 -expected-id $_BSTAPID7 \
-expected-id $_BSTAPID8 -expected-id $_BSTAPID9
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
# flash size will be probed
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME
# if srst is not fitted use SYSRESETREQ to
# perform a soft reset
cortex_m reset_config sysresetreq
[root@XXXyyy target]# openocd -f /media/y/embedded/stm32/dev/openocd.cfg -f ./stm32f1x.cfg