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.