Forum: ARM programming with GCC/GNU tools openocd target program issue

von new k. (Company: hobby) (zb34111)

Rate this post
0 useful
not useful
Hi Folks,

I had a problem download binary file to target using openocd-usb-tiny-h 
tool. Here is my tool configuration including:
DEMO_at91sam7_blink_ram.cmd for link.

It report successful  programming. then I start the demon with
openocd.exe -s c:/gccfd/openocd/share/openocd/scripts -f 
interface/olimex-arm-usb-tiny-h.cfg   -f 
C:\gccfd\projects\sam9-l9260-blink\project.cfg -d

but when I use command "mdw 0x0 256" to check memory content at address 
0x0, I found the content does not match the binary file main.bin display 
in ultraedit.  I don't know what's wrong with the download, is there 
anything wrong in my configuratoin file or command line.  Thank you for 
your help.

Best regards.

Following is the details of my configuratoin files,

olimex-arm-usb-tiny-h.cfg  is

interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H"
ft2232_layout olimex-jtag
ft2232_vid_pid 0x15ba 0x002a

makefile is

NAME   = demo_at91sam7_blink_ram
# Tool suffix when cross-compiling
CROSS_COMPILE = arm-none-eabi-
# variables
CC      = $(CROSS_COMPILE)gcc
LD      = $(CROSS_COMPILE)ld -v
AR      = $(CROSS_COMPILE)ar
AS      = $(CROSS_COMPILE)as
CP      = $(CROSS_COMPILE)objcopy
OD    = $(CROSS_COMPILE)objdump
CFLAGS  = -I./ -c -fno-common -O0 -g
AFLAGS  = -ahls -mapcs-32 -o crt.o
LFLAGS  =  -Map main.map -Tdemo_at91sam7_blink_ram.cmd
CPFLAGS = --output-target=binary
ODFLAGS  = -x --syms
OBJECTS = crt.o  main.o timerisr.o timersetup.o isrsupport.o 
lowlevelinit.o blinker.o
OPENOCD = C:\gccfd\openocd\bin\openocd.exe
OPENOCD_CFG = C:\gccfd\projects\my1st\AT91SAM7S256-PROGRAM.CFG
# make target called by Eclipse (Project -> Clean ...)
  -rm $(OBJECTS) crt.lst main.lst main.out main.bin main.hex main.map 
# program target called  by eclipse (project -> program)
program: main.bin
  @echo  "Flash Programming with OpenOCD..."
  @echo  "Flash Programming Finished"
#make target called by Eclipse  (Project -> Build Project)
all:  main.out
  @ echo "...copying"
  $(CP) $(CPFLAGS) main.out main.bin
  $(OD) $(ODFLAGS) main.out > main.dmp
main.out: $(OBJECTS) demo_at91sam7_blink_ram.cmd
  @ echo "..linking"
  $(LD) $(LFLAGS) -o main.out $(OBJECTS) libc.a  libm.a libgcc.a
crt.o: crt.s
  @ echo ".assembling"
  $(AS) $(AFLAGS) crt.s > crt.lst
main.o: main.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) main.c
timerisr.o: timerisr.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) timerisr.c
lowlevelinit.o: lowlevelinit.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) lowlevelinit.c
timersetup.o: timersetup.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) timersetup.c
isrsupport.o: isrsupport.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) isrsupport.c
blinker.o: blinker.c
  @ echo ".compiling"
  $(CC) $(CFLAGS) blinker.c


