Hacer un reenvío de un UART a otro UART

1

Estoy trabajando con la TI TM4C MCU. Conectado a una UART de este MCU, tengo un módulo GSM o un módulo GPS (digamos UART1 ). Necesito establecer comunicación entre la MCU y el módulo enviando algunos "comandos AT" y recibiendo algunas respuestas para verificar qué está haciendo el módulo.

Por lo tanto, necesito ver qué comandos AT son enviados por la MCU al módulo y debo ver qué responde el módulo a la MCU. Por supuesto, esos comandos se definen a través de archivos C, pero necesito verificar qué se envía cuándo y cómo y qué se recibe cuándo y cómo.

Supongo que no puedo usar CCS para visualizar esos flujos de datos, ¿correcto?

Por lo tanto, para lograr esto, estoy pensando en usar MCU UART0 y conectarlo a mi computadora, donde uso el software "Tera Term" para recibir una copia de lo que envía y recibe la MCU en UART1 .

No soy un experto en C, pero tengo alguna noción de ello. Encontré algún ejemplo de uso de UART en el taller de laboratorio de TI para TM4C, pero no estoy completamente seguro de cómo implementar este "reenvío" (copia similar). Creo que necesito copiar el valor en el FIFO / búfer de UART1 a UART0 y luego enviarlos a UART0 .

Estoy un poco confundido acerca de cómo operarlo.

Apreciaría si alguien tuviera experiencia al respecto para explicar cómo procesa normalmente analizar el envío y la recepción de datos a través de UART, que no están directamente vinculados a un terminal de computadora.

    
pregunta chris

2 respuestas

1
  

No estoy seguro de cómo implementar este "reenvío" (copiar como)

Una alternativa (a menudo más rápida) a este tipo de enfoque de "reenvío" de software , es monitorear las dos señales que menciona, directamente a través de hardware.

No tengo mucho tiempo, así que disculpe la falta de un diagrama en este momento. En resumen:

MCU Tx -> GSM module Rx - > Aquí conecte Rx of UART-to-USB adapter 1
MCU Rx <- GSM module Tx - > Aquí conecte Rx of UART-to-USB adapter 2

Nota: Solo conecta las entradas Rx de esos dos adaptadores de UART a USB. Deje los pines Tx de esos adaptadores desconectados.

Luego puedes monitorear (y, aunque olvidé el nombre en este momento, estoy seguro de que he usado software para fusionar o ver) estas dos secuencias de datos en una PC. Incluso podría ejecutar dos copias simultáneas de "Tera Term" como sugirió, una abriendo el puerto COM para UART-to-USB adapter 1 ; la otra abriendo el puerto COM de PC para UART-to-USB adapter 2 .

Esto evita agregar complejidad en la MCU ahora. Puede agregar esta funcionalidad MCU más adelante, si lo necesita y cuando haya aprendido esas habilidades de programación. Sin embargo, durante el desarrollo, el monitoreo de hardware puede ser una forma más rápida de lograr el resultado final (es decir, monitorear los flujos de datos en serie) que desee.

    
respondido por el SamGibson
0

Un enfoque totalmente diferente sería utilizar una conexión de depurador JTAG (si tiene una) de nuevo a la PC, si no le importa que no esté usando UART0 para la conexión de la PC. (Gracias a Chris Stratton por sus comentarios sobre mi otra sugerencia, que me recordó esta posibilidad).

Si su TM4C está conectado a través de JTAG a un depurador USB-JTAG típico (yo uso Segger, pero creo que el depurador integrado en el Launchpad de TM4C tiene una funcionalidad similar), entonces puede enviar cadenas de texto simples al host , que se mostrará en una ventana del depurador (la presentación de los datos depende del software de su PC y de la cadena de herramientas).

Sería fácil duplicar cualquier envío de datos a su UART1 también al puerto ITM de Cortex-M en el TM4C. Un enfoque común es escribir (o usar, si ya está incluido en su cadena de herramientas) una simple rutina printf() que escribe en el puerto ITM y puede llamarse como cualquier otra función C. Luego, cuando recibe datos de su módulo GPS / GSM externo, su código MCU nuevamente usa printf() para enviar esos datos al puerto ITM y, por lo tanto, a la PC.

Necesitaría crear algún tipo de codificación para diferenciar los datos "enviar" y "recibir", ya que printf() ambos al puerto ITM, por ejemplo. prefije una cadena enviada al módulo externo con "S:" cuando printf() la PC, de modo que en la PC pueda ver que estaba S al módulo. Algo similar con los caracteres R se recibió del módulo.

Este es solo otro enfoque, con ventajas y desventajas, en comparación con mi sugerencia anterior, o en comparación con el reenvío a otra UART en la MCU. Dependiendo de lo que realmente quiera hacer (es decir, ¿realmente desea aprender la programación de UART, o realmente desea monitorear los datos que mencionó? ¿Le importa hacer más programación de MCU o prefiere hacerlo? una solución que es principalmente hardware y no hay programación adicional de MCU), entonces usted tiene opciones. Como es típico en la ingeniería, no existe una única solución de "talla única": tiene varias opciones, con diferentes compromisos, entre las cuales puede elegir. :-)

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas