ingeniería inversa de un protocolo serie con un alcance

0

En lugar de un dispositivo de captura en serie, podemos ver la salida de una fuente rs-232 y correlacionar lo que vemos en el alcance con las representaciones ASCII / hexadecimal (¿ciertos voltajes tienden a corresponder con esta representación de caracteres o que ¿Representación de caracteres? Los trazos de línea y retornos de carro vienen a la mente) o hay demasiadas variables para realizar ingeniería inversa de un protocolo en serie de esta manera?

    
pregunta inbinder

4 respuestas

3

La dificultad para capturar y analizar las señales RS-232 en un alcance es que el impulso de inicio, donde el voltaje cae primero de un nivel lógico alto a uno bajo (si uno está mirando los niveles de UART), o aumenta desde un voltaje negativo a uno positivo (si uno está mirando los niveles de RS-232) - se ve igual que cualquier otro bit, por lo que puede ser difícil disparar en el primer borde (ya sea al final o al principio) del pulso de inicio de el primer personaje.

Si dispara en uno de los bordes iniciales de los bits (ya sea el bit de inicio u otro, si su barrido se establece para que pueda capturar más de un carácter, entonces podrá ver cualquier carácter completo) después del disparo: la señal debe dividirse en caracteres, ya que el bit de parada es más largo que los otros. Mire el bit de inicio, y luego, desde la mitad del bit de inicio, la mitad de los bits que siguen dependerá de la velocidad en baudios. A 9600 baudios, es decir, 104 µS, y a 115.200 baudios, es de 8,68 µS, por ejemplo.

Losdatosenlosdosbytes(0x3Dy0x68)podríanserdatoshexadecimalesconlosvaloresquesemuestran,ocaracteresASCII,tambiéndados.Sinotrocontextoesimposibledecirlo.

EldiagramasuperiormuestralosnivelesdeRS-232queveríaenunpuertoCOMdelaPC(queyanoseve)ouncableUSBaRS-232.Lacondicióndeseparaciónoinactividad(0)esunvoltajenegativoentre-5y-12v,yunacondicióndemarcado(1)esunvoltajepositivoentre+5y+12.

EstediagramainferiormuestralosniveleslógicosqueveríaenloscablesdeTXyRXdeunUART.Tengaencuentaquelosbitsestáninvertidos:unnivellógicoaltoesun0(llamadoespacio)yunnivellógicobajoesun1(marcado).

Aquí hay una tabla para convertir los bits a ASCII.

Dicho esto, muchos ámbitos ahora vienen con analizadores de protocolo para UART, I2C y SPI, ya sea estándar o un módulo opcional que puede comprar. O puede comprar un analizador lógico independiente que muestra la forma de onda utilizando una PC como pantalla.

    
respondido por el tcrosley
7

No tengo idea de lo que quieres decir con "X" y "Z".

La forma estándar de aplicar ingeniería inversa a una señal RS-232 sería:

  • Usa el osciloscopio para calcular la velocidad en baudios. por ejemplo, un ancho de pulso de 0,104 ms indicaría 9600 baudios. (\ $ \ frac {1} {0.104m} = 9600) \ $.
  • Use el osciloscopio para calcular el número de bits.
  • Cuente los bits y vea si el último bit cambia de estado para mantener la paridad par o impar. Si no puede ver un patrón, no puede asumir ningún bit de paridad.
  • Conecte un PC que ejecute un emulador de terminal como PuTTY.
  • Establezca la velocidad en baudios para que coincida y pruebe varias combinaciones de paridad y bits de parada hasta que comience a ver datos razonables.

Eso te dará los datos seriales en bruto. Ahora tienes que averiguar qué significa.

    
respondido por el Transistor
6

Determine la velocidad en baudios, parada, inicio, paridad con alcance. Luego use una ventana de terminal de computadora para capturar el tráfico. Aún mejor sería usar Wireshark con PCAP y usb al convertidor rs232. Si el protocolo en serie es uno de los protocolos conocidos por Wireshark, detectará y diseccionará los paquetes de datos automáticamente.

    
respondido por el Marko Buršič
0

Nota RS232 es un estándar de voltaje, no define un protocolo. Define qué es un uno y un cero, y pinouts para los conectores.

En cuanto a la decodificación del protocolo serie en un ámbito, no siempre es posible (a menudo no es posible), y aunque los ámbitos tienen decodificadores uart, i2c, etc., no siempre hacen un buen trabajo, por lo que es mejor tomar cualquier cosa. El alcance te lo dice con un grano de sal y lo descifras tú mismo. Perderá mucho tiempo depurando algo suponiendo que el software de alcance es correcto (para cualquier protocolo en serie, no solo un protocolo de estilo uart).

En cuanto a un protocolo en serie, la única vez que tendrá una oportunidad es si hay un período largo (más que un carácter) entre el bit de parada y el siguiente bit de inicio. Desde el alcance con suficientes caracteres puede determinar la velocidad en baudios.

Al realizar una inspección con o sin software o hardware, es posible que no pueda determinar cuántos bits de datos, si hay paridad o no, cuántos bits de parada. Si logra capturar un carácter de forma aislada (tiene muchos bits de parada / inactividad antes y muchos después (y en otros lugares ha determinado la velocidad de bits), puede averiguar cuántos bits forman un carácter, pero aún no sabrá si existe paridad o no, por lo que aún no puede hacer suposiciones en cuanto a los valores de esos caracteres.

Si conoces el tamaño del personaje y la paridad, puedes llegar más rápido, pero aún tienes que resolver los errores de encuadre que se deciden desde la mitad de un flujo continuo. Si hay suficientes períodos de inactividad antes de un bit de inicio para asegurarse de que realmente es un bit de inicio, y conoce la longitud de los datos y si hay paridad, qué tipo y número de bits de parada, esa es su mejor apuesta para la decodificación manual ( o si el software de alcance intenta hacerlo, compruebe a mano los primeros caracteres o más de las conjeturas del alcance para asegurarse de que lo está haciendo bien).

El decodificador de los ámbitos, si alguno y cualesquiera uarts reales, tendrán su propia opinión de cómo se descodifican los datos, comenzando en la mitad de una secuencia, cada uno tendrá su propia manera de resolver errores de trama e intentar sincronizar. de nuevo, eventualmente deberían hacerlo todos, si conocen los parámetros del protocolo (bits de datos, paridad, bits de parada, baudios) deberían bloquearse si valen la pena usarlos. Es posible que no haya capturado suficientes datos en una secuencia para trabajar con el software de alcance o manualmente.

Así que necesitarás suficientes caracteres diferentes para convencerte de cuál es la velocidad en baudios / bits. Pero necesita algunos períodos muertos alrededor de los caracteres individuales para aislar uno y determinar los bits en un carácter. Y si captura un período muerto antes de un flujo de caracteres, al menos tendrá un buen comienzo en la decodificación si conoce los bits de datos, la paridad y los bits de parada.

Recuerde que RS232 está básicamente invertido, un uno es un valor negativo y un cero es un positivo. Y los protocolos de uart normalmente son lsbit primero.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas