¿Es posible dividir las solicitudes de control USB 2.0?

Estoy desarrollando una aplicación para microcontrolador con USB integrado. Se supone que la aplicación es lo más portátil posible, por lo que no puedo señalar a una familia en particular.

Estoy en el proceso de leer el descriptor de configuración de un dispositivo, sin embargo, es demasiado largo para caber en mi búfer interno. No puedo usar la memoria dinámica para esto, por lo que se debe asignar estáticamente un búfer para las transferencias de control y realmente quiero minimizar su tamaño dado que no se usará mucho. Así que asignarle un par de Kb solo para este descriptor de cfg no es una opción.

No lo he encontrado en el estándar, pero tal vez no me he visto lo suficientemente bien... ¿es posible dividir las solicitudes de control en varias? Por ejemplo, solicite 128 (o lo que sea) bytes del cfg desc, luego solicite otros 128 bytes del mismo descriptor, por supuesto, estos tendrían que devolverse con un desplazamiento de 128 para dar cuenta de los ya leídos, y así sucesivamente.

es posible?

Gracias a todos por su tiempo.

Creo que puede limitar el tamaño transferido, pero no puede comenzar con algún desplazamiento. La forma obvia de resolver eso (puede o no ser la mejor) es realizar un seguimiento de dónde se encuentra y solicitar lo mismo varias veces.
Bienvenido a SE, por cierto.
Gracias =) El problema es que no puedo guardar el descriptor completo en la memoria, así que no puedo solicitarlo varias veces porque nunca lo tendré completo. Por ejemplo, digamos que tengo un búfer de 1k y el descriptor es 2,5k.
Ah, sí, olvidé que esto es USB, no UART, SPI u otro protocolo de byte a la vez. Pero, si de alguna manera puedes ver entrar bytes individuales, entonces mi idea aún se mantiene. Para leer algo en el medio, simplemente deje pasar los primeros N bytes antes de comenzar a grabar.
Sí, eso es verdad. Esperaba que algo como esto fuera posible para no tener que modificar los controladores de nivel inferior (lo que ayudaría mucho a la portabilidad)... pero supongo que no =(
No hace mucho tiempo, escribí un controlador USB HID para el extremo del dispositivo y recuerdo algo en la especificación sobre transferencias de tamaño limitado. Sin embargo, no recuerdo todos los detalles, por lo que podría haberse referido al tamaño limitado de un paquete HID en general. Esperemos a ver si alguien más se apunta.
Me hiciste darme cuenta de que mezclé los términos transacción y solicitud en mi pregunta, lo arreglaré. Creo que el límite de transferencia depende de la implementación del lado del host. Gracias por la ayuda, esperaré a ver si alguien puede comentar más sobre esto.

Respuestas (1)

En lugar de solicitar el descriptor de configuración y reunir todos los descriptores de interfaz y punto final, puede solicitar los descriptores de uno en uno. Un descriptor de dispositivo tiene 18 bytes y los otros descriptores estándar son aún más pequeños. (Los descriptores de clase pueden ser más grandes, así que elija el más grande que necesite como tamaño de búfer). Deberá analizar los descriptores para averiguar qué más solicitar, pero eso no es mucho trabajo adicional. El descriptor del dispositivo proporciona el número de configuraciones, config proporciona el número de interfaces e interface proporciona el número de puntos finales y la clase.

Oh, no me había dado cuenta de que podía hacer eso. ¿Quiere decir solicitar el cfg desc solo lo suficiente para analizar cuántas interfaces hay y luego solicitar cada descriptor de interfaz (y puntos finales) uno a la vez?
Sí, eso es exactamente lo que quiero decir.