¿El controlador Microchip USB-CDC almacena en búfer su salida?

1

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

Estoy utilizando minicom en un cuadro de Linux como mi programa de terminal. Si el controlador CDC no lo hace, tendré que ver el programa del controlador / terminal del host a continuación.

    
pregunta varesa

2 respuestas

2

Suena como si estuvieras usando una llamada de salida descendida o elaborada en imitación de entradas. puts() es tradicionalmente una función stream y, por lo tanto, no debe esperarse que confirme necesariamente la salida hasta que ocurra algo como:

  • ve un carácter de fin de línea
  • llena un búfer interno
  • decide llamar a fflush () en la salida estándar

(y quizás algunos otros desencadenantes relacionados que no vienen inmediatamente a la mente)

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 por la cual los programas de aplicación pueden acceder a ella puede configurarse para una amplia variedad de comportamientos. Los programas de terminal normalmente lo ponen en un modo bastante crudo y sensible, pero si terminas escribiendo tu propio cliente probablemente necesitarás algunos ajustes de termios. Puedes jugar con muchas de estas configuraciones desde la línea de comandos usando el programa stty .

    
respondido por el Chris Stratton
1

Siempre diseño cosas con al menos un puerto serie RS232. Intento fuertemente hacer esto conectado al UART que usa el gestor de arranque, si está presente.

Motivos:

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

    
respondido por el daniel.franzini

Lea otras preguntas en las etiquetas