Forum: Mikrocontroller und Digitale Elektronik STM32 CDC auf unterschiedlichen Rechnern


von Ada J. Quiroz (inschnier)


Lesenswert?

Hallo,

woran kann es liegen, dass meine CDC, generiert aus CubeMX auf 
unterschiedlichen Rechern erkannt / nicht erkannt wird?

Genauer gesagt habe ich zwei Windows10 Rechner. Auf dem einen wird die 
CDC tadellos erkannt, auf dem anderen kommt die Fehlermeldung, dass das 
USB-Gerät nicht erkannt wurde.

Mehr kann ich nicht sagen, da ich bis jetzt nur den generierten Code 
verwende. Die Hardware scheint zu funktionieren. Ich verwende einen 
7,3728 Baud Quarz und der USB Takt ist 47,92Mhz.

Danke für Tips!

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ada J. Quiroz schrieb:
> Ich verwende einen 7,3728 Baud Quarz und der USB Takt ist 47,92Mhz.

Sollte der Takt nicht 48 MHz sein?! Wozu ein Baudratenquarz wenn man USB 
nutzt?

von Ada J. Quiroz (inschnier)


Lesenswert?

Niklas G. schrieb:
> Sollte der Takt nicht 48 MHz sein?! Wozu ein Baudratenquarz wenn man USB
> nutzt?

Weil ich auch viel Uart und RS485 im System verwende. Aber auch mit 48 
Mhz über den internen Quarz habe ich das selbe Fehlerbild.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Zeig mal die genaue Fehlermeldung aus dem Gerätemanager (Screenshot).

: Bearbeitet durch User
von Ada J. Quiroz (inschnier)


Angehängte Dateien:

Lesenswert?

Niklas G. schrieb:
> Zeig mal die genaue Fehlermeldung aus dem Gerätemanager (Screenshot).

"Unbekanntes USB-Gerät (Fehler beim Anfordern der Gerätebeschreibung"

von Frank K. (fchk)


Lesenswert?

Ada J. Quiroz schrieb:
> Niklas G. schrieb:
>> Sollte der Takt nicht 48 MHz sein?! Wozu ein Baudratenquarz wenn man USB
>> nutzt?
>
> Weil ich auch viel Uart und RS485 im System verwende. Aber auch mit 48
> Mhz über den internen Quarz habe ich das selbe Fehlerbild.

Es gibt keinen internen Quarz. Es gibt zwei interne Oszillatoren (32k 
und 8M), die aber nicht quarzstabilisiert und damit für USB oft nicht 
genau genug sind.

fchk

von Max H. (nilsp)


Lesenswert?

Frank K. schrieb:
> Es gibt keinen internen Quarz. Es gibt zwei interne Oszillatoren (32k
> und 8M), die aber nicht quarzstabilisiert und damit für USB oft nicht
> genau genug sind.

Das wird es sein.

Tausch mal den externen Quarz und versuche auf exakt 48Mhz zu kommen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ada J. Quiroz schrieb:
> Fehler beim Anfordern der Gerätebeschreibung"

Das deutet auf ein grundsätzliches Kommmunikationsproblem hin auf 
Hardware-Ebene. Kann also durchaus von der Frequenz kommen.

von Ada J. Quiroz (inschnier)


Lesenswert?

Niklas G. schrieb:
> Das deutet auf ein grundsätzliches Kommmunikationsproblem hin auf
> Hardware-Ebene. Kann also durchaus von der Frequenz kommen.

Aber wieso funktioniert es am anderen Rechner absolut fehlerfrei? Laut 
CubeMX ist die Frequenz mit 47,92Mhz im zulässigen Bereich.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Ada J. Quiroz schrieb:
> Aber wieso funktioniert es am anderen Rechner absolut fehlerfrei? Laut
> CubeMX ist die Frequenz mit 47,92Mhz im zulässigen Bereich.

