Guten Tag,
derzeit ersetze binich dabei einen LPC1778 durch einen STM32F4 zu
ersetzen.
Dazu gehören auch alle Softwaretreiber.
Bisher war es so, dass für den LPC1778 der USB CDC Treiber der Keil RL
verwendet wurde. Das ganze läuft soweit auch einwandfrei.
Da es für den STM32F4 ebenfalls von Keil einen USB CDC Treiber gibt,
möchte ich diesen gerne verwenden. usbd_STM32F4xx_FS.c
Ich nutze den USB_FS Modus und nur als CDC Device über einen VCP am PC.
Ich bin nun schon soweit, dass sich meine Applikation korrekt am PC
anmeldet. Zur Analyse verwende ich USBlyzer. Die ganzen Discriptoren
stimmen exkat mit der alten Applikation überein.
Bisher dachte ich, dass alles einwandfrei funktioniert aber ein PC
Programm, welches mit der Applikation kommunizieren soll, kann keine
Verbindung zur Platine mit dem STM32F4 aufbauen.
Im USBlyzer ist mir aufgefallen, dass sich zwar die beiden Platinen
identisch mit den Disciptoren anmelden, allerdings sendet die alte
funktionierende Hardware etwa alle drei Sekunden folgende Daten aus dem
angehängtem Bild.
Bei meinem STM32F439 ist nach der Anmeldung Schluss. Siehe Bild 2
Habt ihr eine Idee, woran das liegen könnte ? Scheinbar funktioniert die
Anmeldung und ich konnte auch schon testweise Daten über USB zum STM32F4
senden.
Vielen Dank.
ESC- schrieb:> Habt ihr eine Idee, woran das liegen könnte ? Scheinbar funktioniert die> Anmeldung und ich konnte auch schon testweise Daten über USB zum STM32F4> senden.
Tja, da bleibt dir weiter nix übrig, als dich tatsächlich mit dem
konkreten Treiber zu befassen, bis du dessen Funktionalität begriffen
hast.
Die Datenrichtung Host-->Device funktioniert immer, sofern das Device
sich als empfangsbereit zeigt. Die umgekehrter Datenrichtung
funktioniert nur dann, wenn das Device sich durch Laden eines
Sendepuffers und Gültigmachen desselben als sendebereit dem Host zeigt.
Genau das aber ist die dezente Schwierigkeit bei einem CDC, denn dort
muß ja der Treiber im µC die Stoßstelle zwischen asynchron und synchron
beim Datenverkehr bewerkstelligen. Ich mach das bei meinen USB-CDC
Treibern so, daß der Treiber in beiden Richtungen einen gehörig großen
Puffer vorhält und ich zum Wieder-Anstoßen des Datentransfes
Device-->Host den 1 ms Tick benutze.
W.S.
ESC- schrieb:> Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM> wären identisch.
Die USB-Cores unterscheiden sich erheblich.
Bei den STM's muß man Statusbits per XOR ändern, das ist aus meiner
Sicht herzlich ungewöhnlich. Die Unterschiede kann man sich mal anhand
der angefügten Quellen zu Gemüte ziehen.
W.S.
Die USB Cores unterscheiden sich schon. Nur bin ich davon ausgegangen,
dass die Entwickler von Keil funktionsgleiche Treiber für USB CDC
entwickeln.
Beim LPC läuft alles problemlos. Dateien hinzugefügt und arg viel mehr
war da nicht zu machen. Beim STM32 hängt es leider.
Kann es auch sein, dass mein .INF File Schuld daran ist, dass die
Kommunikation nicht richtig funktioniert ?
Ich habe ebenfalls das von Keil verwendet.
ESC- schrieb:> Beim LPC läuft alles problemlos. Dateien hinzugefügt und arg viel mehr> war da nicht zu machen. Beim STM32 hängt es leider.
Tja, wie gesagt, mußt du dich dann eben in die Details hineinknien. Als
was ist dein STM denn am PC angemeldet?
Ach ja, ich hatte bei allen meinen USB-CDC's die gleichen Deskriptoren
benutzt (von Nuvoton), was Probleme mit unterschiedlichen .INF erst
garnicht hat aufkommen lassen.
W.S.