mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LPC2138 OpenOCD flash bank


Autor: Thomas K. (tomthegeek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich probiere seit einiger Zeit meinen LPC2138 via OpenOCD und JTAG zu 
flashen. Bei meinem AT91SAM7X256 funktioniert es problemlos.

Folgendes Config-File:
#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
#flash bank lpc2000 0x0 0x7D000 0 0 lpc2000_v2 0 12000 calc_checksum

# NXP LPC2138 ARM7TDMI-S with 512kB Flash and 32kB SRAM, clocked with 14.7456MHz crystal

if { [info exists CHIPNAME] } {   
   set _CHIPNAME $CHIPNAME
} else {
   set _CHIPNAME lpc2138
}

if { [info exists ENDIAN] } {
   set _ENDIAN $ENDIAN
} else {
   set _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x4f1f0f0f
}

# LPC2000 -> SRST causes TRST
reset_config trst_and_srst srst_pulls_trst

# reset delays
jtag_nsrst_delay 100
jtag_ntrst_delay 100
jtag_khz 1000      # slow down jtag-connection to avoid errors

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

set _TARGETNAME [format "%s.cpu" $_CHIPNAME]

target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi-s_r4

# 32kB of internal SRAM


#$_TARGETNAME configure  -work-area-phys 0x40000000 -work-area-size 0x4000 -work-area-backup 0
$_TARGETNAME configure  -work-area-phys 0x00000000 -work-area-size 0x7FFFF -work-area-backup 0
# flash bank name driver base size chip width bus width target [driver options]
flash bank $_TARGETNAME lpc2000 0x0 0x7D000 0 0 0  lpc2000_v2 14745 calc_checksum



# 23.09.2010
arm7_9 dcc_downloads enable
arm7_9 fast_memory_access enable

init
reset halt
sleep 10

Bei der Initialisierung tauchen auch keine Fehler in der Konsole auf. 
Sobald ich jedoch via Eclipse das Teil flashen will bekomme ich 
folgenden Fehler:
Warn : memory write caused data abort (address: 0x00000000, size: 0x4, count: 0x6)

Könnt ihr mir irgendwie weiterhelfen?

Gruß Thomas

Autor: Thomas K. (tomthegeek)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe jetzt mal versucht das ganze mit Flash Magic hochzuladen, aber 
ich bekomme immer den Fehler, dass das Hex-File Ram-Locations im Bereich 
0x40000120 bis 0x400001FF nutzt.

Wenn ich mir die Info vom Hex-File ansehe steht da, dass es den Bereich 
von 0x00000000 bis 0x400033DF nutzt. das File ansich hat eine Größe von 
37,37kByte und es steht folgendes dabei:
1048588.97 Kbytes (including gaps)
209717.79% of an LPC2138


Den Chip konnte ich löschen.
hier noch das Linker-Skript falls das weiterhilft:
/***********************************************************************/
/*  ROM.ld:  Linker Script File                                        */
/***********************************************************************/
ENTRY(_boot)
STACK_SIZE = 0x400;

/* Memory Definitions */
MEMORY
{
  ROM (rx) : ORIGIN = 0x00000000, LENGTH = 512k
  RAM (rw) : ORIGIN = 0x40000000, LENGTH = 32k
}

/* Section Definitions */
SECTIONS
{
  /* first section is .text which is used for code */
   .text :
  {
  /* *crt0.o (.text) */           /* Startup code */
  KEEP(*(.init))             /* Startup code from .init-section */
  *(.text .text.*)           /* remaining code */
  *(.gnu.linkonce.t.*)
  *(.glue_7)
  *(.glue_7t)
  *(.gcc_except_table)
  *(.rodata)                 /* read-only data (constants) */
  *(.rodata*)
  *(.gnu.linkonce.r.*)
  } > RAM
  
  /***** old: 
  .text :
  {
    *crt0.o (.text)            
    *(.text)                   
    *(.rodata)                 
    *(.rodata*)
    *(.glue_7)
    *(.glue_7t)
  } > ROM 
  *****/

  . = ALIGN(4);
  
  /* .ctors .dtors are used for c++ constructors/destructors */
  /* added by Martin Thomas 4/2005 based on Anglia Design example */
  .ctors :
  {
    PROVIDE(__ctors_start__ = .);
    KEEP(*(SORT(.ctors.*)))
    KEEP(*(.ctors))
    PROVIDE(__ctors_end__ = .);
  } >RAM
  
  .dtors :
  {
    PROVIDE(__dtors_start__ = .); 
    KEEP(*(SORT(.dtors.*)))
    KEEP(*(.dtors))
    PROVIDE(__dtors_end__ = .);
  } >RAM
  
    . = ALIGN(4);
  /* mthomas - end */
   
  _etext = . ;
  PROVIDE (etext = .);

  /* .data section which is used for initialized data */
  .data : AT (_etext)
  {
    _data = .;
    *(.data)
  *(.data.*)
  *(.gnu.linkonce.d*)
  SORT(CONSTRUCTORS) /* mt 4/2005 */
  . = ALIGN(4);
  *(.fastrun) /* !!!! "RAM-Function" example */
  } > RAM
 
  . = ALIGN(4);
  _edata = . ;
  PROVIDE (edata = .);

  /* .bss section which is used for uninitialized data */
  .bss (NOLOAD) :
  {
    __bss_start = . ;
    __bss_start__ = . ;
    *(.bss)
  *(.gnu.linkonce.b*)
    *(COMMON)
    . = ALIGN(4);
  } > RAM

  . = ALIGN(4);
  __bss_end__ = . ;
  PROVIDE (__bss_end = .);

  .stack ALIGN(256) :
  {
    . += STACK_SIZE;
    PROVIDE (_stack = .);
  } > RAM

  _end = . ;
  PROVIDE (end = .);

  /* Stabs debugging sections.  */
  .stab          0 : { *(.stab) }
  .stabstr       0 : { *(.stabstr) }
  .stab.excl     0 : { *(.stab.excl) }
  .stab.exclstr  0 : { *(.stab.exclstr) }
  .stab.index    0 : { *(.stab.index) }
  .stab.indexstr 0 : { *(.stab.indexstr) }
  .comment       0 : { *(.comment) }
  /* DWARF debug sections.
     Symbols in the DWARF debugging sections are relative to the beginning
     of the section so we begin them at 0.  */
  /* DWARF 1 */
  .debug          0 : { *(.debug) }
  .line           0 : { *(.line) }
  /* GNU DWARF 1 extensions */
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
  .debug_sfnames  0 : { *(.debug_sfnames) }
  /* DWARF 1.1 and DWARF 2 */
  .debug_aranges  0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* DWARF 2 */
  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev   0 : { *(.debug_abbrev) }
  .debug_line     0 : { *(.debug_line) }
  .debug_frame    0 : { *(.debug_frame) }
  .debug_str      0 : { *(.debug_str) }
  .debug_loc      0 : { *(.debug_loc) }
  .debug_macinfo  0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 extensions */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames  0 : { *(.debug_varnames) }
}


Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.