Hallo zusammen Ich benutze ein PIC18F4550 und habe eine Routine geschrieben, wo er sich mittels USB als CDC Device anmeldet. Wenn ich vom PC Daten zum PIC Senden möchte, funktioniert das ohne Probleme. Wenn ich jedoch Daten vom PIC zum PC sende (jeweils in 8 Byte Pakete) kommt zuerst lange nichts, und auf einmal erhalte ich alle 4096 Bytes auf einmal. Mit dem kann ich soweit noch gut leben, denn die 4096 Bytes setzen sich aus 512 * 8 Byte zusammen. Leider frägt der PC nachdem er das ganze Paket erhalten hat den Endpunkt nicht mehr ab. Somit werden auch keine Daten mehr gesendet. Kann mir jemand einen Tipp geben, wie ich den "Bufferüberlauf" frühzeitig erkennen kann, oder wie ich die Daten senden muss, damit ich kein Überlauf generiere. Ich verwende als Treiber den CDC von Microchip Herzlichen Dank für eure Antworten
Falls Deine Datenblöcke exakt der Packetgröße der USB-Kommunikation entsprechen, mußt Du noch ein explizites leeres Paket hinterher senden, damit der USB-Stack weiss, dass dieser Datenblock komplett ist. Du kannst auch probeweise ein Byte weniger in die USB-Pakete reinstecken, dann sollten sie ebenfalls sofort in der Awendung ankommen. Andere mögliche Ursache: Beim Bulk-Transfer wird der Endpunkt nicht abgefragt. Du mußt selber die Übertragung initiieren, z.B. indem Du mit jedem SOF Deinen Pufferfüllstand prüfst, und einen Bulk-IN-Transfer startest.
Klingt, als würdest Du ein Vielfaches der 64 Byte Endpunktgröße versenden und dann das abschließende "Zero Packet" nicht hinterher schicken. Eine CDC Übertragung wird für den PC beendet, wenn weniger als 64 Byte im USB Bulk Paket übertragen werden. Wenn also das letzte Paket nun genau 64 Byte groß war, muss man ein "Zero Packet" - mit null Byte Länge - hinterher senden. Edit: Mist, zu langsam.
Hallo Herzlichen Dank für Ihre Antowrten. Ich habe eure Ideen mal ausprobiert, jedoch mache ich wahrschienlich noch etwas falsch. Wenn ich ein Byte weniger sende, zeigt mir die Anwendung den Empfang korret an. Dasselbe passiert auch, wenn ich ein "Zero Packet" sende. Das Problem ist nun, dass nach dem Empfang der Host keine weiteren Pakete mehr empfängt/abfrägt. Muss ich noch irgendwo ein Flag löschen? Gruss
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.