Forum: Mikrocontroller und Digitale Elektronik STM32 USB HID - wMaxPacketSize immer bei 4 Bytes statt 64 Bytes


von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich versuche hier ein HID-Device mit einem STM32F103 zum laufen zu 
bekommen. Habe dazu CubeMX zur konfiguration verwendet. Grundsätzlich 
funktioniert das ganze auch. Das heisst, das Device wird vom PC erkannt 
und enumeriert und im Device Manager als HID angezeigt. Jedoch meldet 
sich der STM immer mit wMaxPacketSize = 4 an, anstelle von 64.

Hatte jemand bereits ähnliche Probleme?

Habe Wireshark zu Überprüfung verwendet.




Descriptor [usbd_desc.c]
1
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
2
{
3
  0x12,                       /*bLength */
4
  USB_DESC_TYPE_DEVICE,       /*bDescriptorType*/
5
  0x00,                       /*bcdUSB */
6
  0x02,
7
  0x00,                       /*bDeviceClass*/
8
  0x00,                       /*bDeviceSubClass*/
9
  0x00,                       /*bDeviceProtocol*/
10
  64,                         /*bMaxPacketSize*/
11
  LOBYTE(USBD_VID),           /*idVendor*/
12
  HIBYTE(USBD_VID),           /*idVendor*/
13
  LOBYTE(USBD_PID_FS),        /*idProduct*/
14
  HIBYTE(USBD_PID_FS),        /*idProduct*/
15
  0x00,                       /*bcdDevice rel. 2.00*/
16
  0x02,
17
  USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
18
  USBD_IDX_PRODUCT_STR,       /*Index of product string*/
19
  USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
20
  USBD_MAX_NUM_CONFIGURATION  /*bNumConfigurations*/
21
};


Angehängt ist ein Bild von Wireshark.

Danke schonmal.

von Johnny B. (johnnyb)


Lesenswert?

Der Codeausschnitt den Du gepostet hast erzeugt aber nicht den erwähnten 
Endpoint Descriptor. Guck mal in der Datei usbd_hid.c 
"USBD_HID_CfgFSDesc".

Edit: Sorry, meine ursprüngliche Antwort war für CDC

von Pieter (Gast)


Lesenswert?

ist so auch richtig/möglich

/*bMaxPacketSize*/

ist die Größe nur für die Enumeration.

Die HID-Buffer werden im Configuration Descriptor gesetzt.

Pieter

von C. H. (hedie)


Lesenswert?

Vielen Dank für deine Antwort.
Ich habe das Problem gefunden.

Hintergrund:
Ich wollte diesen Code
https://github.com/chandong83/stm32_i2c_to_usb_hid_multitouch

Mit dem neuen CubeMX verwenden.
Nach dem erzeugen des Codes mit dem neuen CubeMX funktionierte der 
TouchScreen jedoch nicht mehr korrekt. Das analysieren mit Wireshark hat 
besagten Unterschied im Descriptor gezeigt.

Weitere Analysen haben nun gezeigt, dass in der Datein usbd_hid.c ein 
Abschnitt HID_MULTI_TOUCH_ReportDesc fehlt. Dieser Abschnitt ist in 
besagtem Projekt vorhanden.

nach dem Austauschen der Dateien usbd_hid.c und .h im Ordner 
Middlewares/ST/STM*".../Class/HID/Src und Inc, funktioniert der Touch 
nun wieder und der Descriptor meldet nun auch wieder die 64 Bytes.

Weiss jemand, ob HID_MULTI_TOUCH_ReportDesc von ST in der HID Klasse 
enthalten war/ist, oder ob dies vom ersteller des Github projektes 
hinzugefügt wurde? Leider gibt es beim Projekt keine vernünftige 
Code-History. Daher lässt sich dies nicht direkt nachschauen.

Danke.

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
Noch kein Account? Hier anmelden.