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