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


von Florian (Gast)


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.
1
500 kHz
2
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Pa
3
rt: 0xba00, Version: 0x3)
4
Info : JTAG Tap/device matched
5
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Par
6
t: 0x6410, Version: 0x1)
7
Info : JTAG Tap/device matched
8
Info : accepting 'gdb' connection from 0
9
Warn : target was in unknown state when halt was requested
10
Warn : acknowledgment received, but no packet pending
11
Info : device id = 0x20036410
12
Info : flash size = 128kbytes
13
Info : JTAG tap: stm32.cpu tap/device found: 0x3ba00477 (Manufacturer: 0x23b, Pa
14
rt: 0xba00, Version: 0x3)
15
Info : JTAG Tap/device matched
16
Info : JTAG tap: stm32.bs tap/device found: 0x16410041 (Manufacturer: 0x020, Par
17
t: 0x6410, Version: 0x1)
18
Info : JTAG Tap/device matched
19
target state: halted
20
target halted due to debug-request, current mode: Handler HardFault
21
xPSR: 0x01000003 pc: 0xfffffffe
22
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
23
Error: SWJ-DP STICKY ERROR
24
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
25
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
26
Error: SWJ-DP STICKY ERROR
27
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
28
Warn : Block write error address 0x0, wcount 0x10
29
Error: unexpected error -107

GDB sagt dabei bloß:
1
monitor sleep 500
2
load
3
Loading section .text, size 0x40 lma 0x0
4
Load failed
5
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:
1
target remote localhost:3333
2
monitor reset init
3
monitor sleep 500
4
load
5
break main
6
continue

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

Danke schonmal!

Gruß
Flo

von Gast (Gast)


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.

von KeinPlan (Gast)


Lesenswert?

versuch mal das:
1
monitor soft_reset_halt
2
set mem inaccessible-by-default off
3
load
4
compare-sections
5
monitor reset init

von Florian (Gast)


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:
1
source .gdbinit
2
monitor soft_reset_halt
3
"monitor" command not supported by this target.
4
set mem inaccessible-by-default off
5
load
6
You can't do that when your target is `exec'
7
compare-sections
8
command can only be used with remote target
9
monitor reset init
10
"monitor" command not supported by this target.
11
No registers.

Gruß
Flo

von KeinPlan (Gast)


Lesenswert?

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

Zeig mal deine openocd config Datei.

von Florian (Gast)


Lesenswert?

Ja, ich verwende arm-elf-gdb 6.8.50.

hier meine openOCD config:
1
#
2
# Olimex ARM-USB-OCD
3
#
4
# http://www.olimex.com/dev/arm-usb-ocd.html
5
#
6
7
# daemon configuration
8
telnet_port 4444
9
gdb_port 3333
10
tcl_port 6666 
11
12
interface ft2232
13
ft2232_device_desc "Olimex OpenOCD JTAG A"
14
ft2232_layout "olimex-jtag"
15
ft2232_vid_pid 0x15BA 0x0003
16
17
18
# target configuration
19
20
# script for stm32
21
22
if { [info exists CHIPNAME] } {  
23
   set  _CHIPNAME $CHIPNAME    
24
} else {   
25
   set  _CHIPNAME stm32
26
}
27
28
if { [info exists ENDIAN] } {  
29
   set  _ENDIAN $ENDIAN    
30
} else {   
31
   set  _ENDIAN little
32
}
33
34
# jtag speed
35
jtag_khz 500
36
37
jtag_nsrst_delay 100
38
jtag_ntrst_delay 100
39
40
#use combined on interfaces or targets that can't set TRST/SRST separately
41
reset_config trst_and_srst
42
43
#jtag scan chain
44
if { [info exists CPUTAPID ] } {
45
   set _CPUTAPID $CPUTAPID
46
} else {
47
  # See STM Document RM0008
48
  # Section 26.6.3
49
   set _CPUTAPID 0x3ba00477
50
}
51
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
52
53
if { [info exists BSTAPID ] } {
54
   set _BSTAPID $BSTAPID
55
} else {
56
  # See STM Document RM0008
57
  # Section 26.6.2
58
  # Low density devices, Rev A
59
  #set _BSTAPID 0x06412041
60
  # Medium density devices, Rev A
61
  #set _BSTAPID 0x06410041
62
  # Medium density devices, Rev B and Rev Z
63
  #set _BSTAPID 0x16410041
64
  # High density devices, Rev A
65
  
66
  # modified:
67
  set _BSTAPID 0x16410041    
68
}   
69
jtag newtap $_CHIPNAME bs  -irlen 5 -ircapture 0x1 -irmask 0x1 -expected-id $_BSTAPID
70
71
set _TARGETNAME [format "%s.cpu" $_CHIPNAME]
72
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
73
74
$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size 16384 -work-area-backup 0
75
76
flash bank stm32x 0 0 0 0 0

von Jules (Gast)


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

von 900ss (900ss)


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_Eclipse_Installation

von Jules (Gast)


Lesenswert?

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

von 900ss (900ss)


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.

von Turbo J (Gast)


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:
1
flash bank $_FLASHNAME stm32x 0x08000000 0 0 0 $_TARGETNAME

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

von tom (Gast)


Lesenswert?

jepp,

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

viel erfolg, tom.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.