Forum: Mikrocontroller und Digitale Elektronik STM32 USB und Debugging


von ben (Gast)


Lesenswert?

Hallo,

ich habe einen STM32F070 und folgendes Problem USB-midi zum Laufen zu 
bringen:

Solange ST-link verbunden ist und ich debugge, läuft alles wunderbar, 
Sowohl midi in, als auch output funktionieren problemlos. Ich kann das 
USB Kabel ab- und wieder anstecken, oder einen Software Reset machen: 
USB läuft und ich kann midi Daten empfangen und Senden.

Sobald ich jedoch den ST-Link disconnecte (nicht physikalisch, sondern 
nur den Debugger beende) funktioniert das ganze nicht mehr so gut.
zunächst läuft noch alles, ab- und anstecken des USB Kabels führt nun 
jedoch entweder dazu, dass das Gerät a)nicht b)fehlerhaft oder c)zwar 
erkannt wird, jedoch nur midi daten empfangen, aber nicht senden kann.

Da es hier mit debuggen schwer wird, weiß ich leider nicht einmal wo ich 
anfangen soll. Freue mich über irgendwelche Ansätze.

Es läuft ein USB-Midi stack basierend auf der CubeHAL library.

Vielen Dank

von Stefan F. (Gast)


Lesenswert?

Geht es um ein Programm, dass du selbst geschrieben hast?
Wenn nicht, hast du wenigstens den Quelltext vorliegen?
Hast du einen seriellen Ausgang-Pin frei?
Besitzt du einen USB-UART Adapter?
Bist du sicher, daß die Stromversorgung in Ordnung ist? Nur vermutet, 
oder nachgemessen? Wenn ja, wo hast du was gemessen?

Beschreibe die Fehler a) und b) detaillierter.

von ben (Gast)


Lesenswert?

Hallo,

danke zunächst mal für die Anregungen. Wie man generell ohne Debugger 
debuggen kann ist mir klar, mir fehlt es jedoch an Verständnis von USB 
an sich um zu wissen, wo ich ansetzten könnte.

a) Das Gerät wird als 'unbekanntes Audiogerät' erkannt
b) Das Gerät kann nicht gestartet werden. (Code 10)

Stromversorgung erfolgt nicht über USB und ist stabil

von Johannes S. (Gast)


Lesenswert?

Sind da Debugausgaben über den ST-Link drin? Je nach dem wie man die 
realisiert blockieren die wenn kein Debugger da ist.

von ben (Gast)


Lesenswert?

Johannes S. schrieb:
> Sind da Debugausgaben über den ST-Link drin? Je nach dem wie man
> die
> realisiert blockieren die wenn kein Debugger da ist.

Soweit ich weiß nicht. Das Problem tritt jedenfalls auch in der Release 
version genauso auf.

von Johannes S. (Gast)


Lesenswert?

Die Debugausgaben die ohne Debugger blockieren sind die über 
'semihosting'. Dazu wäre sowas wie specs=redimon.specs oder eine 
Semihosting Option in den linker settings zu sehen. Das könnte man auch 
in einer Release Version aktivieren, wäre aber natürlich wenig sinnvoll.

von ben (Gast)


Lesenswert?

Könnte es vielleicht sein, dass es beim Verbinden durch den Debugger zu 
einem kleinen Delay kommt, welches sich positiv auswirkt?

von ben (Gast)


Lesenswert?

Johannes S. schrieb:
> Die Debugausgaben die ohne Debugger blockieren sind die über
> 'semihosting'. Dazu wäre sowas wie specs=redimon.specs oder eine
> Semihosting Option in den linker settings zu sehen. Das könnte man auch
> in einer Release Version aktivieren, wäre aber natürlich wenig sinnvoll.

Gerade nachgesehen. Semihosting ist sowohl in der Debug als auch in der 
Release version deaktiviert. Danke für den Einfall

von Walter T. (nicolas)


Lesenswert?

Läuft Dein STM32 überhaupt los "ohne Debugger"?

Wenn der Debugger nur USB-seitig, nicht aber am Target abgezogen wird, 
kann er die MCU im Reset-Zustand halten.

von ben (Gast)


Lesenswert?

Walter T. schrieb:
> Läuft Dein STM32 überhaupt los "ohne Debugger"?
>
> Wenn der Debugger nur USB-seitig, nicht aber am Target abgezogen wird,
> kann er die MCU im Reset-Zustand halten.

