SparkFun Forums 

Where electronics enthusiasts find answers.

Everything ARM and LPC
By jean-pierre sainfeld
#118417
I am trying a very simple thing.
In OPENOCD telnet cession I do
reset halt
mww 0 5 1

I get the message

memory write caused data abort (address: 0x00000000, size: 0x4, count: 0x1)
Command handler execution failed
in procedure 'mww'

My configuration is listed bellow
any clue of what is wrong with this picture would be greatly appreciated :-)

Regards

Jean-Pierre Sainfeld



# openocd.cfg
# find more details about configuration at
# http://openfacts.berlios.de/index-en.ph ... figuration

source [ find ./interface-olimex.cfg]

source [ find ./chip-lpc3250.cfg ]

# Port on which to listen for incoming telnet connections
telnet_port 4444

#First port on which to listen for incoming GDB connections. The GDB port for the first target will be gdb_port, the second target will #listen on gdb_port + 1, and so on.
gdb_port 3333

set debug_level 3

source [ find ./target-lpc3250.cfg ]

# define the NAND flash devices
# The command is of the form
#
# nand device <name> <driver> <target> <[configparams...]>
#
# Declares a NAND device, which can be read and written to after it has been configured
# • name ... may be used to reference the NAND bank in most other NAND commands.
# A number is also available.
# • driver ... identifies the NAND controller driver associated with the NAND device being declared.
# • target ... names the target used when issuing commands to the NAND controller.
# • configparams ... controllers may support, or require, additional parameters.


nand device ournand lpc3250 0 13000

#
# This procedure is to meant to store a SE blob
# from a specified file to a specified block within
# a specified FLASH Bank
#
proc save_blob { bk_id fname blk } {
set offset [format %x [expr $blk * 16384]];
set blk_size 16384;
set size [file size $fname];
set nb_blk [ expr $size / $blk_size];
set round_up [ expr $size % $blk_size];
if { $round_up } {
incr nb_blk;
}
set erase_len [ format %x [expr $nb_blk * $blk_size]];

puts "$fname is $size bytes long";

puts "we will erase $nb_blk blocks - 0x$erase_len bytes";

puts "Storing $fname at block $blk \[0x$offset\] in NAND $bk_id";

puts "erasing $bk_id 0x$offset 0x$erase_len";
nand erase $bk_id 0x$offset 0x$erase_len;

puts "writing $fname at 0x$offset in NAND $bk_id";
nand write $bk_id $fname 0x$offset oob_raw;

puts "verifying $fname at 0x$offset from NAND $bk_id";
nand verify $bk_id $fname 0x$offset oob_raw;
puts "Done.";
}

proc nandbb { bk_id sb nb } {
set offset [format %x [expr $sb * 16384]];
set len [ format %x [expr $nb * 16384]];
puts "checking for bad blocks $bk_id 0x$offset 0x$len";
nand check_bad_blocks $bk_id 0x$offset 0x$len;
}

==============chip-lpc3250.cfg

# lpc3250 config

set _CHIPNAME lpc3250
set _ENDIAN little
set _CPUTAPID 0x17926f0f
set _SJCTAPID 0x1b900f0f

jtag newtap $_CHIPNAME sjc -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_SJCTAPID

jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm926ejs -endian little -chain-position $_TARGETNAME -work-area-phys 0x0B000000 -work-area-size 0xffffff -work-area-backup 0

proc power_restore {} { puts "Sensed power restore. No action." }
proc srst_deasserted {} { puts "Sensed nSRST deasserted. No action." }

======interface-olimex.cfg

#
# Olimex ARM-USB-TINY
#
# http://www.olimex.com/dev/arm-usb-tiny.html
#

interface ft2232

# ft2232_device_desc <description>
# The USB device description of the FTDI FT2232 device. If not specified, the FTDI default value is used. This setting is only valid if
# compiled with FTD2XX support.
ft2232_device_desc "Olimex OpenOCD JTAG TINY"

# ft2232_layout <name>
# The layout of the FT2232 GPIO signals used to control output-enables and reset signals
ft2232_layout olimex-jtag

# ft2232_vid_pid <vid> <pid>
# The vendor ID and product ID of the FTDI FT2232 device. If not specified, the FTDI default values are used
ft2232_vid_pid 0x15ba 0x0004

================target-lpc3250.cfg

#
# Olimex ARM-USB-TINY
#
# http://www.olimex.com/dev/arm-usb-tiny.html
#

interface ft2232

# ft2232_device_desc <description>
# The USB device description of the FTDI FT2232 device. If not specified, the FTDI default value is used. This setting is only valid if
# compiled with FTD2XX support.
ft2232_device_desc "Olimex OpenOCD JTAG TINY"

# ft2232_layout <name>
# The layout of the FT2232 GPIO signals used to control output-enables and reset signals
ft2232_layout olimex-jtag

# ft2232_vid_pid <vid> <pid>
# The vendor ID and product ID of the FTDI FT2232 device. If not specified, the FTDI default values are used
ft2232_vid_pid 0x15ba 0x0004

====
#118518
Well it seems that you can not write to that memory after executing reset halt

Something from the OpenOCD documentation (user guide http://openocd.berlios.de/web/?page_id=54 )

Once OpenOCD has entered the run stage,a number of commands become available. A
number of these relate to the debug targets you may have declared. For example, the mww
command will not be available until a target has been successfuly instantiated. If you want
to use those commands, you may need to force entry to the runstage.


And Olimex interface configuration is listed twice?! Or was it accidental copy/paste while you were writing the message?