¿Cómo puedo averiguar la velocidad de un UART desconocido?

Así que tengo una pieza de hardware que estoy haciendo ingeniería inversa. Creo que he encontrado un UART en el tablero. Tengo un FPGA conectado que solo hace:

ExtTX <= PCRX;
PCTX <= ExtRX;

Entonces, de esta manera, teóricamente puedo manejar cualquier velocidad del FTDI en mi FPGA (que es bastante rápido). Entonces, tengo la parte del hardware cubierta. Ahora, sin embargo, usando Linux (o Windows), ¿cómo puedo averiguar cuál debería ser la velocidad y los bits de parada y otras opciones de configuración de la conexión en serie?

Supongo que no tienes ningún tipo de analizador lógico...

Respuestas (3)

Quiere medir el tiempo de transición-transición más corto.

Esto, asumiendo que el bus que está viendo tiene un contenido decentemente variado, le indicará el tiempo de bits para la interfaz serial. Luego puede pasar de eso a la tasa de baudios general.


Sin embargo, si se toma en serio la ingeniería inversa o cualquier tipo de ingeniería eléctrica, necesitará un osciloscopio (y probablemente un analizador lógico), por lo que debería pensar en comprar uno pronto.

Los he estado mirando, pero ¡hombre, son caros!
@Earlz: podría construir un analizador lógico en su FPGA: sump.org/projects/analyzer , pero también necesita un alcance :)
Para ese tipo de velocidad, puedes comprar un osciloscopio barato en e-bay, compré uno por $80 y funciona muy bien hasta 1MHz.
@Earlz - ¿Caro? ¡Ja, creo que se han vuelto ridículamente baratos! Puede obtener un alcance sorprendentemente capaz por ~ $ 400 en estos días.
@MartinThompson eso es en realidad lo que terminé haciendo, pero ahora me estoy yendo por la tangente porque no pude hacer que su cliente Java funcionara después de 3 horas de jugar con él. Aparentemente, una de sus dependencias no admite máquinas de 64 bits, ni nada más nuevo que Linux kernel 2.6. Entonces, estoy creando mi propio cliente minimalista.

Con un poco de suerte, la fuerza bruta a veces puede ser más rápida que sacar su osciloscopio o analizador lógico (o su única opción cuando no tiene este tipo de equipo).

Tengo un cable USB<=>Serial por ahí que uso para estos desafíos. Solo conecto los cables GND y RxD al circuito y solo trato de capturar datos. Por lo general, empiezo en 9600 8N1 (que es bastante común), donde 9600 es la tasa de baudios, 8 es la cantidad de bits de datos, N es la abreviatura de sin paridad y 1 es la cantidad de bits de parada.

El método lento es usar un programa como PuTTY y configurarlo para cada Baudrate que quieras probar, mi método rápido es un script de Perl al que puedo acceder desde la línea de comando y toma la Baudrate como opción, seguido de una herramienta que hexdump los datos recibió. Aquí hay un ejemplo (Linux):

cat_usbCable --baudrate=2400 | hexdump -C
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 3e 00 01 00 00 00  40 13 40 00 00 00 00 00  |..>.....@.@.....|
00000020  40 00 00 00 00 00 00 00  c8 62 00 00 00 00 00 00  |@........b......|
00000030  00 00 00 00 40 00 38 00  09 00 40 00 1c 00 1b 00  |....@.8...@.....|

Las velocidades de transmisión comunes son: 300, 600, 1200 , 2400, 4800, 9600 , 14400, 19200, 38400, 57600 , 115200 .

La opción de alcance funciona cuando se trata de tasas no estándar como 125000. Eso solo sucedió una vez, aunque...

La forma más sencilla sería usar un analizador lógico con un decodificador RS232 incorporado o un osciloscopio para sondear las señales.

Si no tiene esas herramientas disponibles, probablemente necesitará escribir un decodificador para su FPGA para calcular los tiempos de bits y palabras usando un reloj de referencia.