jtag_rclk 3
reset_config srst_only srst_pulls_trst
# jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x3 -irmask 0x3 
-expected-id $_CPUTAPID
jtag newtap at91sam7s256 cpu -irlen 4 -ircapture 0x1 -irmask 0xf 
-expected-id 0x0
set _TARGETNAME at91sam7s256.cpu
target create $_TARGETNAME arm7tdmi -endian little -chain-position 
$_TARGETNAME -variant arm7tdmi
$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x00200000 
-work-area-size 0x4000 -work-area-backup 0
$_TARGETNAME configure -event reset-init {
        # RSTC_CR : Reset peripherals
        mww 0xfffffd00 0xa5000004
        # disable watchdog
  mww 0xfffffd44 0x00008000
  # enable user reset
  mww 0xfffffd08 0xa5000001
  # CKGR_MOR : enable the main oscillator
  mww 0xfffffc20 0x00000601
  sleep 10
  # CKGR_PLLR: 96.1097 MHz
  mww 0xfffffc2c 0x00481c0e
  sleep 10
  # PMC_MCKR : MCK = PLL / 2 ~= 48 MHz
  mww 0xfffffc30 0x00000007
  sleep 10
  # MC_FMR: flash mode (FWS=1,FMCN=73)
  mww 0xffffff60 0x00490100
  sleep 100
reset halt
script script.ocd

Script.ocd is

armv4_5 core_state arm
mww 0xffffff00 0x00000001
mww 0xffffff60 0x00320100
mww 0xfffffd44 0xa0008000
mww 0xfffffc20 0xa0000601
wait_halt 100
mww 0xfffffc2c 0x00480a0e
wait_halt 200
mww 0xfffffc30 0x7
wait_halt 100
mww 0xfffffd08 0xa5000401
wait_halt 100
load_image main.bin 0x0 bin
reset halt

link file DEMO_at91sam7_blink_ram.cmd is


/* specify the AT91SAM7S256 memory areas  */
flash  : ORIGIN = 0,          LENGTH = 256K    /* FLASH EPROM    */
/*  ram    : ORIGIN = 0x00200000, LENGTH = 64K  */    /* static RAM area 
ram    : ORIGIN = 0x0,      LENGTH = 64K      /* static RAM area  */

/* define a global symbol _stack_end  (see analysis in annotation above) 
_stack_end = 0xFFFC;

/* now define the output sections  */
  . = 0;                /* set location counter to address zero  */

  .text :                /* collect all sections that should go into 
FLASH after startup  */
    *(.text)            /* all .text sections (code)  */
    *(.rodata)            /* all .rodata sections (constants, strings, 
etc.)  */
    *(.rodata*)            /* all .rodata* sections (constants, strings, 
etc.)  */
    *(.glue_7)            /* all .glue_7 sections  (no idea what these 
are) */
    *(.glue_7t)            /* all .glue_7t sections (no idea what these 
are) */
    _etext = .;            /* define a global symbol _etext just after 
the last code byte */
  } >ram                      /* put all the above into RAM */
/*  } >flash    */
  .data :                /* collect all initialized .data sections that 
go into RAM  */
    _data = .;            /* create a global symbol marking the start of 
the .data section  */
    *(.data)            /* all .data sections  */
    _edata = .;            /* define a global symbol marking the end of 
the .data section  */
  } >ram                    /* put all the above into RAM */

  .bss :                /* collect all uninitialized .bss sections that 
go into RAM  */
    _bss_start = .;          /* define a global symbol marking the start 
of the .bss section */
    *(.bss)              /* all .bss sections  */
  } >ram                /* put all the above in RAM (it will be cleared 
in the startup code */

  . = ALIGN(4);            /* advance location counter to the next 
32-bit boundary */
  _bss_end = . ;            /* define a global symbol marking the end of 
the .bss section */
  _end = .;              /* define a global symbol marking the end of 
application RAM */

After that I use

von M. G. (Company: N/A) (gam01hr)

Rate this post
0 useful
not useful
Check your load script functionality step by step manually.
I used "arm-none-eabi-gdb" from command line to connect to the openOCD 
and typed each command separately. You can also watch/modify openOCD 
commands/responses by "telnet localhost 4444" command.
For target chip STM32F103, for me works:
target remote localhost:3333
monitor soft_reset_halt
monitor soft_reset_halt
monitor soft_reset_halt
monitor reset halt
monitor soft_reset_halt
break main


Entering an e-mail address is optional. If you want to receive reply notifications by e-mail, please log in.

Rules — please read before posting

  • Post long source code as attachment, not in the text
  • Posting advertisements is forbidden.

Formatting options

  • [c]C code[/c]
  • [avrasm]AVR assembler code[/avrasm]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]

Bild automatisch verkleinern, falls nötig
Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.