Transmisión serie (TX) - Obijuan/Cuadernos-tecnicos-FPGAs-libres GitHub Wiki

Introducción

Vamos a estudiar las bases de la comunicación serie, de forma práctica, empezando por el transmisor serie más simple que se pueda.

Las comunicaciones serie asíncronas ya las vimos a nivel práctico en el capítulo 30: Puerto serie de los tutoriales de Electrónica digital para makers con FPGAs libres

La estructura de la trama a enviar por la línea serie es como la mostrada en esta figura:

En las FPGAs se cumple que los circuitos usan menos recursos cuanto más cercanas sean las señales de temporización al reloj del sistema. Es decir, que cuanto más rápido se hagan las operaciones, menos recursos se necesitarán. Por ello, el transmisor más sencillo será el que funcione a la velocidad del reloj del sistema. Para el caso de la tarjeta Alhambra II, será una velocidad de 12MHz (Es decir, un transmisor que envía 12 millones de bits por segundo)

Cuanta más información se envíe, más recursos necesitaremos. Por ello, el transmisor serie más sencillo será aquel que envíe un único bit a la velocidad de 12Mhz

Transmisor de 0 bits: Reposo

En las transmisiones serie asíncronas (puerto serie), la línea de transmisión está a '1' cuando se encuentra en reposo (es decir, cuando no se transmite nada). Por tanto, el circuito transmisor serie más sencillo es aquel que no hace nada: Deja la línea siempre en reposo. Es un transmisor de 0 bits

TODO: Actualizar pantallazo (nuevos biestables DFF)

  • Recursos gastados
Elemento Cantidad
Celdas lógicas 1
Celdas IO 2

Transmisión del Bit de start

En las transmisiones serie asíncronas el comienzo del envío de un dato nuevo (una nueva trama) se realiza poniendo a 0 la línea durante un tiempo de bit. Es lo que se llama el Bit de start. Como nuestra velocidad es la del reloj del sistema, el bit de start tiene una duracińo de 1 ciclo

Este circuito pone la línea en reposo en el ciclo 0 (instante inicial). Luego, en el ciclo 1, la pone a 0 (bit de start) y en el resto de ciclos (ciclos > 1) lo deja otra vez a 1

TODO: Actualizar pantallazo

El efecto que causa en el receptor (en neustro caso es el ordenador), es que al recibir el bit de start empieza la captura de datos a la velocidad de 12Mbps. Los bits que recibe están todos a uno, por lo que el dato recibido es siempre 0xFF

Cada vez que apretemos el botón de RESET, se envía el número 0xFF a la velocidad de 12_000_000 bps

  • Recursos gastados
Elemento Cantidad
Celdas lógicas 5
Celdas IO 2

Probando el circuito con Icestudio

TODO

Comprobando el circuito con el Script Communicator

Para probar su funcionamiento necesitamos utilizar un programa de comunicaciones serie que tenga la opción de recibir datos crudos (directamente en binario) así como la posibilidad de configurarlo a la velocidad de 12Mbps. El script communicator cumple estos requitos.

Primero lo configuramos: Es muy importante establecer la velocidad a 12_000_000. Esto lo hacemos desde la pestaña Serial port y en la propiedad Baudrate

Una vez abierto el puerto serie desde el script communicator, realizamos la carga del circuito y nos aparecerá en la consola el dato 0xFF

Cada vez que apretemos el botón de RESET se recibirá un nuevo valor 0xFF:

La luz de RX de la Alhambra-II emitirá un flash (indicando que el PC ha recibido un dato)

Midiendo la línea serie

Vamos a realizar mediciones para comprobar que en la línea serie obtenemos la señal correcta. Con este circuito realizamos las medidas con el LEDOscopio de 8 bits y con el Analizador lógico Saleae

Esta es la señal que vemos con el Pulse View. Efectivamente, es un pulso invertido. La señal serie está en reposo, luego llega un pulso a 0 de un ciclo de reloj y después se pone a 1 el resto del tiempo

Si añadimos el protocolo serie (UART) vemos que evectivamente el elemento recibido es el valor 0xFF

En los LEDs de la Alhambra II vemos lo que ha ocurrido en los primeros 8 ciclos de reloj. En el ciclo 0 la línea está en reposo (1), en el ciclo 1 llega el bit de start (se pone a 0) y en el resto de ciclos la línea vuelve a 1. En los LEDs veremos esto:

LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7
1 0 1 1 1 1 1 1

El LED0 representa el ciclo 0. El LED7 el ciclo 7

Transmisor de 1 bit

TODO

LOG

2023-03-10

Vamos a seguir las prueas del puerto serie. Partimos del ejemplo