Forum: Mikrocontroller und Digitale Elektronik USB an STM32F7 wird nicht erkannt


von A. G. (grtu)


Lesenswert?

Hallo zusammen,

ich habe ein blödes Problem, bei dem ich nichtmal weiß wie ich es 
richtig debuggen kann. Ich habe einen STM32F7 mit USBLC6-Filter und 
Spannungsteiler für VBus (nach Vorgaben aus einem der ST-Manuals), und 
daran quasi direkt die Adern eines USB Kabels. Die Leiterbahnen sind 
insgesammt etwas unter 1cm lang, und ich habe beim Layout auf die 
korrekte Impedanz geachtet bzw. die Leiterbahnbreiten danach berechnet.

Wenn ich in CubeMX die Clocks, USB FS und CDC-Device konfiguriere, 
kompiliere und den uC damit programmiere, wird jedoch von Windows kein 
Gerät erkannt. Wenn ich mit Wireshark und USBPcap die "Verbindung" 
aufzeichne, sehe ich beim Einstecken des USB-Steckers nur folgendes:
1
Frame 1: 28 bytes on wire (224 bits), 28 bytes captured (224 bits)
2
USB URB
3
    [Source: 2.2.1]
4
    [Destination: host]
5
    USBPcap pseudoheader length: 27
6
    IRP ID: 0xffffc900be0d22f0
7
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
8
    URB Function: URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER (0x0009)
9
    IRP information: 0x01, Direction: PDO -> FDO
10
    URB bus id: 2
11
    Device address: 2
12
    Endpoint: 0x81, Direction: IN
13
    URB transfer type: URB_INTERRUPT (0x01)
14
    Packet Data Length: 1
15
    [bInterfaceClass: Unknown (0xffff)]
16
Leftover Capture Data: 10

Und das ist dann alles. Ich würde mich sehr über Hinweise freuen wie ich 
das Problem überhaupt angehen könnte. Bisher habe ich nur verschiedene 
Konfigurationen in CubeMX bzw. dem Code getestet, die physikalische 
Verbindung mehrfach überprüft, die Datenleitungen mal vertauscht, 
sichergestellt, dass der VBus-Pin High ist wenn der Stecker eingesteckt 
ist, und weiß nicht mehr richtig weiter. Das Problem ist, dass die 
Enumeration etwas im Verborgenen des uCs gemacht wird, und sobald ich 
versuche per SW-Debugger die USB-Register auszulesen stürzt der Debugger 
ab.

Falls mir da jemand einen Tipp geben könnte wäre ich sehr dankbar.

von Jim M. (turboj)


Lesenswert?

A. G. schrieb:
> Endpoint: 0x81, Direction: IN

Da muss vorher reichlich Kommunikation über EP0 mittels Control 
Transfers erfolgen. Eventuell bekommt usbpcap die nicht mit - USB 3 
Treiber..?


Abhilfe war bei mir eine Linux Kiste - dort kommt man an die USB Sachen 
besser ran.

Für einen ganz blöden Fehler brauchte ich aber DSO + Software (Konverter 
CSV nach Binary)+ PulseView.

von Jim M. (turboj)


Lesenswert?

A. G. schrieb:
> wird jedoch von Windows kein
> Gerät erkannt.

Wenn auch nach Minuten nix erkannt wird, fehlt der Pullup 1,5k an D+ 
Datenleitung.

von A. G. (grtu)


Lesenswert?

Jim M. schrieb:
> A. G. schrieb:
>> Endpoint: 0x81, Direction: IN
>
> Da muss vorher reichlich Kommunikation über EP0 mittels Control
> Transfers erfolgen. Eventuell bekommt usbpcap die nicht mit - USB 3
> Treiber..?
>
>
> Abhilfe war bei mir eine Linux Kiste - dort kommt man an die USB Sachen
> besser ran.
>
> Für einen ganz blöden Fehler brauchte ich aber DSO + Software (Konverter
> CSV nach Binary)+ PulseView.

Stimmt, es hängt an einem usb-hub zusammen mit dem ST-Link, jedoch 
passiert das gleiche, wenn ich einen direkten Port des Computers 
benutze.


