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.
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
Transeúnte
Ashton H.
Ignacio Vázquez-Abrams
Transeúnte
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