Ja, er läuft, restliches Programm und Peripherie läuft auch. Sogar USB 
funktioniert ja manchmal, nur dann nur in eine Richtung.

von Stefan F. (Gast)


Lesenswert?

Welche Geräte-ID zeigt Windows an, wenn es nicht richtig erkannt wird?
Welche Kernel Meldungen (dmesg) gibt Linux in diesen Fällen aus?
Welche Hardware verwendest du (Schaltplan)?

von ben (Gast)


Lesenswert?

Ich sitze hier die ganze Zeit am Testen und versuche ein 
nachvollziehbares Muster zu finden.

Folgendes interessantes Verhalten konnte ich feststellen:

1) ich ziehe alles ab (USB, ST-LInk, Stromversorgung)
2) Schließe nun die Strombversorgung, dann USB an. Gerät wird manchmal 
erkannt, manchmal nicht, aber im Besten Fall kann ich nur Midi 
empfangen, nicht senden.
3) Schließe ich nun den ST-Link an, ändert sich nichts an diesem 
Verhalten
4) Wenn ich nun mit dem ST-Link Utility ein 'connect' und 'disconnect' 
mache, läuft USB Perfekt.

Ein Software Reset scheint also den Fehler zu beheben.. hmm

von ben (Gast)


Lesenswert?

Stefan U. schrieb:
> Welche Geräte-ID zeigt Windows an, wenn es nicht richtig erkannt
> wird?
> Welche Kernel Meldungen (dmesg) gibt Linux in diesen Fällen aus?
> Welche Hardware verwendest du (Schaltplan)?

Geräte-IDs sind in jedem Fall die selben (korrekten) Werte.

Linux müsste ich testen

Hardware: Gibt es nicht viel zu sagen. USB_P und USB_N sind direkt mit 
der Buchse verbunden. Im Signalweg liegt nur ein USB-Zertifizierter ESD 
Schutzbaustein

von ben (Gast)


Lesenswert?

Habe mir einen USB Paket Analyser heruntergeladen. Auch hier kann man 
sehen, dass im einen Fall (nach einem Software-Reset durch ST-Link) die 
Midi Pakete empfangen und gesendet werden.
Ohne Debugger und nach einem erneuten Verbinden werden diese aber nur 
noch gesendet, nicht empfangen.

sonst scheint es aber keinen Unterschied zu geben

von Jim M. (turboj)


Lesenswert?

ben schrieb:
> Midi Pakete empfangen und gesendet werden.
> Ohne Debugger und nach einem erneuten Verbinden werden diese aber nur
> noch gesendet, nicht empfangen.

Sind das Bulk- oder Isochrone Transaktionen? Bei Isochronen 
Transaktionen kommt IIRC kein ACK vom Geräte, d.h. er würde eine 
hängende CPU nichtmal mitbekommen.

Bei dieser Art Bug braucht man LEDs oder andere Anzeigemöglichkeiten am 
Gerät, da man Fehler nicht so einfach mit dem Debugger finden kann. Ich 
habe z.B. im Hardfault_Handler() einen Blink Code drin.
Hirnschmalz ist ebenfalls hilfreich.

Mitunter beendet ein "make clean" solcherlei Spuk.

von Stefan F. (Gast)


Lesenswert?

Ich rate Dir, Rückfragen umfangreich zu beantworten. Sie dienen dazu, 
Dir zu helfen, klare Gedanken zu fassen.

Die Information, dass du seit Stunden herum fummelst, nützt jedoch gar 
nichts.

Ich kann Dir weiter helfen, wenn du meine Fragen umfangreich 
beantwortest. Bisher hast du fast nur um den heissen Brei herum 
geschrieben und bist den Fragen ausgewichen.

Die Antworten auf meine Fragen erfordern Tests, Zeichnungen und 
Messungen. Diese sollst du durchführen. Ohne Fleiss kannst du deine 
Situation gerne weiter bejammern, aber das nützt nichts. Du 
verschwendest deine und meine Zeit.

Ich gebe Dir die nächste hilfreichr Antwort erst, wenn du alle meine 
Fragen ordentlich beantwortest hast. Ich denke, diesen Druck brauchst 
du.

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.