Jim M. schrieb:
> A. G. schrieb:
> wird jedoch von Windows kein
> Gerät erkannt.
>
> Wenn auch nach Minuten nix erkannt wird, fehlt der Pullup 1,5k an D+
> Datenleitung.

Ich dachte der wäre bei den STM32F7 integriert. Da muss ich später 
nochmal nachsehen.

von A. G. (grtu)


Lesenswert?

Ich habe nochmal nachgeschaut, laut dem Reference Manual sind die 
notwengigen Widerstände integriert. Beim STM32F746-Discovery ist auch 
kein weiterer Widerstand verbaut.

Kann mir jemand sagen, was der USBPcap-Eintrag zu bedeuten hat bzw. in 
welchem Stadium der Verbindungsversuch ist? Da der Host den uC am 
pull-up erkennt, hätte ich gedacht, dass das schon funktioniert. Ich 
kenne mich allerdings leider damit nicht aus.

Jim M. schrieb:
> Da muss vorher reichlich Kommunikation über EP0 mittels Control
> Transfers erfolgen. Eventuell bekommt usbpcap die nicht mit - USB 3
> Treiber..?

Ich glaube ich hatte dich falsch verstanden. Beim ST-Link wird 
jedenfalls allerhand Zeugs aufgezeichnet. Falls es ein Treiber-Problem 
sein sollte, würde das nicht passieren, oder?

von Thomas (Gast)


Lesenswert?

Na ja USB interface class 0xFFFF deutet wohl auf nicht passende 
Deskriptoren hin. Was soll das denn für ein Devices werden?

Thomas

von Thomas (Gast)


Lesenswert?

Noch was:
Das Device ist enumeriert und funktioniert. Das sieht man an der 
DeviceAdresse
Win findet wahrscheinlich nur keinen passenden Treiber.
Das kann man im Gerätemanager sehen. Außerdem könntest du mal mit 
USBView die Deskriptoren anzeigen lassen.

Thomas

von Mehmet K. (mkmk)


Lesenswert?

Vermutlich nicht Dein momentanes Problem; aber Dein zukünftiges:
Denn mit dem USBLC6 bin ich auch mal auf die Nase gefallen.
Unter meinen Notizen sind folgende Hinweise:

"USBLC6-4 and USBLC6-2 are wrong options for USB Device protection.
These parts are good for Host downstream port protection, but never use 
them for Device upstream port protection."

"TVS diodes array which has "high-side" diodes, like PRTR5V0U2X, 
USBLC6-4 and USBLC6-2 are good for USB host port.
But this array causes trouble described by the OP on USB device and OTG 
ports."

von A. G. (grtu)


Lesenswert?

So, nach einer längeren Zwangspause habe ich das Problem nun gelöst. Aus 
irgendeinem (ich weiß leider nicht mehr welchem) Dokument von STM hatte 
ich den Vorschlag einen Spannungsteiler für VBUS mit 68k und 47k zu 
bauen. Nachdem ich mal die Spannung an PA9 (VBUS-Eingang am MCU) geprüft 
habe, war klar, warum das nicht funktionierte. Die Spannung lag nur bei 
knapp über einem Volt. Hätte ich mir eigentlich auch denken können. Ich 
weiß noch, dass ich über die hohen Widerstände anfangs etwas verwundert 
war, habe es aber dann einfach so übernommen und nicht weiter darauf 
geachtet. Nachdem ich die Widerstände mit 10k und 4.7k ersetzt habe 
funktioniert alles wie erwartet. Ich sollte mir angewöhnen mehr zu 
messen -.-

Danke jedenfalls an alle für die Hilfe und Kommentare!

Mehmet K. schrieb:
> Vermutlich nicht Dein momentanes Problem; aber Dein zukünftiges:
> Denn mit dem USBLC6 bin ich auch mal auf die Nase gefallen.
> Unter meinen Notizen sind folgende Hinweise:

Ohje, vielen Dank, das hatte ich irgendwie nicht gesehen.

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.