www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USB-HID verzögert bei WinXP


Autor: Florian D. (fdsurfer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine SPI-USB-Bridge von Maxim, den 3420e, als HID konfiguriert. 
Ziel war es das das Gerät auf allen Zielsystemen (Betriebssystemen) ohne 
zusätzliche treiberinstallation läuft. Der Angeschlossene µC liefert 
Daten, welche von einem in C# geschriebenen Programm ausgelesen und 
dargestellt werden. Entwickelt habe ich unter Win2000. Da läuft die 
kommunikation sehr gut und ohne Probleme. Das Anmelden auf anderen 
Rechnern war wie gewünscht... dranstecken-->geht!. Allerdings nur auf 
Win2000 Rechnern....
Unter WinXP meldet sich das HID genau so an. Aber in der Darstellung ist 
ein Zeitverzögerung von etwa 250ms zu beobachten. Kann mir da wer 
weiterhelfen? Ich habe den ausführenden Descriptor mal angehängt.

Bis dann und vielen Dank,
Florian

    unsigned char DD[]=  // DEVICE Descriptor
    {
        0x12,             // bLength = 18d
        0x01,      // bDescriptorType = Device (1)
        0x00,0x02,    // bcdUSB(L/H) USB spec rev (BCD)
        0x00,0x00,0x00,   // bDeviceClass, bDeviceSubClass, 
bDeviceProtocol
        0x40,      // bMaxPacketSize0 EP0 is 64 bytes
        0xaa,0xaa,    // idVendor(L/H)--Maxim is 0B6A
        0x22,0x22,    // idProduct(L/H)--5346
        0x34,0x12,    // bcdDevice--1234
        1,2,3,      // iManufacturer, iProduct, iSerialNumber
        1      // bNumConfigurations
    };
    unsigned char CD[]=  // CONFIGURATION Descriptor
    {
        0x09,      // bLength
        0x02,      // bDescriptorType = Config
        0x29,0x00,    // wTotalLength(L/H) = 34 bytes
        0x01,      // bNumInterfaces
        0x01,      // bConfigValue
        0x00,      // iConfiguration
        0xe0,      // bmAttributes. b7=1 b6=self-powered b5=RWU 
supported
        0x20,      // MaxPower is 2 ma
        // INTERFACE Descriptor
        0x09,      // length = 9
        0x04,      // type = IF
        0x00,      // IF #0
        0x00,      // bAlternate Setting
        0x02,      // bNum Endpoints
        0x03,      // bInterfaceClass = HID
        0x00,0x00,    // bInterfaceSubClass, bInterfaceProtocol
        0x00,      // iInterface
        // HID Descriptor--It's at CD[18]
        0x09,      // bLength
        0x21,      // bDescriptorType = HID
        0x10,0x01,    // bcdHID(L/H) Rev 1.1
        0x00,      // bCountryCode (none)
        0x01,      // bNumDescriptors (one report descriptor)
        0x22,      // bDescriptorType  (report)
        47,0,                   // CD[25]: wDescriptorLength(L/H) 
(report descriptor size is 43 bytes)
        // IN-Endpoint Descriptor
        0x07,      // bLength
        0x05,      // bDescriptorType (Endpoint)
        0x83,      // bEndpointAddress (EP3-IN)
        0x03,      // bmAttributes  (interrupt)
        0x40,0,           // wMaxPacketSize (64)
        0x08,          // bInterval (poll every 8 msec)
        // OUT-Endpoint Descriptor
        0x07,      // bLength
        0x05,      // bDescriptorType (Endpoint)
        0x01,      // bEndpointAddress (EP1-OUT)
        0x03,      // bmAttributes  (interrupt)
        0x40,0,           // wMaxPacketSize (64)
        0x08      // bInterval (poll every 8 msec)
    };

    unsigned char RepD[] =
    {
        0x06, 0xA0, 0xff,              // USAGE_PAGE (Vendor Defined 
Page 1)
        0x09, 0x01,                    // USAGE (Instance 1)
        0xa1, 0x01,                    // COLLECTION (Application)

        0x09, 0x03,                    //   USAGE (Instance 3) MAX to PC
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x95, cBytesToPc,              //   REPORT_COUNT (2)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x81, 0x02,                    //   INPUT (Data,Var,Abs)

        0x09, 0x04,                    //   USAGE (Instance 4) PC to 
Device
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, cBytesToDevice,          //   REPORT_COUNT (2)
        0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)

        0x09, 0x05,                    //   USAGE (Instance 4)
        0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
        0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
        0x75, 0x08,                    //   REPORT_SIZE (8)
        0x95, 0x02,                    //   REPORT_COUNT (2)
        0xb1, 0x02,                    //   OUTPUT (Data,Var,Abs)

        0xc0                           //     END_COLLECTION
    };

Autor: Florian D. (fdsurfer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das Problem mitlerweile gelöst!

Es liegt am Eingangspuffer, Win2000 hat standartmäsig eine Größe von 8, 
WinXP hat 32. Damit ist die Verzögerung von mir selbst erzeugt, denn ich 
rufe langsamer ab als mein Device sendet. Bei WinXP war die Zeit einfach 
vier mal länger und alles unter 100ms merkt man bei eingabegeräten wohl 
mit der Hand nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.