Frage

Ich bin die Umsetzung USB auf einem PIC 18F2550 a generic HID-Schnittstelle verwenden. Ich habe das HID-Profil configuation eingerichtet, um eine einzelne 64-Byte-Nachricht sowohl für Ein- und Ausgänge zu haben.

Jetzt ist es im Grunde arbeiten. Das Gerät registriert OK mit Fenstern. Ich kann es in meinem Programm auf dem PC und kann Daten an es senden und empfangen. Das Problem ist, dies aber -. Nachrichten vom PC an den PIC an die Größe der EP 0 Endpunktpuffer abgeschnitten werden

Bevor ich zu gehen Debuggen viel weiter möchte ich versuchen, mein Verständnis für die USB-Protokolle hier zu klären und zu prüfen, habe ich es direkt.

Es sei angenommen, daß der Eingangspuffer EP0 8 Bytes ist. Es ist mein Verständnis, dass die PC-Seite wird ein Steuerpaket, die 8 Byte. Dort ist die Länge in Bytes der Daten zu folgen. Und dann wird es eine Folge von 8-Byte-Datenpakete senden und die PIC-Ende jedes bestätigen hat.

Es ist mein Verständnis, dass die PC-Ende weiß, wie groß jedes Paket, indem Sie in die maximale Paketgröße Feld in der Gerätedeskriptor sein kann und die Nachricht entsprechend in mehrere Datenpakete aufzuteilen.

Bevor ich für mehr Stunden auf den Code suchen gehen, kann jeder bestätigen, dass dies grundsätzlich richtig? Dass, wenn die EP 0 Puffergröße 8 Byte ist dann der PC soll dies wissen, weil das Konfigurationsfeldes erwähnte ich oben und mehrere Datenpakete senden?

Wenn ich meine erhalten auf den Bytes 64 PIC-Puffer dann bekomme ich 64 Bytes der Nachricht, die für meine Bedürfnisse ausreichend ist, aber ich weiß nicht, wie nicht zu verstehen, warum es nicht funktioniert mit kleinen Puffer, und eines Tages wahrscheinlich werde ich sie trotzdem brauchen.

Jede Beratung oder Informationen würden willkommen sein.

War es hilfreich?

Lösung

Es ist etwas Endpunktdeskriptor genannt, die unter anderem die wMaxPacketSize definiert -. Das ist, was die Host Controller Interface-Treiber verwenden, um eine große USB-Übertragung in kleinere Pakete aufzuteilen

Dies ist völlig verschieden von der EP 0 Puffergröße -, die jedoch immer größer erforderlich sein als die wMaxPacketSize. Meine Vermutung ist, (versuchen Sie Ihre usb_config.h und usb_descriptors.c veröffentlichen, wenn Sie Microchip USB-Stack verwenden), dass Sie entweder ich versuchen, verwenden 8-Byte lange EP0- mit 64-Byte langen wMaxPacketSize, die die Übertragung abgeschnitten.

Auch bewusst sein, dass in USB 1.1 Low Speed, die wMaxPacketSize nicht 8 überschreiten kann, und in USB 1.1 Full Speed ??kann es nicht mehr als 64

0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
HID_EP | _EP_IN,            //EndpointAddress
_INTERRUPT,                       //Attributes
DESC_CONFIG_WORD(9),        //size
0x01,                        //Interval

/* Endpoint Descriptor */
0x07,/*sizeof(USB_EP_DSC)*/
USB_DESCRIPTOR_ENDPOINT,    //Endpoint Descriptor
HID_EP | _EP_OUT,            //EndpointAddress
_INTERRUPT,                       //Attributes
DESC_CONFIG_WORD(9),        //size
0x01                        //Interval
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top