¿Qué clase de USB debo implementar?

Estoy jugando con la placa Discovery STM32F4 y libopencm3 . Quiero enviar datos adquiridos de los canales ADC a través de USB y mostrar algunos gráficos en la computadora. Después de investigar un poco sobre los códigos de clase USB, estoy un poco confundido: ¿cuál debo elegir para mi aplicación? Al principio estaba pensando que USB-CDC era el camino a seguir, ya que es más fácil de implementar, pero no creo que sea la solución óptima.

ADC? Prueba Audio USB. Facilita el acceso desde muchas aplicaciones.
Por lo que entiendo, el audio USB requiere una frecuencia de muestreo definida. ¿Causará problemas si elijo una frecuencia de muestreo superior a 196 kHz?
Yo diría HID, puramente desde un punto de vista de "suena bien".
A single isochronous transfer can carry 1024 bytes, and can carry at most 256 samples (at 24/32 bits). This means that a single isochronous endpoint can transfer 42 channels at 48 kHz, or 10 channels at 192 kHz (assuming that High Speed USB is used - Full Speed USB cannot carry more than a single stereo IN and OUT pair at 48 kHz).consulte edn.com/design/consumer/4376143/Fundamentals-of-USB-Audio

Respuestas (1)

La clase USB CDC es fácil de implementar y usar, ya que en el lado de la PC crea un puerto COM virtual. Puede probar fácilmente la interfaz con un programa como RealTerm , que puede mostrar datos ASCII o binarios. Deberá escribir un programa para capturar los datos, convertirlos a ASCII y guardarlos en un archivo para ingresarlos a un programa de hoja de cálculo como Excel para hacer el gráfico.

El único problema es que el número de puerto COM que se asigna generalmente no se puede predecir de antemano, por lo que debe tener algún tipo de archivo de configuración que especifique cuál usar (una vez que el sistema elige un puerto COM para el dispositivo USB, debería continuar usando el mismo después de eso).

No menciona qué velocidades de datos necesita admitir o cuánto tiempo una muestra. A 115K baudios, puede enviar una muestra de ADC (12 bits, ampliada a 16) en poco menos de 175 µS, o alrededor de 5000 kHz. Supongo que necesitas algo más rápido que eso. Dado que tiene 192 K de RAM disponibles, puede almacenar en búfer hasta 90 000 o más muestras. A 44,1 kHz, eso es un poco más de dos segundos.

Si va a muestrear primero y luego enviar, es posible que la clase HID le resulte aún más fácil de usar. Puede presentarse como un teclado virtual, por lo que no hay software para escribir en el lado de la PC. Puede abrir un programa como Excel, y siempre que el firmware en el STM32F4 envíe los datos como caracteres ASCII seguidos de un avance de línea/carro para cada muestra, cada línea se ingresará como una fila adicional en la hoja de cálculo, listo para graficar

Bien explicado, gracias. Supongo que me quedaré con CDC por ahora y cambiaré a HID después de familiarizarme más con la pila USB.
¿Hay alguna forma de que un dispositivo CDC con un vid/pid personalizado use automáticamente los controladores que existirán en una máquina Windows típica, como lo han hecho los dispositivos HID desde el primer día? Es posible que HID no ofrezca tanto rendimiento como un CDC, pero hay mucho que decir sobre "plug and play".
@supercat Estoy seguro de que la razón por la que todos los dispositivos HID pueden usar el mismo controlador es que había un estándar estricto para el protocolo para teclado y mouse, por lo que cualquier BIOS podría usarlos sin controladores especiales. Este no era un requisito para los dispositivos CDC y diferentes hardware requerían diferentes controladores. Después de un tiempo, las marcas más populares (por ejemplo, FTDI) incluyeron sus controladores con Windows; pero los pequeños tienen que enviar un disco junto con su producto o proporcionar una dirección web para una descarga.
A partir de 2018, Windows 10 se envía con soporte listo para usar para dispositivos USB CDC (como puertos COM virtuales).