www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7S256 und OpenOCD


Autor: ARM-Einsteiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich versuche momentan einen Einstieg in die ARM-Programmierung zu 
finden.
Angefangen hab ich mit der WinARM-Umgebung. Doch das Flashen des 
Controllers mittels Wiggler-Nachbau funktioniert noch nicht so ganz.
Der Compiler erzeugt problemlos die main.bin doch beim flashen 
"verrennt" sich OpenOCD irgendwo. Es werden lediglich folgende Zeilen 
angezeigt:
C:\Programme\openocd\bin\openocd-pp.exe -f at91sam7s_flash.cfg
Info:    openocd.c:86 main(): Open On-Chip Debugger (2007-04-16 19:30 CEST)
Warning: parport.c:372 parport_init(): No parport port specified, using default '0x378' (LPT1)

Anschließend hängt OpenOCD und erzeugt eine CPU-Auslastung von 100%
Im Makefile rufe ich OpenOCD wie folgt auf (lt. beschreibung des 
Tutorials auf dieser Seite):
# OpenOCD Flags
OPENOCDFLAGS = -f at91sam7s_flash.cfg

INSIGHT = arm-elf-insight
OPENOCD = C:\Programme\openocd\bin\openocd-pp.exe
KILLALL = killall

# Program the device.
program: $(TARGET).bin
ifeq ($(RUN_MODE),ROM_RUN)
   $(OPENOCD) $(OPENOCDFLAGS)
endif

debug: begin insight end

insight:
ifeq ($(RUN_MODE),RAM_RUN)
  $(OPENOCD) & $(INSIGHT) $(TARGET).elf -ex "target remote localhost:3333" -ex "monitor arm7_9 sw_bkpts enable" -ex "load"
  $(KILLALL) $(OPENOCD)
else
  $(OPENOCD) & $(INSIGHT) $(TARGET).elf -ex "target remote localhost:3333" -ex "monitor arm7_9 force_hw_bkpts enable"
  $(KILLALL) $(OPENOCD)
endif

at91sam7s_flash.cfg:
#daemon configuration
telnet_port 4444
gdb_port 3333
daemon_startup reset

#interface
interface parport
parport_port /dev/parport0
parport_cable wiggler
jtag_speed 0
#reset_config trst_and_srst|trst_only|srst_only srst_pulls_trst|trst_pulls_srst|combined
reset_config srst_only

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

#target configuration
#target <type> <endianness> <startup mode> <chainpos> <variant>
target arm7tdmi little run_and_init 0 
run_and_halt_time 0 30

#working_area 0 0x200000 0x4000 nobackup
flash bank at91sam7 0 0 0 0 0
target_script 0 reset at91sam7_flash.script

und noch das Script at91sam7_flash.script:
# 
# The following commands will be executed on
# reset (because of run_and_init in the config-file)
# - halt target
# - init ecr
# - 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 
#

halt
sleep 10

# Init - taken form the script openocd_at91sam7_ecr.script 
mww 0xfffffd44 0x00008000  # disable watchdog
mww 0xfffffd08 0xa5000001  # enable user reset
mww 0xfffffc20 0x00001001  # CKGR_MOR : enable the main oscillator
sleep 10
mww 0xfffffc2c 0x000A2A01   # CKGR_PLLR: 100.000 MHz
sleep 10
mww 0xfffffc30 0x0000000B  # PMC_MCKR : MCK = PLL / 4 = 25 MHz
sleep 10
mww 0xffffff60 0x003c0100  # MC_FMR: flash mode (FWS=1,FMCN=60)
# arm7_9 force_hw_bkpts enable  # program resides in flash

# AT91SAM7 flash command-"batch"
# adapted by Martin Thomas based on information from Dominic Rath - Thanks
arm7_9 dcc_downloads enable
sleep 10
poll
flash probe 0
flash write 0 main.bin 0x0
reset run
sleep 10
shutdown



Seltsam ist, dass ich mit OpenOCD anfangs auf den Chip zugreifen und so 
die Peripherie (USART ;) ) mittels Memory-Writes initialisieren konnte. 
(Das ist mit folgendem Configfile und debuggen mittels arm-elf-gdb und 
OpenOCD passiert)
#define our ports
telnet_port 4444
gdb_port 3333

#commands specific to the Amontec JTAGKey
interface parport
parport_port 0x378
parport_cable wiggler
jtag_speed 0
jtag_nsrst_delay 200
jtag_ntrst_delay 200

#reset_config <signals> [combination] [trst_type] [srst_type]
reset_config srst_only srst_pulls_trst

#jtag_device <IR length> <IR capture> <IR mask> <IDCODE instruction>
jtag_device 4 0x1 0xf 0xe

#daemon_startup <'attach'|'reset'>
daemon_startup reset

#target <type> <endianess> <reset_mode> <jtag#> [variant]
target arm7tdmi little run_and_init 0 arm7tdmi

#run_and_halt_time <target#> <time_in_ms>
run_and_halt_time 0 30


Anschließend konnte ich einmal in sagenhaften 29 secunden 13KB ins Flash 
schreiben und seitdem funktioniert nix mehr. Verbinden kann ich noch, 
aber 'halt'en des Cores scheitert. Mittels GDB kann ich überhaupt nicht 
mehr zu OpenOCD Verbinden und mittels Telnet funktioniert es nur 
teilweise (sämtliche Halt-Versuche scheitern im Timeout oder 'hängen' 
von OpenOCD.


Was kann ich tun, um aus dem Dilemma zu entkommen? Wie kann ich einfach 
und zuverlässig den Flash oder das RAM beschreiben?
Wie sehen eure Config-Files aus (zur Orientierung)?

Vielen Dank für Eure Hilfe

Autor: ARM-Einsteiger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Irgendwie isses seltsam... starte ich den Rechner neu, 
funktionierts genau einmal und danach nicht mehr. Es funktioniert einmal 
bis zum aufhängen, dann liegt OpenOCD flach. Ich hab auch alle Prozesse 
von der openocd-pp.exe gekillt, aber es hat nix gebracht. ich schätze 
mal, dass das ein Bug ist. Sonst scheint der Chip zu funktionieren.
Auch seltsam ist das Ergebnis des Downloads vom Chip. Ein Versuch war, 
dass ich die 256KB runterziehe aber er bricht bei etwa 52KB mit der 
Meldung "ungültiger Hex-wert 116" (in der Art) zu Telnet hin ab und 
Openocd gibt in sein Log bald 100 mal "ungültiges Zeichen: 0x??" und ?? 
war meist im ASCII-Bereich. Irgendwie bin ich jetz total verwirrt.

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.