USB: la solicitud de configuración de configuración falla con un error de parámetro no válido

0

Estoy intentando desarrollar mi propio dispositivo DisplayLink con la placa de descubrimiento STM32F429. También tengo la pantalla Lenovo LT1421, que es un dispositivo DisplayLink original y lo estoy usando como plantilla (tráfico USB, descriptores, etc.).

Ahora estoy atascado en el problema cuando el host USB envía una solicitud con SetConfiguration al dispositivo y la respuesta del dispositivo es un parámetro no válido.

Todo el proceso de enumeración pasa, pero se detiene en la solicitud SetConfig.

Estoy utilizando la clase de CDC generada desde STMCubeMX como ejemplo para middleware con puntos finales editados, etc.

descriptor de dispositivo:

0x12    bLength
0x01    bDescriptorType
0x0200  bcdUSB
0x00    bDeviceClass   
0x00    bDeviceSubClass   
0x00    bDeviceProtocol   
0x40    bMaxPacketSize0   (64 Bytes)
0x17E9  idVendor
0x029D  idProduct
0x0108  bcdDevice
0x01    iManufacturer   "DisplayLink"
0x02    iProduct   "Lenovo LT1421 wide"
0x03    iSerialNumber   "6V9CHDG9"
0x01    bNumConfigurations

El descriptor de configuración es:

  /*Configuration Descriptor*/
  0x09,   /* bLength: Configuration Descriptor size */
  0x02,   /* bDescriptorType */
  55,     /* wTotalLength */
  0x00,
  0x01,   /* bNumInterfaces */
  0x01,   /* bConfigurationValue */
  0x00,   /* iConfiguration */
  0xC0,   /* bmAttributes */
  0x32,   /* MaxPower 0 mA */

  /*Interface Descriptor */
  0x09,   /* bLength */
  0x04,   /* bDescriptorType */
  0x00,   /* bInterfaceNumber */
  0x00,   /* bAlternateSetting */
  0x02,   /* bNumEndpoints */
  0xFF,   /* bInterfaceClass */
  0x00,   /* bInterfaceSubClass*/
  0x00,   /* bInterfaceProtocol */
  0x00,   /* iInterface: */

/*Unknown descritor - used on LT1421 */

  0x17,
  0x5F,
  0x01, 0x00, 0x15, 0x05, 0x00, 0x01, 0x03, 0x00,
  0x04, 0x04, 0x01, 0x00, 0x03, 0x60, 0x00, 0x02, 0x04, 0x60,
  0xE3, 0x16, 0x00,

/*-------*/

  0x07,         /* bLength */
  0x05,         /* bDescriptorType */
  0x01,         /* bEndpointAddress */
  0x02,         /* bmAttributes */
  LOBYTE(512),  /* wMaxPacketSize */
  HIBYTE(512),
  0x00,

  0x07,         /* bLength */
  0x05,         /* bDescriptorType */
  0x82,         /* bEndpointAddress */
  0x03,         /* bmAttributes */
  LOBYTE(8),    /* wMaxPacketSize */
  HIBYTE(8),
  0x04,         /* bInterval: */

Solo hay un descriptor de configuración, porque la placa de descubrimiento usa FullSpeed solamente. Para HighSpeed debe haber un PHY externo.

Gracias por cualquier ayuda.

También puedo enviar el registro de tráfico USB si es necesario.

    
pregunta Shadow2334

0 respuestas

Lea otras preguntas en las etiquetas