www.mikrocontroller.net

Forum: Compiler & IDEs STM32F103 mit Yagarto/Eclipse/OOCD


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi zusammen,

seit einiger Zeit versuche ich, einen STM32F103 (ARM CortexM3) mit 
Freeware Tools, genauer gesagt mit YaGATo(arm-elf-gcc) + OpenOCD + 
Eclipse.

Hat damit irgendjemand Erfahrung bzw. weiß, ob das so überhaupt ohne 
Weiteres möglich ist?

Mein Problem ist, dass OpenOCD beim Flashen Fehlermeldungen ausgibt, mit 
denen ich nicht so recht etwas anfangen kann. Leider habe ich von OOCD 
auch bisher nicht viel Ahnung.
500 kHz
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Pa
rt: 0xba00, Version: 0x3)
Info : JTAG Tap/device matched
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Par
t: 0x6410, Version: 0x1)
Info : JTAG Tap/device matched
Info : accepting 'gdb' connection from 0
Warn : target was in unknown state when halt was requested
Warn : acknowledgment received, but no packet pending
Info : device id = 0x20036410
Info : flash size = 128kbytes
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Pa
rt: 0xba00, Version: 0x3)
Info : JTAG Tap/device matched
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Par
t: 0x6410, Version: 0x1)
Info : JTAG Tap/device matched
target state: halted
target halted due to debug-request, current mode: Handler HardFault
xPSR: 0x01000003 pc: 0xfffffffe
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
Error: SWJ-DP STICKY ERROR
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
Error: SWJ-DP STICKY ERROR
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
Warn : Block write error address 0x0, wcount 0x10
Error: unexpected error -107

GDB sagt dabei bloß:
monitor sleep 500
load
Loading section .text, size 0x40 lma 0x0
Load failed
continue

Das OpenOCD Script habe ich einfach aus dem Interface- (Olimex 
ARM-USB-OCD) und dem STM32-Teil der vorgefertigten OpcenOCD Skriptstücke 
zusammenkopiert.

Mein GDB Init Code ist auch eher unspektakulär:
target remote localhost:3333
monitor reset init
monitor sleep 500
load
break main
continue

Sieht jemand auf Anhieb nen Fehler (wie gesagt, hab leider noch nicht so 
viel Ahnung von der Matiere)?

Danke schonmal!

Gruß
Flo

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klau bei Segger ;-)

Lad dir von segger.com eine embOS Trial Version runter also 
embOS_CM3_GNU, da bekommst du kostenlos ein Makefile und Script File. 
Das ist zwar dann für den J-Link aber das sollte ja zu machen sein.

Autor: KeinPlan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuch mal das:
monitor soft_reset_halt
set mem inaccessible-by-default off
load
compare-sections
monitor reset init

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten!

Mein makefile macht an sich keine Probleme. Ein korrektes (glaube ich 
zumindest) Linkerskript habe ich auch. Ich vermute das Problem eher im 
openOCD config file.

@KeinPlan: Habs mal ausprobiert. GDB hat dabei folgende Meldungen 
ausgespuckt:
source .gdbinit
monitor soft_reset_halt
"monitor" command not supported by this target.
set mem inaccessible-by-default off
load
You can't do that when your target is `exec'
compare-sections
command can only be used with remote target
monitor reset init
"monitor" command not supported by this target.
No registers.

Gruß
Flo

Autor: KeinPlan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwendest du schon arm-elf-gdb?
Bei mir funktioniert das o.g. ohne Probleme.

Zeig mal deine openocd config Datei.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich verwende arm-elf-gdb 6.8.50.

hier meine openOCD config:
#
# Olimex ARM-USB-OCD
#
# http://www.olimex.com/dev/arm-usb-ocd.html
#

# daemon configuration
telnet_port 4444
gdb_port 3333
tcl_port 6666 

interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG A"
ft2232_layout "olimex-jtag"
ft2232_vid_pid 0x15BA 0x0003


# target configuration

# script for stm32

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

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

# jtag speed
jtag_khz 500

jtag_nsrst_delay 100
jtag_ntrst_delay 100

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

#jtag scan chain
if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
  # See STM Document RM0008
  # Section 26.6.3
   set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

if { [info exists BSTAPID ] } {
   set _BSTAPID $BSTAPID
} else {
  # See STM Document RM0008
  # Section 26.6.2
  # Low density devices, Rev A
  #set _BSTAPID 0x06412041
  # Medium density devices, Rev A
  #set _BSTAPID 0x06410041
  # Medium density devices, Rev B and Rev Z
  #set _BSTAPID 0x16410041
  # High density devices, Rev A
  
  # modified:
  set _BSTAPID 0x16410041    
}   
jtag newtap $_CHIPNAME bs  -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID

set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME

$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 16384 -work-area-backup 0

flash bank stm32x 0 0 0 0 0



Autor: Jules (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

da das thread das ähnlichste ist was ich finde konnte, hier mein 
Anliegen:

Ich hab ein STM32-P107 Board von Olimex mit einem ARM-USB-TINY (Jtag 
adapter) den ich zwangsweise unter Eclpise programmieren muss. Habe 
alles vorschriftsmässig installiert (Yagarto+CDT+openOCD+Zylin) und nun 
hänge ich bei der "Debug configuration".

Und ich hab keine Ahnung welche commands dort einzutragen sind und ob 
und wie ich den Adapter noch configurieren muss. Bin andere Umgebungen 
gewohnt und Eclpise ist etwas zu unübersichtlich für mich. Habe schon 
diverse User manuals von openOCD gewälzt, wo die commnads alle drin 
stehen oder Seiten mit Beispielen gelesen, aber die benutzen immmer 
einen andern µc oder compiler oder so.
Kann mir jemand ne Anleitung geben wie ich mein kleines Programm endlich 
debuggen und auf das board laden kann???
Bin dankbar für jede Hilfe

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jules schrieb:
> da das thread das ähnlichste ist was ich finde konnte

So so.... ;-)

Das hier sollte dir weiter helfen:
http://www.mikrocontroller.net/articles/STM32
http://www.mikrocontroller.net/articles/STM32_Ecli...

Autor: Jules (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Hilfe, aber das hab ich alles schon gelesen und 
es hilft mir nicht wirklich.

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann dir dann noch den JLink von Segger empfehlen. Der kostet in der 
none commercial Version ca. 60€. Mit dem ist das #deutlich# einfacher. 
Da ist auch die notwendige Software dabei. OOCD brauchst du dann nicht.
Die Konfiguration von OOCD ist wirklich kein Kinderspiel. Aber 
vielleicht findest du hier noch Leute, die dir beim einrichten helfen.

Autor: Turbo J (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> flash bank stm32x 0 0 0 0 0

Das geht IMO nur, wenn der Flash auf Addresse 0 gemappt ist. Ich sehe in 
Deiner OpenOCD config nicht die nötigen Instruktionen für das 
entsprechende Register. Bei meinem LPC1768 mache ich das in dem 
reset-init Handler.

Sowohl in den STM-Datenblättern als auch in den OpenOCD configs die ich 
hier habe wird der Flash ab Adresse 0x08000000 angesprochen:
flash bank $_FLASHNAME stm32x 0x08000000 0 0 0 $_TARGETNAME

Das solltest Du dann aber in Deinem Linkerskript ebenfalls 
berücksichtgen.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jepp,

memory layout deiner applikation und open-ocd config sollten schon 
matchen (und idealerweise auch die bedürfnisse deines uC ;-).

viel erfolg, tom.

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.