Weil verschiedene Rechner eine geringfügig unterschiedliche
Basis-Frequenz haben können die dazu führt dass die Toleranz-
Schwelle für den USB Takt unterschiedlich ausfällt.

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Es gibt einige wenige STM32 die crystal-less USB unterstützen. Die 
ziehen ihren internen 48MHz Quarz auf "Ziel Frequenz" und nehmen dabei 
den Host als Referenz.

Im allgemeinen braucht du aber exakt 48MHz. Sonst ist das Zufall.

https://community.silabs.com/s/article/usb-clock-tolerance?language=en_US

Hier meinen die, man bräuchte+-0.25% für usb full-speed.

Das wären 47.88 als untere Grenze.

Wenn ich deine 47.92 noch mit 100ppm schmücke, dann bist du da draußen.

Ich würde da Mal anfangen...


Übrigens, ich hatte Mal ein ähnliches Problem, als ich unabsichtlich den 
internen 8mhz RC Oszillator statt des externen tcxo verwendet hatte. 
Ging am Tisch meist, aber eben nicht immer. Nachdem ich impedanzen 
gemessen, Rechner getauscht,... hatte, habe ich am Schluss den takt 
gemessen (den kannst du auf einen Pin rausrouten), und nach einer 2 
Zeilen Änderung im Code waren alle Probleme verschwunden.

Selbiges Spiel kenne ich übrigens von Ethernet. Hatte da Mal 
unabsichtlich einen mems Oszillator bestückt... Hat mich auch einige 
Zeit gekostet diesen dummen fehler im BOM zu finden.

73

von Ada J. Quiroz (inschnier)


Lesenswert?

Dann werde ich zunächst mal auf einen Taktgeber versuchen.

von Wastl (hartundweichware)


Lesenswert?

Nicht-quarzbasierenede Kommunikation ist einfach nur Mist.
"Gerade gings noch, jetzt wieder nicht". Und wenn einem die
Temperatur böse mitspielt dann wird's noch schlimmer ....

Ada J. Quiroz schrieb:
> Aber auch mit 48
> Mhz über den internen Quarz habe ich das selbe Fehlerbild.

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Ada J. Quiroz schrieb:
> "Unbekanntes USB-Gerät (Fehler beim Anfordern der Gerätebeschreibung"

Da kann auch das USB Kabel defekt sein (D- unterbrochen bei Full Speed).

Der Code kommt weil schon die allererste Anfrage nach dem Device 
Descriptor fehl schlägt. Da stimmt oft was grundsätzliches nicht.

von Wastl (hartundweichware)


Lesenswert?

Jim M. schrieb:
> Da kann auch das USB Kabel defekt sein

Ja klar, ein und dasselbe Kabel ist am einen Rechner defekt
und am anderen nicht.

Was für eine Logik!

von Ada J. Quiroz (inschnier)


Lesenswert?

Die 47,92Mhz werden laut Clocktree auch für die SDIO verwendet. Reicht 
das aus oder sollten das auch lieber genau 48MHz sein?

von Frank K. (fchk)


Lesenswert?

Ada J. Quiroz schrieb:
> Die 47,92Mhz werden laut Clocktree auch für die SDIO verwendet. Reicht
> das aus oder sollten das auch lieber genau 48MHz sein?

Da ist das nicht so kritisch.

fchk

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Ada J. Quiroz schrieb:
> Reicht das aus

Ja, da kann man beliebig krumme Frequenzen nehmen, darf nur nicht mehr 
als 50 MHz sein. Die SD-Karte hat keinen eigenen Takt, der wird ja 
explizit mit übertragen wie bei SPI.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Wastl schrieb:
> Ja klar, ein und dasselbe Kabel ist am einen Rechner defekt
> und am anderen nicht.

Ja, das kommt durchaus vor bei ausgelutschten USB-Steckverbindern. Im 
hiesigen Fall tippe ich aber auch ganz klar auf Taktprobleme.

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

Aja, wenn da USB-C im Spiel ist, sollte man den Stecker probieren zu 
drehen ...

Es gibt ein paar Fehler,die auftreten können, oder, die man selber 
einbauen kann, die sich so zeigen würden.

