Estoy tratando de comprender la necesidad de Cero paquetes en USB-CDC transmisiones. Por lo que pude ver, esto parece tocar algunas zonas grises de la USB especificaciones técnicas, o en las diferencias en la aplicación de host USB drivers. Estoy interesado tanto en el 'correcto' comportamiento (según la especificación USB) y la conducta típica como medida de como regular los puertos USB (Linux, Windows, OSX). Cualquier los conocimientos pertinentes, se agradecería.
Un ejemplo hipotético de un dispositivo USB sería aquella que se transmite a través de una simple conexión USB-CDC extremo, simplemente continuamente la generación y transmisión de bytes infinitamente. Para este ejemplo, se asume que la generación de datos es considerablemente más lento que el USB-CDC transmisión. El enfoque me gustaría usar es recoger 64 bytes de datos (dispositivo de tamaño de paquete), y cuando de 64 bytes están listos, transmitir un solo paquete. No cero paquetes jamás se envía, no hay paquetes cortos se ha enviado. Cualquier host-iniciada la votación va a estar Desnudo cuando no hay ningún paquete completo listo.
Es este un camino válido para transmitir los datos de los CDC?
Hay alguno de los puertos USB que se sabe que tienen problemas con este enfoque?
Si el dispositivo USB es un dispositivo USB compuesto, y uno de los extremos es un CDC extremo como se describe, ¿hay algún cambio a las respuestas de. y b.?
En el dispositivo de 1., si, en lugar de enviar NAKs cuando no hay nada que enviar, el dispositivo envía una 0 de paquetes, es probable que todavía funcionan? ¿Cómo funciona el total de la transmisión, cambio - en términos de cómo se interpreta el emulador de puerto serie y/o el ancho de banda efectivo?
Si el dispositivo, en cambio, transmite un par de bytes, a la espera de una respuesta. La longitud de estos "pocos" los bytes no es conocido apriori. El host debe ser capaz de recibir, procesar y responder a estos pocos bytes - que no puede simplemente sentarse en un hardware / buffer del controlador de espera para la transmisión final. Supongamos por el momento que el USB-CDC recibe-por-el-dispositivo de alguna manera es trabajando y estable. Lo único que me interesa en cero la transmisión de paquetes desde el dispositivo.
Si el número de bytes que se envían no es un múltiplo de 64 bytes (tamaño de paquete), luego simplemente termina con el 'short' de paquetes sería suficiente para marcar el final de la transmisión, ¿sí?
Si el número de bytes a enviar es un múltiplo de 64 (tamaño de paquete), entonces, ¿qué sucede si un cero paquete no es recibido después de la última transmisión de paquetes para marcar el final de la transmisión?