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.
Beim LPC Controller wird regelmäßig die Funktion USBD_WriteEP aufgerufen. Beim STM32F4 leider nicht. Hat jemand eine Idee, woran das liegen könnte ?
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.
Nutzt du auch den Keil USB CDC Treiber der RL ? Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM wären identisch.
ESC- schrieb: > Ich dachte das Verhalten der beiden Keil Treiber für den LPC und STM > wären identisch. Das wäre wohl eine Frage für den Support.
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.
1 | ;------------------------------------------------------------------------------ |
2 | ; Installation |
3 | ;------------------------------------------------------------------------------ |
4 | |
5 | [SourceDisksFiles] |
6 | |
7 | [SourceDisksNames] |
8 | |
9 | [DestinationDirs] |
10 | FakeModemCopyFileSection=12 |
11 | DefaultDestDir=12 |
12 | [FakeModemCopyFileSection] |
13 | |
14 | [MCBSTM32F400USB] |
15 | include=mdmcpq.inf |
16 | CopyFiles=FakeModemCopyFileSection |
17 | AddReg=MCBSTM32F400USB.AddReg |
18 | |
19 | [MCBSTM32F400USB.AddReg] |
20 | HKR,,DevLoader,,*ntkern |
21 | HKR,,NTMPDriver,,usbser.sys |
22 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" |
23 | |
24 | [MCBSTM32F400USB.Services] |
25 | AddService=usbser, 0x00000002, DriverService |
26 | |
27 | [DriverService] |
28 | DisplayName=%DRIVER.SVC% |
29 | ServiceType=1 |
30 | StartType=3 |
31 | ErrorControl=1 |
32 | ServiceBinary=%12%\usbser.sys |
33 | |
34 | ;------------------------------------------------------------------------------ |
35 | ; String Definitions |
36 | ;------------------------------------------------------------------------------ |
37 | |
38 | [Strings] |
39 | Keil = "Keil - An ARM Company" |
40 | DRIVER.SVC = "MCBSTM32F400 USB VCOM Driver" |
41 | DESCRIPTION= "MCBSTM32F400 USB VCOM Port" |
42 | COMPOSITE0 = "MCBSTM32F400 USB VCOM Port" |
43 | COMPOSITE2 = "MCBSTM32F400 USB VCOM Port" |
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.