Skip to content

Captura y visualización de señales

Juan Gonzalez-Gomez edited this page Mar 14, 2023 · 13 revisions

Introducción

Para desarrollar los circuitos necesitamos ver las señales implicadas. Una manera es utilizando un analizador lógico. Pero también es posible crear nuestra propia herramienta dentro del circuito. Un ejemplo es el LEDOscopio, que muestra la información en los LEDs

En vez de visualizar en los LEDs, o además de, también podemos conectar un transmisor serie para enviar las muestras al ordenador, y luego visualizarlas con algún programa

En este documento haremos experimentos, y mostrando los resultados obtenidos

LOG

2023-03-14

Una herramienta muy buena para visualizar es el PulseView, que permite importar un archivo con las muestras. El que vamos a utilizar es el formato .raw. Este formato contiene las muestras (de 1 byte). Cada bit se corresponde con un canal (tenemos 8 canales en total).

Para probarlo vamos a generar nuestro propio fichero binario, de 2 muestras: test-2.raw

Le he preguntado Chat-GPT cómo crear un fichero binario que contenga los bytes 0,1 y 3:

Como pueo crear un fichero binario con los bytes 0, 1 y 3 desde la consola (bash)

Y esta es su respuesta:

Para crear un archivo binario con los bytes 0, 1 y 3 desde la consola de Bash, puedes utilizar el comando echo junto con la opción -ne para que los caracteres sean interpretados como bytes y no como caracteres ASCII.

El siguiente comando te permitirá crear un archivo llamado "archivo.bin" que contenga los bytes 0x00, 0x01 y 0x03 en secuencia:

echo -ne "\x00\x01\x03" > archivo.bin

Este comando utiliza la secuencia de escape \x para representar los bytes en hexadecimal.

Luego, el operador > redirige la salida del comando echo al archivo "archivo.bin". Si el archivo ya existe, el comando sobrescribirá su contenido; de lo contrario, lo creará.

Puedes verificar el contenido del archivo recién creado utilizando el comando hexdump de la siguiente manera:

hexdump -C archivo.bin

Este comando muestra el contenido del archivo en formato hexadecimal. La salida debería ser similar a la siguiente:

00000000  00 01 03                                          |...|
00000003

Vamos a probarlo. Este es el comando que ejecuto:

obijuan@Hoth:~
$ echo -ne "\x00\x01" > test-2.raw

Comprobamos que efectivamente el fichero test-2.raw contiene lo que hemos indicado:

$ hd test-2.raw 
00000000  00 01                                             |..|
00000002

También lo podmeos ver con la extensión hex editor del Visual Code:

Ahora lanzamos el PulseView y nos vamos a la opción Open/Import Raw Binary logic data

Seleccionamos el archivo test-2.raw. Nos aparece una nueva ventana donde opcionalmente podemos indicar la frecuencia de muestreo. Ponemos 12000000 (12Mhz), que es la frecuencia del reloj del sistema de la Alhambra II:

Pinchamos en OK. Nos aparecen los 8 canales

Vemos cómo efectivamente hay 2 muestras. Todas están a 0 salvo el canal 0 que está a 0 (muestrea 0x00) y luego se pone a 1 (0x01)

Repetimos el proceso, pero ahora generando 10 muestras, con los valores 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00 y 0x00:

obijuan@Hoth:~
$ echo -ne "x01\x02\x04\x08\x10\x20\x40\x80\x00\x00" > test-10.raw

Lo guardamos en el fichero test-10.raw. Y ahora lo importamos en el PulseView:

Para poder ver los valores de las muestras, usamos el decodificador de protocolo Numbers and State. Lo configuramos para ver el número en hexadecimal:

Si ahora modificamos el archivo test-10.raw, por ejemplo cambiando algunas meustras:

obijuan@Hoth:~
$ echo -ne "\xAA\x55\xFF\x00\x0F\xF0\xCC\x33\x80\x00" > test-10.raw

Basta con apretar el botón de reload y veremos la nueva señal

Hacemos un circuito para transmitir 2 bytes por el puerto serie, a la velocidad del sistema (12_000_000 baudios). Este es el circuito:

Nada más arrancar el circuito se envían los byets 0x00 y 0x01. Este envío se repite cada vez que se haga un reset de la placa. Abrimos el terminal de Icestudio y lo configuramos para una velocidad custom de 12000000

Limpiamos el terminal, activamos la opción Hexadecimal view y le damos al Reset en la placa. Esto es lo que nos aparecerá:

Si apretamos el botón de reset sucesivas veces aparecerán más pares de bytes 0x00 y 0x01:

Directamente desde el terminal podemos guardar estas dos muestras en el fichero test-2.raw y abrirlo con el Pulseview. Primero desconectamos el terminal del icestudio, pinchando en "Disconnect". Luego ejecutamos este comando:

obijuan@Hoth:~
$ cat /dev/ttyUSB1 > test-2.raw

Pulsamos el Reset en la Alhambra II, pulsamos Ctrl-C para terminar el cat. Comprobamos que el fichero test-2.raw efectivamente contiene los bytes 0x00 y 0x01, recién capturados:

obijuan@Hoth:~
$ cat /dev/ttyUSB1 > test-2.raw 
^C
obijuan@Hoth:~
$ hd test-2.raw 
00000000  00 01                                             |..|
00000002
obijuan@Hoth:~
$ 

y lo abrimos con el PulseView:

Esta es una forma rápida para transferir información desde nuestros circuitos a la aplicación PulseView

Lo siguiente es crear scripts en python para leer los bytes por el puerto serie y dibujarlos en ASCII en la consola (así como también guardarlos en ficheros .raw)

Clone this wiki locally