Aber wie oben geschrieben, beim Quarz beginnen, um da Mal sauber zu 
sein.

73

von Ada J. Quiroz (inschnier)


Lesenswert?

Ich habe den Quarz getauscht auf einen 12MHz (mit PLL zu 48MHz) und habe 
mir auf MCO den Takt ausgeben lassen, der sieht gut aus.

Jetzt wird hingegen USB auf keinem Rechner mehr erkannt, mit dem 
7,372800 Takt hat es immerhin auf einem Rechner funktioniert.

Ich bin ratlos, woran kann es liegen? Es ist ein STM32F413VGT6.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Ada J. Quiroz schrieb:
> Ich bin ratlos, woran kann es liegen?

Zeige dein *.ioc File mit dem es nicht funktioniert. Natürlich
kommt es ein wenig drauf an wie man den Takt synthetisiert.

von Wastl (hartundweichware)


Lesenswert?

Ada J. Quiroz schrieb:
> Ich habe den Quarz getauscht auf einen 12MHz (mit PLL zu 48MHz)

Du musst für jeden Quarz die richtigen Lastkapazitäten dazuschalten
sonst liegt evtl. die Frequenz zu stark daneben.

Ada J. Quiroz schrieb:
> den Takt ausgeben lassen, der sieht gut aus.

Gut aussehen reicht nicht, er muss auch hinreichend genau sein.

von Ada J. Quiroz (inschnier)


Lesenswert?

Wastl schrieb:
> Gut aussehen reicht nicht, er muss auch hinreichend genau sein.

Das meinte ich ja damit.

Wastl schrieb:
> Du musst für jeden Quarz die richtigen Lastkapazitäten dazuschalten
> sonst liegt evtl. die Frequenz zu stark daneben.

Ich benötige keine Kapazitäten,d a ich einen Quarz Oszillator verwende.

Ich habe aber den Fehler gefunden. Statt 22Ohm habe ich 220Ohm bestücken 
lassen. Nun funktioniert es auch auf allen Rechnern.

Danke trotzdem, ich denke dass der 12MHz schon wichtig war.

von Wastl (hartundweichware)


Lesenswert?

Ada J. Quiroz schrieb:
> Das meinte ich ja damit.

Warum schreibst du es dann nicht?

Ada J. Quiroz schrieb:
> Ich habe den Quarz getauscht

Ada J. Quiroz schrieb:
> Ich benötige keine Kapazitäten,d a ich einen Quarz Oszillator verwende.

Warum schreibst du von einem Quarz wenn du einen Quarz-
Oszillator verwendest? Das ist die reine Verarschung!

von Mi N. (msx)


Lesenswert?

Wastl schrieb:
> Du musst für jeden Quarz die richtigen Lastkapazitäten dazuschalten
> sonst liegt evtl. die Frequenz zu stark daneben.

Als ob ein paar pF die Frequenz nennenswert verändern würden.

Wastl schrieb:
> Warum schreibst du von einem Quarz wenn du einen Quarz-
> Oszillator verwendest? Das ist die reine Verarschung!

Bleibt doch mal ruhig.

von Ada J. Quiroz (inschnier)


Lesenswert?

Mi N. schrieb:
> Bleibt doch mal ruhig.

Halt ein typischer µC.net Forumnutzer. Allen anderen danke ich.

: Bearbeitet durch User
von Mi N. (msx)


Lesenswert?

Ada J. Quiroz schrieb:
> Statt 22Ohm habe ich 220Ohm bestücken
> lassen.

Ada J. Quiroz schrieb:
> Halt ein typischer µC.net Forumnutzer.

Den gesäßhaften Sprachgebrauch scheinst Du eher zu verstehen. Alles 
klar.

von Jens J. (jensen23523)


Lesenswert?

Meine Güte, er hat Quarz und Quarzoszillator vertauscht. Vermutlich hat 
er nichtmal groß darüber nachgedacht, da der Takt ja korrekt ist und die 
Info somit relativ unwichtig ist.

In jedem Fall kann man aber auch gelassener reagieren.

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.