Problems flashing LPC2148 with ARM-USB-OCD and LPCUSB stack

I can flash simple programs with my ARM-USB-OCD, but when I try to flash a simple HID application with the LPCUSB stack it fails. If I use the Philips ISP program and flashes the .hex-file the HID application works. It also worked when I compiled it to be run with the debugger in RAM.

When I run debug after a ARM-USB-OCD flash it goes to the “UNDEF”-handler right after initialization.

Also if I first flash it with the ISP tool, then flashes it with a simple program with the ARM-USB-OCD (which works), then flashes the HID application with the ARM-USB-OCD again, the HID application also works. But if I then change a parameter en the HID application (i.e. VendorId in the descriptors), and re-flash with ARM-USB-OCD it fails again.

Any suggestions?

-Jon Helge

My config file:

#daemon configuration
telnet_port 4444
gdb_port 3333

#interface
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0003
jtag_speed 3
jtag_nsrst_delay 200
jtag_ntrst_delay 200


#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst

#jtag scan chain
#format L IRC IRCM IDCODE (Length, IR Capture, IR Capture Mask, IDCODE)
jtag_device 4 0x1 0xf 0xe

#target configuration
daemon_startup reset

#target  
#target arm7tdmi    
target arm7tdmi little run_and_init 0 arm7tdmi-s_r4
run_and_halt_time 0 30

# flash-options LPC2138
target_script 0 reset oocd_flash2138.script
working_area 0 0x40000000 0x4000 nobackup
# LPC2138 @ 12MHz / 0x7D000 from 500*1024 (not 512!)
flash bank lpc2000 0x0 0x7D000 0 0 lpc2000_v2 0 12000 calc_checksum

# For more information about the configuration files, take a look at:
# http://openfacts.berlios.de/index-en.phtml?title=Open+On-Chip+Debugger

The flash script

# 
# The following commands will be executed on
# reset (because of run_and_init in the config-file)
# - wait for target halt
# - erase memory
# - flash content of file main.bin into target-memory
# - shutdown openocd
#
# created by Martin Thomas 
# http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects
# based on information from Dominic Rath 
#

arm7_9 dcc_downloads enable
wait_halt
sleep 10
poll
flash probe 0
# erase first bank only:
flash erase 0 0 0
# erase all banks:
#flash erase 0 0 26
flash write 0 main.bin 0x0
reset run
sleep 10
shutdown

Hello,

which version of the OpenOCD did you use? Does your HID application make use of interrupts?

Please send a log (run with -d -l ) to Dominic Rath gmx de.

Regards,

Dominic

If your code is larger than 4K the you must erase more than sector 0 before programming.

For 8K

erase first bank only:

flash erase 0 0 0

#CHANGE TO

flash erase 0 0 1

Probably using the Philips ISP loader with a small program erases the remaing sectors but only writes to the first sector, thus preparing flash for programming your larger program.

Regards,

Magnus

mlu:
If your code is larger than 4K the you must erase more than sector 0 before programming.

For 8K

erase first bank only:

flash erase 0 0 0

#CHANGE TO

flash erase 0 0 1

Probably using the Philips ISP loader with a small program erases the remaing sectors but only writes to the first sector, thus preparing flash for programming your larger program.

Regards,

Magnus

Thanks Magnus, it worked!

Darn !

I’ve been fighting with my JTAG pod for a few hours with the same problem.

In my defense, the OpenOCD Quick Reference Card

http://www.fh-augsburg.de/~hhoegl/proj/ … ickref.pdf

states:

"flash erase Erase

blocks first to last of flash bank."

which is WRONG !

The official command from here

http://openfacts.berlios.de/index-en.ph … D_commands

has

"flash erase

Erase sectors at bank , starting at sector up to and including . Sector numbering starts at 0. Depending on the flash type, erasing might require the protection to be disabled first (e.g. Intel Advanced Bootblock flash using the CFI driver)."

Uggghhh.

I’ll email the author and ask him to correct the sheet before it catches anyone else.