Estoy tratando de entender la necesidad de paquetes Cero en las transmisiones USB-CDC. De lo que deduzco, esto parece tocar algunas áreas grises de la especificación USB o las diferencias en la implementación de los controladores USB del host. Estoy interesado tanto en el comportamiento "correcto" (según la especificación de USB) como en el comportamiento típico en lo que respecta a los hosts USB normales (Linux, Windows, OSX). Cualquier apreciación relevante sería apreciada.
-
Un ejemplo hipotético de un dispositivo USB sería uno que se transmite a través de un único punto final de USB-CDC, simplemente generando y transmitiendo continuamente de forma infinita los bytes. Para este ejemplo, suponga que la generación de datos es considerablemente más lenta que la transmisión USB-CDC. El enfoque que me gustaría usar es recolectar 64 bytes de datos (tamaño del paquete del dispositivo), y cuando estén listos 64 bytes, transmita un solo paquete. Nunca se enviarán paquetes de cero, nunca se enviarán paquetes cortos. Cualquier sondeo iniciado por el host será NAK cuando no haya un paquete completo listo.
-
¿Es esta una forma válida de transmitir datos CDC?
-
¿Hay algún host USB que tenga problemas con este enfoque?
-
Si el dispositivo USB es un dispositivo USB compuesto, y uno de los puntos finales proporcionados es un punto final de CDC como se describe, ¿hay algún cambio en las respuestas de a. y b.?
-
-
En el dispositivo de 1., si, en lugar de enviar NAKs cuando no hay nada que enviar, el dispositivo debía enviar un paquete de 0, ¿es probable que aún funcione? ¿Cómo cambia la transmisión general, en términos de cómo la interpreta un emulador de puerto serie y / o el ancho de banda efectivo?
-
Si el dispositivo, en cambio, transmite unos pocos bytes, espera una respuesta. La longitud de estos "pocos" bytes no se conoce a priori. El host debe poder recibir, procesar y responder a estos pocos bytes; no puede simplemente sentarse en un búfer de hardware / controlador a la espera de que termine toda la transmisión. Supongamos, por el momento, que el receptor USB-CDC por dispositivo funciona de alguna manera y es estable. Todo lo que me interesa es la transmisión de paquetes cero desde el dispositivo.
-
Si el número de bytes a enviar no es un múltiplo de 64 bytes (tamaño del paquete), entonces simplemente terminar con el paquete 'corto' sería suficiente para marcar el final de la transmisión, ¿sí?
-
Si el número de bytes que se enviará es un múltiplo de 64 (tamaño de paquete), ¿qué sucede si no se envía un paquete cero después del último paquete transmitido para marcar el final de la transmisión?
-