¿El controlador Microchip USB-CDC amortigua su salida?

Estoy tratando de comunicarme entre una computadora y un PIC32 usando el controlador de dispositivo CDC de las bibliotecas de aplicaciones de Microchip. Tengo un problema, en el que si emito algunas oraciones usando, putrsUSBUSART()no recibo nada. Sin embargo, si agrego eso con un bucle que envía spam, por ejemplo, "prueba\r\n", eventualmente los recibo (y al menos algunas de las oraciones que quería ver).

Estoy usando minicom en una caja de Linux como mi programa de terminal. Si el controlador CDC no debe hacer eso, tendré que mirar el programa del controlador/terminal del host a continuación.

Respuestas (2)

Parece que está utilizando una llamada de salida que desciende o está diseñada para imitar las opciones de venta. puts()es tradicionalmente una función de flujo y, por lo tanto, no se debe esperar que comprometa necesariamente la salida hasta que ocurra algo como:

  • ve un carácter de fin de línea
  • llena un búfer interno
  • decides llamar a fflush() en stdout

(y tal vez algunos otros factores desencadenantes relacionados que no vienen a la mente de inmediato)


Como USB es una interfaz empaquetada, también podría tener un algoritmo inadecuado en el firmware para decidir cuándo vale la pena enviar un paquete.


Finalmente, mientras que el controlador CDC-ACM debe ser independiente del proveedor, la API serie posix mediante la cual los programas de aplicación acceden a él se puede configurar para una amplia variedad de comportamientos. Los programas de terminal normalmente lo colocan en un modo bastante crudo y receptivo, pero si termina escribiendo su propio cliente, es probable que necesite algunos ajustes de termios. Puedes jugar con muchas de estas configuraciones desde la línea de comandos usando el sttyprograma.

Me encanta trabajar con USB. Cuando no funciona, debe averiguar si el problema está en el descriptor, su pila USB, el resto de su firmware o el hardware. ¡Las herramientas que pueden ayudarlo a hacer esto de la mejor manera a menudo son costosas! Hay pocas cosas que me satisfagan más que escuchar el GADUNK de un periférico USB enumerado correctamente.
De hecho (menos los efectos de sonido del sistema operativo del consumidor). Aprendí a no hacer una placa conectada por USB sin romper al menos un UART... ¡para que los mensajes de depuración averigüen por qué el USB no funciona!
@varesa - por curiosidad, ¿qué terminaste haciendo?

Siempre diseño cosas con al menos un puerto serial RS232. Intento encarecidamente conectar esto al UART que usa el cargador de arranque, si está presente.

Razones:

1.) Porque se puede usar para depurar otros subsistemas (USB incluido)

2.) Porque es un puerto confiable donde puedo descargar el firmware cuando nada más funciona

La placa (de desarrollo) tiene un puerto serie con convertidor de nivel y un conector D9. Tal vez debería configurar eso para depurar el bus que estoy tratando de usar para depurar otras cosas: D
Creo que verá un gran beneficio al hacer eso.