Hallo Community.
Man stolpert ja nun immer oefter ueber die ARM-Controller und das
Interface wie Code auf diese programmiert/debuggt wird: Single Wire
Debug.
Kennt jemand von euch ein (gutes) Open Source Projekt fuer einen SWD
Programmer - moeglichst Selbstbau geeignet.
(Am schoensten waere, wenn ich mir hier schnell was mit einem AVR
zusammen zimmern koennte.)
Fuer die AVRs (ISP) gab es ja seiner Zeit den USBasp - ggf. gibt es
sowas auch fuer SWD?
MfG Stephan
Hallo
Antimedial schrieb:> OpenOCD?
Danke dir, das werde ich mir einmal ansehen.
greg schrieb:> Lohnt sich das? Für < 10 EUR gibt es das STM32F0Discovery.
Ich habe hier ein paar Samplechips die ich gern testen wuerde.
Gibt es ggf. noch mehr Optionen?
MfG
Stephan B. schrieb:> Hallo>> Antimedial schrieb:>> OpenOCD?>> Danke dir, das werde ich mir einmal ansehen.>> greg schrieb:>> Lohnt sich das? Für < 10 EUR gibt es das STM32F0Discovery.>> Ich habe hier ein paar Samplechips die ich gern testen wuerde.>>> Gibt es ggf. noch mehr Optionen?
Für 20 Euro einen reinen ST-Link kaufen. Der kann auch SWD. Aber es
stimmt schon, kauf lieber ein Eval Board, ist günstiger und hat auch
einen ST-Link drauf.
holger schrieb:> wiggler jtag
Das ist der steinalte Frickelport-Adapter. Wir haben mittlerweile 2014,
da sollte man sich so etwas nicht mehr antun müssen.
@Stephan
Was für einen µC hast Du überhaupt?
der ST-LINK geht nur mit den STM32 / STM8 µC von ST!
Ansonsten bei OpenOCD in der Doku nachlesen welche JTAG Adapter der
unterstützt. Ich meine da sind auch OpenSource-Adapter dabei.
Empfehlen würde ich dazu allerdings nicht, besser einen Segger J-LINK
EDU für 50€ kaufen. Der hat auch ordentliche Software dabei und der
funktioniert mit so gut wie allen IDE's und arbeitet sehr zuverlässig.
Markus M. schrieb:> Das sollte man beachten:> "Warning> Until now there is no way to go back to the original firmware!"
Ist zwar Leichenfledderei, aber man kommt aktuell doch wieder zurück.
WARNUNG : Theoretisch geht noch mehr, aber damit bewegt man sich
definitiv über die sehr dunkle Grauzone hinweg in die Illegalität,
weil man was flasht, was einem definitiv nicht zusteht. Wahrscheinlich
ist auch das wiederherstellen schon illegal:
Hier steht wie man an die Firmware-imgaes über das Java-Update-Tool
kommt:
https://lujji.github.io/blog/reverse-engineering-stlink-firmware/
So kommt man an den ursprünglichen Bootloader:
https://lujji.github.io/blog/reverse-engineering-stlink-firmware-part2/
Hier sind schon gedumpte Bootloader:
https://github.com/Krakenw/Stlink-Bootloaders
Was muss man machen?
- Ein passendes FirmwareImage an 0x8004000 flashen
- Den Bootloader an 0x8000000 flashen
Der St-Link funktioniert so aber noch nicht wieder. Man muss noch das
ST-Link-Update-Utility nutzen, um sich eine Firmware für den ST-Link
auszusuchen (ja man darf aussuchen - hier bitte die Firmware auswählen,
die für euch in Frage kommt):
- normaler Stlink V2 von Dicovery boards: Version STM32 (ohne STM8)
(getestet)
- Stlink V21 von Nucleo-Boards: Version mit STM32 mit MSD (ungetestet
mangels Hardware)
Jetzt sollte wieder ein funktionierender ST-Link da sein.
P.S. Segger bietet eine J-Link-Firmware für die Discoveries/Nucleos
(ST-Link V2/V21 für STM32) an:
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/
Damit hat man einen Debugger, der sehr performant ist, einen sehr guten
gdbserver(jlinkgdbserver für windows/linux) mitbringt und auch fähig ist
beliebig viele Flash-Breakpoinst zu erstellen. Der geht dann aber nur
mit STM32-µC. Ich würde diese Lösung wenn es möglich ist stets der
Openocd-Frickeladapter-Lösung vorziehen, da es einfach funktioniert und
man nicht ewig herum konfigurieren muss, bis man debuggen kann.
Im Netz findet man Firmwareimages für den Stlink. Die Emdev Seite hat
Hinweise darauf. Das Image spielt man auf, und dann macht man einen
Update und hat wieder die ST Firmware und alles ist wieder "gut"
Ueber Kontakt bei ST kommt man evt auch "Boot-Image"
Philipp_K59 schrieb:> Ich habe einen 3€ STLINK Chinaklon für meine STM32.
Geht prinzipiell auch, aber mit JLink macht es erfahrungsgemäß mehr
Spaß.
Man kann deinen ST-Link theoretisch auch zum JLink umflashen (ILLEGAL)
- ein paar russische Bastler haben das STLinkReflash gehackt (siehe
adelectronics.ru), dass sich normale ST-Links umflashen lassen. Wobei
die Chinesen auch JLink-OB für n 5er bei Aliexpress anbieten. Ist
wahrscheinlich auch nix anderes.
Ich habe mir im Studium mal einen original JLink EDU (kostet um die 50
und kann alle möglichen ARM) gegönnt und bin sehr zufrieden damit bis
heute. Kann ich nur jedem empfehlen, das ist eigentlich geschenkt.
Mittlerweile gibts den auch im USB-Stick-Format für einen 20er, wobei
darauf ein sehr kompakter und unpraktischer Pinheader verwendet wird.
Grüße Oliver
>> Geht prinzipiell auch, aber mit JLink macht es erfahrungsgemäß>> mehr Spaß.>>Warum?
Der J-Link ist erheblich schneller und stabiler als der ST-Link.
Witzig - unabhängig von diesem Thread habe ich vor einer halben Stunde
genau das gemacht was Oliver beschrieben hat (auch per Google findet man
die genannten Seiten). Aus dem billig Baite mit 2.0 wurde jetzt ein 2.1.
Aber auch nur die Version Stm32 + Audio wie in dem Link beschrieben, was
auch immer das Audio da bedeuten soll, es läuft jedenfalls als
debugprobe mit VCP.
Der ST Updater weigert sich aber die MSD Variante zu flashen weil der C8
zu klein sein soll, der hat aber 128kB. Das wird auch vom stmflash tool
gemeldet über das ich den Stick seriell flashen kann. Aber auch das
dekodierte bin zu flashen bringt es nicht, der Bootloader schreibt wohl
noch eine Konfig für die USB PID/VID.
Alternativ könnte man noch einen CMSIS-DAP auf den Stick flashen,
DAPLink Projekt, das wird mittlerweile auch gut unterstützt.
> Der J-Link ist erheblich schneller und stabiler als der ST-Link.
Der ST-Link 2.1 arbeite völlig stabil. Mit seiner Geschwindigkeit bin
ich zufrieden. Sowohl das Programmieren als auch das Debuggen geht damit
sehr viel schneller, als bei Atmel Produkten über ISP und Debug Wire.
Stefan U. schrieb:> Der ST-Link 2.1 arbeite völlig stabil. Mit seiner Geschwindigkeit bin> ich zufrieden. Sowohl das Programmieren als auch das Debuggen geht damit> sehr viel schneller, als bei Atmel Produkten über ISP und Debug Wire.
Verglichen mit dem Dragon z.B. ist der STLink natürlich performanter,
aber das ist hier denke ich kein zweckmäßiger Vergleich, da sich beide
nicht untereinander tauschen lassen. BTW: So ziemlich jeder Emulator
würde gegen den alten Atmelkram besser abschneiden :D.
Hast du JLink schon probiert? Wie ist dein Entwicklungs-setup (OS, IDE,
Debugger-SW)?
Ich bin mit dem STLink nicht ganz so zufrieden. Man kann damit debuggen
- keine Frage, aber gerade wenn man den gdb nutzen möchte, dann muss man
sich mit den tools von texane [1] oder openocd rumschlagen (viel
Konfiguration notwendig). Es gibt nicht mal einen von ST
bereitgestellten gdbserver. Segger hat halt recht gut bedienbares
Profiwerkzeug entwickelt und stellt seinen GDB-Server auch für Linux
bereit. Eines der Features die ich am meisten mag ist die Möglichkeit
der Flashbreakpoints. Das können glaube ich Openocd oder die Software
von texane[1] nicht. Was ich am beeindruckensden finde ist, dass man
wenn man neueres STM32Discovery-Board (oder Nucleo) hat, legal und
kostenlos den stlink auf jlink ob (stm32) umflashen kann.
[1] https://github.com/texane/stlink:
Hier ist es mit schon oft passiert, dass ich den STLink am USB
reconnecten musste, dass ich eine neue gdb-session starten oder wieder
flashen konnte. Den JLink musste ich noch nicht einmal abziehen.
Aktuelle Entwicklungsumgebeung:
- windows 7
- Eclipse Mars.2 mit gdb-hardware-debugging-plugin (hier muss natürlich
man auch einiges konfigurieren, aber die launcher lasse ich von nen
python-tool gererieren)
Grüße Oliver
Oliver J. schrieb:> Eclipse Mars.2 mit gdb-hardware-debugging-plugin
Benutz doch das "GNU MCU Eclipse" Plug-in, damit ist das viel
einfacher. Damit kann man sich auch Peripherie Register und SWO Ausgabe
ansehen. Und Mars.2 ist ja uralt ;-)
> Hast du JLink schon probiert?
Nein habe ich nicht. Ich bin beim ST-Link hängen geblieben, der als
"kostenlose" Beigabe an einem Entwicklungsboard hing. Mit diesem Teil
bin ich wie gesagt absolut zufrieden.
Aber klar, wenn man erst einmal etwas viel besseres in der Hand hatte,
mag man sicher nicht mehr zurück. Nur habe ich kein Geld zu verschwenden
und kaufe mir daher vorläufig keinen J-Link. Das mache ich erst, wenn
ich ihn brauche.
Geschwindigkeit spielt bei Hobby Projekten ohnehin nur eine
untergeordnete Rolle.
> openocd rumschlagen (viel Konfiguration notwendig)
In der System Workbench ist openocd enthalten und läuft "out of the
box". Da muss man gar nichts konfigurieren.
> Hier ist es mit schon oft passiert, dass ich den STLink am> USB reconnecten musste
Ich habe das Gefühl, dass hier alte Probleme immer wieder
kopiert/zitiert werden, um den J-Link zu Promoten. Mit persönlich ist
dieses Problem jedenfalls noch gar nicht passiert.
Kann es sein, dass du nach dem Wechsel auf J-Link nie wieder aktuelle
Versionen des ST-Link+Software ausprobiert hast?
Stefan U. schrieb:> Ich habe das Gefühl, dass hier alte Probleme immer wieder> kopiert/zitiert werden, um den J-Link zu Promoten. Mit persönlich ist> dieses Problem jedenfalls noch gar nicht passiert.>> Kann es sein, dass du nach dem Wechsel auf J-Link nie wieder aktuelle> Versionen des ST-Link+Software ausprobiert hast?
Meine Erfahrungen mit den texane-tools basieren auf Firmware und
Toolständen von vor ca. 2 Monaten. Openocd habe ich nicht probiert, da
ich keine Lust hatte ewig mit der Config runzuspielen ;).
Stefan U. schrieb:> Aber klar, wenn man erst einmal etwas viel besseres in der Hand hatte,> mag man sicher nicht mehr zurück. Nur habe ich kein Geld zu verschwenden> und kaufe mir daher vorläufig keinen J-Link. Das mache ich erst, wenn> ich ihn brauche.
Das ist ja das schöne für deinen Beigabe-Debugger verschenkt ihn Segger
[1]. ;) Und nein ich mache keine Werbung für Segger - Bin einfach nur
rundum zufieden mit deren Debuggern.
Lassen sich aktuell mit openocd und stlink Breakpoints im Flash
erstellen?
[1]
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/
Grüße Oliver
Dr. Sommer schrieb:> Und Mars.2 ist ja uralt ;-)
Stimmt, aber irgendwie haben die bei Eclipse in neueren Versionen die
Möglichkeit entfernt die laufenden Buildprozesse über die IDE zu killen.
Zumindest ist es bei mir so unter Windows 7 mit 32-Bit und 64-Bit
Eclipse. Das ist unschön, wenn der Prozess aus irgend einem Grund
blockiert. Deshalb setze ich auf diesen Dinosaurier.
Grüße Oliver
Oliver J. schrieb:> Eines der Features die ich am meisten mag ist die Möglichkeit der> Flashbreakpoints.
Auch Segger kocht nur mit Wasser. Das geht mit
1
asm("bkpt");
Oliver J. schrieb:> ein sehr kompakter und unpraktischer Pinheader verwendet wird
Der Pin-Header des JLink Edu Mini ist standardisiert, d.h. Pinabstand
und Layout. Selbst bei sehr kompakten Platinenlayouts bekommt man den
noch irgendwie mit drauf. Für 0.1" Pin benötigt man dann eben einen
Adapter.
Christopher J. schrieb:> Auch Segger kocht nur mit Wasser. Das geht mitasm("bkpt");
Klar, aber der Witz ist ja dass der JLink die automatisch auch im
laufenden Betrieb setzen kann. Hin und wieder ist __BKPT() aber auch
hilfreich ;-)
Oliver J. schrieb:> Stimmt, aber irgendwie haben die bei Eclipse in neueren Versionen die> Möglichkeit entfernt die laufenden Buildprozesse über die IDE zu killen.
Also, bei mir geht das indem ich ganz unten rechts auf das "Show
Background operations" Symbol oder auf den "Progress" tab klicke, und
dann auf das rote Viereck. Auch in der aktuellen Oxygen.2 Version. Bei
mir hat aber auch noch nie der Compiler blockiert...
DIY bei einem Programmer ist schlichtweg Unsinn.
Wo steckt der Fehler? Programmer? Code? Schaltung? Interface? Bug?
Es ist nicht sinnvoll sich hier Steine in den Weg zu legen indem
Fehlerquellen hinzugefügt werden.
Zudem kostet ein Programmer wie der Segger J-Link EDU keine 50€...
Egon N. schrieb:> DIY bei einem Programmer ist schlichtweg Unsinn.
Nö, warum? Wenn man einen Debugger in seine eigene Schaltung integrieren
möchte, dann kann man das z.B. mit der Black Magic Probe machen und das
Ding funktioniert auch wunderbar. Einen ST-Link oder J-Link kann man
eben nicht ohne erheblichen bürokratischen Aufwand integrieren, es sei
denn man kopiert einfach deren Firmware ohne die Erlaubnis zu haben aber
dann ist es eben definitiv illegal.
Christopher J. schrieb:> Egon N. schrieb:>> DIY bei einem Programmer ist schlichtweg Unsinn.>> Nö, warum? Wenn man einen Debugger in seine eigene Schaltung integrieren> möchte, dann kann man das z.B. mit der Black Magic Probe machen und das> Ding funktioniert auch wunderbar. Einen ST-Link oder J-Link kann man> eben nicht ohne erheblichen bürokratischen Aufwand integrieren, es sei> denn man kopiert einfach deren Firmware ohne die Erlaubnis zu haben aber> dann ist es eben definitiv illegal.
Wozu sollte ich einen Debugger in Hardware in mein finales Produkt
verbauen?
Dann doch lieber einen Port auf der Platine (ggf. mit Pogopins) für das
Debugging vorsehen, fertig aus.
Einen weiteren Controller auf der Platine nur für die Entwicklung
bezahlt dir kein Kunde.
Dr. Sommer schrieb:> Also, bei mir geht das indem ich ganz unten rechts auf das "Show> Background operations" Symbol oder auf den "Progress" tab klicke, und> dann auf das rote Viereck. Auch in der aktuellen Oxygen.2 Version. Bei> mir hat aber auch noch nie der Compiler blockiert...
Genau das meinte ich. Das geht bei mir nicht. Ich kann zwar
draufklicken, aber es wird nicht mehr alles rigoros gekillt.
B.t.w.: Ich nutze einen externen Buildprozess und nicht den Managed
Build von Eclipse. Aber Mars funktioniert für mich, also habe keinen
Bedarf ein neueres hernehmen zu müssen.
Grüße Oliver
Dr. Sommer schrieb:> Christopher J. schrieb:>> Auch Segger kocht nur mit Wasser. Das geht mitasm("bkpt");>> Klar, aber der Witz ist ja dass der JLink die automatisch auch im> laufenden Betrieb setzen kann.
Das habe ich gemeint. Ist echt praktisch.
Grüße Oliver
Christopher J. schrieb:> Oliver J. schrieb:>> ein sehr kompakter und unpraktischer Pinheader verwendet wird>> Der Pin-Header des JLink Edu Mini ist standardisiert, d.h. Pinabstand> und Layout. Selbst bei sehr kompakten Platinenlayouts bekommt man den> noch irgendwie mit drauf. Für 0.1" Pin benötigt man dann eben einen> Adapter.
Stimmt. Aber für den Ottonormal-Bastler ist dieses Rastermaß meines
Erachtens ziemlich unhandlich und die benötigten Adapter auf das übliche
Rastermaß (glaube 2.56mm) kosten leider einige Euro.
Grüße Oliver
Egon N. schrieb:> Wozu sollte ich einen Debugger in Hardware in mein finales Produkt> verbauen?>> Dann doch lieber einen Port auf der Platine (ggf. mit Pogopins) für das> Debugging vorsehen, fertig aus.
Weil Du einen Debugger mit einer für Endkunden einfach nutzbaren
Schnittstelle (=USB) versehen kannst.
> Einen weiteren Controller auf der Platine nur für die Entwicklung> bezahlt dir kein Kunde.
Das hängt doch sehr vom Preisverhältnis Platine zu Gesamtkosten der
Lösung ab.
Wenn es um quasi Einzelstücke geht, die in einer sehr speziellen und
nicht so leicht nachzustellenden Gesamtlösung stecken, macht das u.U.
schon Sinn. Wenn es Probleme gibt, kann der Entwickler kurz per
Fernwartung auf den PC des Kunden und darüber das Programm mit dem
Debugger analysieren. Den GDB der Black Magic Probe kann man dabei ganz
einfach per SSH weiterleiten.
Oliver J. schrieb:> Aber für den Ottonormal-Bastler ist dieses Rastermaß meines> Erachtens ziemlich unhandlich und die benötigten Adapter auf das übliche> Rastermaß (glaube 2.56mm) kosten leider einige Euro.
Adapter auf die standard ARM 20-Pin JTAG Pinouts mit 0.1" Pin-Pitch
gibt's bei Olimex für 5€ zzgl. Versand:
https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-20-10/
oder Aliexpress für ~6,50€ inkl Versand:
https://www.aliexpress.com/item/Emulator-transfer-board-line-20pin-2-54mm-turn-10pin-1-27mm-JTAG-20p-to-10p/32803739154.html
Wie gesagt:
Wenn die Platine sehr kompakt ist, ist das mMn die beste Lösung. Der
Footprint ist nicht größer als die 4x0.1" Pin-Header welche man
typischerweise bei irgendwelchen China-Boards a la BluePill findet,
bringt aber neben VCC, GND, SWDIO und SWCLK auch noch einen Reset- und
einen SWO-Pin mit.
btw: 0,1 Zoll sind 2.54mm (2.56 ist 2^8/100), verwechsel ich auch
ständig ;)
Christopher J. schrieb:> Wie gesagt:> Wenn die Platine sehr kompakt ist, ist das mMn die beste Lösung.
Leider ist dieser Mini-Stecker nicht verpolungssicher, und beim
Olimex-Adapter ist das kleine Flachbandkabel auch abnehmbar, sodass man
nachher nicht mehr weiß wie rum es richtig war...
Man kann sich höchstens merken dass man die Nase immer auf der Seite mit
dem fehlenden Pin einsteckt o.ä.
Gerd E. schrieb:> Wenn es um quasi Einzelstücke geht, die in einer sehr speziellen und> nicht so leicht nachzustellenden Gesamtlösung stecken,
Dann braucht man auch keinen Bastel-DIY-Adapter, und es empfiehlt sich
zumindest mal ein Original-ST-Link...
Oliver J. schrieb:> B.t.w.: Ich nutze einen externen Buildprozess und nicht den Managed> Build von Eclipse.
Hm, daran könnte es liegen. Vielleicht lässt sich dein Build-Prozess ja
nicht auf normale Art abbrechen. Ein normales externes "make" ist
jedenfalls auch kein Problem bei mir.
Oliver J. schrieb:> Aber Mars funktioniert für mich, also habe keinen> Bedarf ein neueres hernehmen zu müssen.
Es funktioniert vermutlich nicht mit der aktuellen
"GNU-MCU-Eclipse"-Version, welches das Erstellen von Launch
Configurations vereinfachen würde...
Dr. Sommer schrieb:> Christopher J. schrieb:>> Wie gesagt:>> Wenn die Platine sehr kompakt ist, ist das mMn die beste Lösung.> Leider ist dieser Mini-Stecker nicht verpolungssicher, und beim> Olimex-Adapter ist das kleine Flachbandkabel auch abnehmbar, sodass man> nachher nicht mehr weiß wie rum es richtig war...> Man kann sich höchstens merken dass man die Nase immer auf der Seite mit> dem fehlenden Pin einsteckt o.ä.
Ja, das stimmt leider für die beiden Adapter. Als quick-and-dirty Lösung
kann man den einen Pin welcher nicht benötigt wird abzwicken und diesen
beim Kabel jeweils mit Sekundenkleber o.Ä. zuschmieren. Es gibt die
Stiftleiste allerdings auch in einer Verpolungssicheren Variante. TI
macht das bei deren Adapter so, der übrigens mit 10$ auch nicht
sonderlich teuer ist:
http://www.ti.com/tool/MSP-FET-432ADPTR
Der Verpolungssichere Stecker ist ein FTSH-105-01-F-DV-K von Samtec:
https://www.digikey.de/product-detail/de/samtec-inc/FTSH-105-01-F-DV-K/SAM8796-ND/2649974
Für verschiedene Varianten (PnP, TR) siehe
https://www.samtec.com/products/ftsh
Leider nicht ganz billig das Teil.
> Lassen sich aktuell mit openocd und stlink Breakpoints> im Flash erstellen?
Ich weiss nicht was du mit "im Flash" meinst. Jedenfalls
kann ich programme, die aus dem Flash heraus ausgeführt werden
debuggen indem ich Haltepunkte setze.
Meinst du das, oder was anderes?
Das Einzige, was ich vermisse, ist die Möglichkeit, beim Debugging ITM
(SWO) Meldungen anzuzeigen. Keil kann das angeblich, die System
Workbench leider nicht. Das ST-Link Utility zeigt sie an, aber das kann
ich schlecht während des Debuggens mit laufen lassen.
Kann die J-Link Firmware für ST-Link ITM Meldungen beim Debuggen in der
System Workbench anzeigen?
Oliver J. schrieb:> Das ist ja das schöne für deinen Beigabe-Debugger verschenkt ihn Segger> [1]. ;) Und nein ich mache keine Werbung für Segger - Bin einfach nur> rundum zufieden mit deren Debuggern.
Indirekt schon. Aber ich kann bestätigen, wir bezahlen dich nicht dafür
;-).
Das schöne ist doch heutzutage, dass man aus vielen verschieden JTAG
Debug Probes wählen und jeder das für sich beste Werkzeug nutzen kann.
Man muss aber schon sagen, dass viele Firmen (wie auch SEGGER)
heutzutage seine professionellen Tools Hobbyisten sehr günstig oder
kostenlos anbieten. Das schließt JTAG Debug Probes, IDE, RTOS und
Middleware mit ein.
Oft macht es aus meiner persönlichen Sicht keinen Sinn nicht solche
Lösungen zu nutzen.
Stefan U. schrieb:> Das Einzige, was ich vermisse, ist die Möglichkeit, beim Debugging ITM> (SWO) Meldungen anzuzeigen. Keil kann das angeblich, die System> Workbench leider nicht. Das ST-Link Utility zeigt sie an, aber das kann> ich schlecht während des Debuggens mit laufen lassen.
Wenn der SWO-Pin mit dem Debugger, also in deinem Fall ST-Link verbunden
ist, dann kann man sich ein ITM-printf in der GDB-Konsole anzeigen
lassen, also demnach auch in SW4STM32.
Die genaue Beschreibung von der TPIU-Config mit OpenOCD findest du hier:
http://openocd.org/doc/html/Architecture-and-Core-Commands.html#ARMv7_002dM-specific-commands
Ein paar Beispiele hatte ich hier schon mal geschrieben:
Beitrag "Re: ARM ETM mit openocd auslesen?"
Du musst halt, wie im OpenOCD Manual beschrieben, den Dateinamen
weglassen, damit der Output in der OpenOCD-Konsole landet.
Meine primäre Quelle dafür war http://blog.japaric.io/itm/ .
Da geht es zwar um Rust und nicht um C aber die Debug- und
Traceeinstellungen, sowie der GDB sind ja gleich.
Stefan U. schrieb:> Ich weiss nicht was du mit "im Flash" meinst. Jedenfalls> kann ich programme, die aus dem Flash heraus ausgeführt werden> debuggen indem ich Haltepunkte setze.>> Meinst du das, oder was anderes?
Ich meine etwas anderes. Wenn man die Hardware-Breakpoints (Anzahl ist
vom jeweiligen Core limitiert) aufgebraucht hat, dann kann der J-link
live den Flash Patchen und "Software-Breakpoints" einfügen. Ist ein echt
tolles Feature.
>Quelle: Segger-Homepage:>The J-Link software comes with an additional feature, called Unlimited Flash>Breakpoints. Unlimited Flash Breakpoints allow the user to set an unlimited>number of breakpoints when debugging in flash memory.>Without this feature, the number of breakpoints which can be set in flash is>limited to the number of hardware breakpoints supported by the debug unit of>the CPU (2 on ARM 7/9, 4-6 on Cortex-M).
Grüße Oliver
Das geht neuerdings bei SW4STM32 in Verbindung mit
Oliver J. schrieb:> Ich meine etwas anderes. Wenn man die Hardware-Breakpoints (Anzahl ist> vom jeweiligen Core limitiert) aufgebraucht hat, dann kann der J-link> live den Flash Patchen und "Software-Breakpoints" einfügen. Ist ein echt> tolles Feature.
Das geht, neuerdings, mit SW4STM32 und ST-Link ebenso. Bin ich letztens
durch Zufall drüber gestolpert.
Als ich das Anzeigen von ITM einigen Monaten versuchte (auch mit
diversen Varianten von Config Files) klappte es noch nicht.
Kannst du mir kurz einen Tip geben, wie man diese Meldungen in der
aktuellen Version der System Workbench anzeigt?
Wenn ich in der Debugger Konfiguration ganz am Ende "monitor itm port 0
on" einfüge, erhalte ich diese fehlermeldung:
1
itm_test Debug.cfg:30: Error: invalid command name "monitor"
2
in procedure 'script'
3
at file "embedded:startup.tcl", line 60
4
at file "itm_test Debug.cfg", line 30
Den Ansatz, die Ausgabe in eine Datei umzuleiten finde ich ziemlich
unkomfortabel. Das kann ich dann doch besser ein herkömmliche USB-UART
Verbindung benutzen, anstatt SWO.
Stefan U. schrieb:> Wenn ich in der Debugger Konfiguration ganz am Ende "monitor itm port 0> on" einfüge, erhalte ich diese fehlermeldung:> itm_test Debug.cfg:30: Error: invalid command name "monitor"> in procedure 'script'> at file "embedded:startup.tcl", line 60> at file "itm_test Debug.cfg", line 30
"monitor" ist für den GDB die Anweisung, alles was in dieser Zeile steht
an den GDB-Server weiterzuleiten. Wenn du die Config direkt in OpenOCD
vornimmst, dann musst du das "monitor" weglassen.
D.h.
.gdbinit: "monitor itm port 0"
openocd.cfg: "itm port 0"
Mit "itm port 0 on" komme ich weiter (keine Fehlermeldung mehr) aber die
Meldungen sehe ich trotzdem nicht. Mit dem ST-Link Utility kann ich sie
aber sehen.
Mein aktueller Versuch hat diese Einträge im Debugger Config File:
1
tpiu config internal - uart off 8000000
2
itm port 0 on
Mit "manchester" anstelle von "uart" sehe ich auch nichts. Wenn ich den
Dateinamen weglasse, bekomme ich eine Fehlermeldung:
Sorry Stefan, vergiss das was ich oben geschrieben habe. Das war falsche
Information meinerseits. Ich war mir eigentlich relativ sicher das mal
so am laufen gehabt zu haben, also innerhalb von OpenOCD im Terminal
aber wahrscheinlich hab ich das gedanklich entweder mit dem UART-Output
oder mit Semihosting verwechselt. Man kann anstelle einer Datei auch
eine named pipe angeben und dann aus dieser lesen oder was auch immer
aber direkt in SW4STM32 scheint es mit OpenOCD jedenfalls nicht zu
gehen.
mit dem BMP habe ich mich noch nicht beschäftigt, aber da mein
umprogrammierter China-STLink nicht mit OpenOCD laufen wollte (mit dem
STLink Utility funktioniert er) ist das vielleicht eine Alternative.
Ich habe noch nicht ganz verstanden was beim BMP so anders sein soll
bzw. wie der integrierte GDB Server zu verstehen ist. OpenOCD braucht
man trotzdem noch oder wie wird der eingebunden? Ich benutze den mit
Eclipse und dem gnuarmeclipse plugin.
Nein, beim BMP braucht man kein OpenOCD. Man startet den GDB
"arme-none-eabi-gdb", im GDB verbindet sich mit der ersten ACM
Schnittstelle des BMP "tar extended /dev/ttyACM0", dann schaut man ob
die angeschlossene CPU erkannt wird: "mon swd" fuer SWD bzw "mon jtag"
ggf fuer Jtag und verbindet sich mit der CPU "att 1" oder bei JTAG ggf
eine hoehere Nummmer. Der BMP kennt bei weiten nicht so viele CPUs wie
OpenOCD, dafuer braucht man aber auch bei weiten nicht so viele
Optionen wie bei OpenOCD. M.e.a. kommt BMP auch besser mit schlafenden
CPUs zurecht.
ok, danke.
D.h. in der Eclipse Debug Config kann das Häkchen bei 'Start OpenOCD
locally' weg. Braucht der gdb noch Kommanozeilenoptionen um sich mit dem
USB ACM device zu verbinden oder probiert der die möglichen
Schnittstellen selber durch?
Ich kann das erst heute abend probieren, darum frage ich mal.