¿Es posible que el puerto COM virtual de ST-LINK funcione sin iniciar ningún programa en Ubuntu?

1

Hice algo de desarrollo en una placa Nucleo-64 (específicamente NUCLEO-F303RE con el microcontrolador STM32F303RE) y usé OpenOCD y GDB con target remote :3333 para actualizar mi código (con load ) en mi microcontrolador.

Durante este tiempo, utilicé el puerto COM virtual del ST-LINK en mi máquina con Linux (Ubuntu 16.04 (Xenial Xerus)) para hablar con el USART del microcontrolador. Ahora me gustaría usar el puerto COM virtual para hablar con el microcontrolador sin necesidad de iniciar OpenOCD o GDB.

Me sorprendió descubrir que esto no solo funciona. Los síntomas son que mi dispositivo no recibe bytes enviados por el host ni viceversa. (Detecto que los bytes que llegan al dispositivo de destino parpadean un LED). Por lo tanto, parece que el estado del microcontrolador ST-LINK, o quizás el kernel de Linux en mi máquina host, se modifica de alguna manera por el proceso de conexión a través de OpenOCD y flasheando el programa.

Mi pregunta principal es: ¿es posible acceder a este estado de trabajo del puerto COM virtual en mi máquina Ubuntu 16.04 sin iniciar OpenOCD o GDB? Idealmente, no necesitaría usar ningún programa adicional, pero tal vez solo cambie alguna configuración.

Mi segunda pregunta es: ¿Por qué sucede esto? ¿El dispositivo ST-LINK está cambiando de modo aquí?

Y mi tercera pregunta: ¿Por qué sucede lo siguiente y qué puedo hacer al respecto? A veces, incluso después de un parpadeo exitoso, el microcontrolador de destino puede enviar bytes con éxito, pero no puede recibirlos. Además, creo que una de mis tarjetas no puede enviar ni recibir bytes con este método, aunque el firmware parece cargarse bien.

En MacOS 10.12.1, mi microcontrolador de destino se conecta inmediatamente y se puede acceder a él como se desee (sin que se ejecute ningún comando ni parpadee el firmware) a través del puerto COM virtual en, por ejemplo. %código%. Por lo tanto, ahora sospecho que el problema está relacionado con el lado del kernel de Linux y el controlador que crea /dev/tty.usbmodem1423 .

    
pregunta Andrew Straw

1 respuesta

3

No debe haber interacción real entre GDB o OpenOCD y el puerto serie virtual de una placa de descubrimiento o Nucleo STM32, sin embargo, el paquete modemmanager instalado de manera predeterminada en Ubuntu y las distribuciones derivadas demorarán sustancialmente la disponibilidad del dispositivo CDC / ACM después de cada reinicio, que normalmente incluye no solo conexiones sino también algunas operaciones de programación (al menos aquellas que utilizan la emulación de almacenamiento masivo).

Las cosas funcionarán mucho mejor con modemmanger desinstalado. No discuta sobre esto hasta que haya intentado eliminarlo : el problema está detrás de la escena, una demora en el sistema operativo que hace que el puerto esté disponible para los programas del usuario. Hace la diferencia porque las placas son esencialmente inútiles y funcionan bastante bien (una regla udev o una lista negra de controladores para ignorar la emulación de almacenamiento masivo marginalmente dañada también es una buena idea)

Sin embargo, es probable que todavía necesite establecer una configuración de línea serie apropiada, con algo como stty si no es un programa de terminal real, sin eso (y posiblemente incluso después) no puede simplemente usar algo como cat que ignora los detalles del puerto serie para interactuar con el puerto (aunque a menudo, si tiene un programa de terminal en ejecución, puede usar echo o cat y un shell redirigir para escribir líneas específicas)

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas