stm32 CDC USB – Unbekanntes Gerät (Fehlercode 43) [geschlossen]

Ich habe ein Problem mit der Herstellung einer benutzerdefinierten Leiterplatte mit STM32F103C8T6 FS CDC, aber die ganze Geschichte sah so aus.

  1. Ich habe eine kleine Test-App mit CubeMX und IAR auf einem billigen PC aus China mit derselben MCU erstellt - im Terminal unter Windows konnte ich Daten empfangen. Übrigens habe ich 8 MHz XTAL verwendet, 1k5 Pull-up auf 3,3 auf der DP-Leitung, keine seriellen Widerstände.
  2. Auf dem benutzerdefinierten Board ist derselbe Code (den ich problemlos auf die MCU herunterladen kann) und ich erhalte ein unbekanntes Gerät im HW-Manager unter win7.

Gleiche MCU, gleiche Anwendung und Uhren und zwei unterschiedliche Verhaltensweisen - was mache ich falsch?


Zeigen Sie uns Ihren Schaltplan und Ihr PCB-Layout.
Ich wette - wahrscheinlich erzwingt das billige Board die Aufzählung, was Sie nicht tun, und Sie sind nicht bereit, die Deskriptoren zu senden. Es ist ein sehr häufiges Problem.
Wie werden beide Geräte mit Strom versorgt? Über USB oder sonst?
Hallo, danke für die Aufmerksamkeit. Ich werde versuchen, Schaltpläne und PCB-Layout am Abend zu posten. Der einzige Unterschied, den ich bisher feststellen kann, ist, dass es auf der China-Platine einen Micro-USB-Anschluss mit ID-Pin gibt, der auf GND gelötet ist, und auf meiner Platine verwende ich USB_B ohne diesen Pin und ich versorge die Platine über USB. Kann diese Änderung diesen Effekt verursachen?
Häufige Ursachen für diesen Fehler: USB-Leitungen D+ und D- vertauscht, MCU-Takt oder Pin-Konfiguration falsch. Der Fehlercode 43besagt im Wesentlichen, dass außer dem Pullup auf einer Datenleitung keine USB-Kommunikation stattfindet.
Wie lange dauert es, bis dein Board hochfährt? (nachdem Sie es angeschlossen haben)

Antworten (1)

Einer der typischen Fehler bei busbetriebenen USB-Geräten ist die falsche Handhabung des Pull-up-Widerstands. Ihre Beschreibung lautet: "1.5k pullup to 3.3" , was bedeutet, dass das USB-Verbindungsereignis (DP-Pullup) sofort nach dem Einstecken angezeigt wird. Der Host startet also den Aufzählungsprozess in 100 ms. Ihre MCU benötigt jedoch einige Zeit zum Booten, sodass sie nicht mit den richtigen Antworten bereit ist und Hostanfragen fehlschlagen. Bis Ihre MCU kommunikationsbereit ist, erklärt der Host den Port für tot und zeigt einen Fehler an. Wenn ein Demo-Board vor dem Anschluss an den USB-Host extern mit Strom versorgt wird und bereits betriebsbereit ist, ist die Verbindung in Ordnung.

Um dieses Missgeschick zu vermeiden, haben alle seriösen STM-Demoboards den Pull-up-Widerstand, der vom GPIO-Pin gesteuert wird, normalerweise PB2 oder PD2. Dann wird der Pull-up nur per Code gesetzt, wenn der USB-Stack antwortbereit ist.

Der Anschluss des ID-Pins an der Micro-B-Buchse auf der Seite des USB-Geräts ist belanglos, er ist für den USB-OTG-Host gedacht, nicht für ein einfaches Gerät.

Danke für die Antwort - ich weiß es wirklich zu schätzen. Jetzt werde ich einige Hinweise haben, um das endlich zum Laufen zu bringen. Noch ein Kommentar von meiner Seite - auf einem Board, auf dem USB CDC funktioniert (gleiche MCU), wird USB auf die gleiche Weise ausgeführt, nur PU, keine HW-PU-Steuerung, gleicher Code läuft ohne Probleme (gleiche Uhr). Wie auch immer, ich werde einige Optionen ausprobieren und über das Ergebnis informieren.
@kaziel Hast du deinen STM32 USB zum Laufen gebracht?