Crear un sniffer de comunicación [cerrado]

2

Insertar un punto de interrupción y verificar el resultado de los datos intercambiados entre 2 uC tienden a interferir con los tiempos y otros factores. ¿Hay alguna forma en la que pueda rastrear todos los datos intercambiados entre 2 uC y almacenarlos en un archivo de registro que pueda interpretarse más adelante utilizando Python?

Incluso si significa que usar #define para habilitar y deshabilitar el registro en el código está bien. Simplemente no quiero usar puntos de interrupción y verificar los resultados.

    

2 respuestas

4
  • Use dos canales RX de adaptador de puerto serie (adaptadores usb ftdi), uno para cada dirección. Realterm tiene un modo de Monitor donde tomará el RX desde dos puertos diferentes y lo intercalará en la pantalla en diferentes colores. Querrá una versión reciente . Si tiene un adaptador serie 2 / 4port de la vieja escuela (no usb), funcionará mejor en términos de no estropear el tiempo entre los dos canales. Si todo es bastante lento, no hay problemas. Realterm también puede poner marcas de tiempo en los datos si es útil.

  • Utilice un osciloscopio o un analizador lógico. Algunos pueden decodificar los datos por usted

  • use un solo puerto serie y O las dos direcciones juntas. Solo funciona si no hablan al mismo tiempo, y puedes darte una idea de lo que va y viene.
  • Haz un adaptador especial de un micro con dos uarts. Envíe cada byte de los datos entrantes como dos bytes, utilizando un bit para identificar de qué rx provino. [puede tener 1 bit para el canal, 1 para B7 de datos, 6 para una marca de tiempo o monitorear un par de pines]. Usando el adaptador usb ftdi, puede generar 3MB, lo que permitiría 150kBd en los canales de rx (en total). Este método también permitiría manejar protocolos de 9 bits. Arduino Mega sería perfecto para esto, ya que tiene 4 uarts y usb ya incorporados
respondido por el Henry Crun
0

Tengo 4 propuestas que creo que son las soluciones más fáciles. Henry ya ha propuesto 2, pero los he completado un poco.

Logic Analyzer

Hay algunos de ellos que se conectan directamente a su PC a través de USB, por lo que puede ver la señal medida directamente en su PC. Un software en la PC decodifica algunos protocolos como UART, I2C, SPI ... para que presente los datos enviados de forma más humana, no solo la señal eléctrica. No he probado muchos de ellos, pero tengo un clon muy barato (alrededor de 10 €) de Saleae Logic Analizer que te permite usar el software original de Saleae, que es excelente y gratuito.

Adaptador FTDI conectado a una unidad de usuario

Ftdi tiene adaptadores UART a USB, I2C a USB, SPI a USB ... elija el que necesita. La computadora lo reconoce como un puerto serie virtual, por lo que es muy fácil de leer y escribir, incluso desde su consola SO, sin necesidad de escribir código complicado para PC (ya sea Win, Linux, Mac ...)

El sitio web de FTDI no es muy intuitivo para navegar por su catálogo. Es mejor que busque en Google lo que necesita (por ejemplo, "FTDI USB to SPI").

Un uso posible es adjuntarlo a uno de los uC si tiene un periférico de comunicación no utilizado (y pines). Por ejemplo, si la comunicación entre los uC es I2C y uno de ellos tiene un puerto UART gratuito, compre un adaptador UART a USB. Luego, en el programa de ese uC, envías todos los datos enviados y recibidos a través de i2c al uart, para que tu PC también los reciba. Esto es más o menos lo mismo que propuso Henry.

El adaptador FTDI está conectado al mismo bus de comunicación que el de los uC

Otro posible uso es adjuntar el adaptador directamente a las rutas que conectan ambas unidades de control. De esta manera, no es necesario tener pines gratuitos, ni agregar ningún código al programa de la Universidad de Carolina del Norte.

En este caso, debe tener cuidado de no interrumpir la comunicación con el adaptador, no enviar ningún dato desde la PC.

Si la comunicación entre los uC se realiza con una comunicación de topología de bus, como I2C o SPI, puede usar un solo adaptador para leer los mensajes de ambos uC. Si la comunicación entre los uC se realiza a través de UART, necesitará 2 adaptadores.

Crea un registro en la memoria y pausa la ejecución un poco más tarde

Si la cantidad de datos que desea analizar no es demasiado grande, porque no se intercambian muchos datos o porque solo necesita analizar una pequeña cantidad de tiempo, puede crear grandes búferes en la memoria de los uC y almacenar allí Los datos recibidos. No utilice los puntos de interrupción para pausar la ejecución siempre que se reciban datos, simplemente deje que el programa se ejecute durante el tiempo que desee (5 segundos, por ejemplo). Luego, haga una pausa en la ejecución con el depurador e inspeccione el contenido del búfer.

Dependiendo del IDE que esté utilizando, a veces puede exportar los datos para una inspección más sencilla para sobresalir, por ejemplo (solía hacer esto con Microchip MPLAB X)

Puede hacerlo dependiendo de la cantidad de memoria libre que tenga en los uC y en la cantidad de datos que necesite registrar.

    
respondido por el naggety

Lea otras preguntas en las etiquetas