El conocido como puerto serie es usado en gran cantidad de dispositivos como microcontroladores o FPGA para transmitir tramas sencillas de datos.
En realidad, el término puerto serie no hace referencia exclusivamente a este tipo de comunicación pero con el paso del tiempo se ha terminado asociando a ella.
Está definido como una forma de comunicaciones punto a punto, es decir, una forma de conectar dos dispositivos entre sí, no más.
El puerto serie en la placa
En el puerto serie tenemos dos líneas, Tx y Rx. Estas líneas se deben cruzar para comunicar dos dispositivos, es decir, el Tx del dispositivo 1 debe conectarse al Rx del dispositivo 2. El Tx del dispositivo 2 debe conectarse al Rx del dispositivo 1. Además ambos dispositivos deben compartir una masa común.
En ocasiones podemos encontrar dispositivos en los que solo existe el Tx. Esto puede ser debido a que ese dispositivo sólo envía datos, no necesita recibir. Un ejemplo puede ser un sensor o un receptor GPS.
La UART
Para enviar los datos a las líneas debemos usar un hardware que esté diseñado para llevar a cabo esa tarea y en este caso lo llamamos UART. Esta se encargará de leer datos cuando llegan, generar y gestionar interrupciones, enviar datos y gestionar los tiempos de bit. En general la UART se encarga de hacer todo el trabajo por nosotros.
SI usamos un microcontrolador, es muy posible que no necesitemos hacer nada especial ya que la UART estará integrada en el propio microcontrolador. Si usamos una FPGA o similar es posible que tengamos que diseñar el hardware de la UART o usar un diseño ya existente.
El funcionamiento de la UART es el mismo en todos los dispositivos ya que sino fuera así, no se podrían comunicar entre sí.
Preparando los datos y la trama
Supón que quieres enviar un dato por el puerto serie, ¿cómo lo haces?
La realidad es que en muchas ocasiones usamos librerías que nos permiten subir de nivel y no tener que bajar tan abajo al usar microcontroladores. Sin embargo es posible que en otras ocasiones si toque.
Imagina que queremos enviar el caracter “a” a través del puerto serie. Lo primero será buscar en la tabla ASCII cual es el número asociado al caracter, en este caso el 97.
Si convertimos el número 97 a binario obtenemos que la letra “a” se representa con 01100001.
Esto es lo que realmente tenemos que enviar a través del puerto serie, esta combinación de ceros y unos, pero lo debemos hacer de una manera un tanto especial. Debemos incluirlos dentro de una trama.
Lo primero que debemos hacer es invertir el orden de los bits, es decir, el primero pasa a ser el último y último pasa a ser el primero. Esto es debido a que en este protocolo primero se envía el bit menos significativo.
La línea de transmisión siempre que está en reposo estará en nivel alto.
Para iniciar la comunicación debemos enviar un bit de start, que siempre será un 0 y lo mantendremos durante un tiempo que llamamos tiempo de bit.
Pasado el tiempo de bit empezaremos a enviar los datos. Un 1, luego cuatro 0, dos 1 y por último un 0.
Cada bit lo mantendremos en la línea de datos durante el tiempo de bit del que habíamos hablado antes.
Ya hemos enviado los datos, ahora tenemos que liberar la línea e indicar que ya hemos terminado y esto lo hacemos enviando un bit de stop. Que no es otra cosa que enviar un 1 durante el tiempo de bit. Tras enviarlo la línea se quedará en espera y por tanto se quedará en nivel alto.
Es decir, que para enviar los datos que normalmente van a ser 8 bits, primero enviamos el bit de start, luego los 8 bits empezando por el menos significativo y por último enviamos un bit de stop.
Tiempo de bit
El tiempo de bit no es otra cosa que el tiempo que mantenemos un bit en la línea de transmisión.
Su cálculo es bastante sencillo ya que está relacionado con el baudrate. Este último es el que nos indica el número de bits que podemos enviar en un segundo.
Por ejemplo, una comunicación serie puede ser a 9600 baudios, es decir que se pueden transmitir hasta 9600 bits en un segundo.
El calculo del tiempo de bit es sencillo ya que es el inverso del baudrate.
(1)
Es clave que ambos dispositivos que se encuentran conectados por medio de un puerto serie, usen el mismo baudrate, en caso contrario no se entenderán y no se podrá llevar a cabo la comunicación.
Capa física en TTL
La trama del puerto serie puede ser enviada mediante muchos standares, entre ellos RS232 o RS485 o RS422. Sin embargo, a la salida de un microcontrolador o de una FPGA casi siempre tendremos los conocidos como niveles TTL.
Un nivel TTL significa que los 0 lógicos se representan con 0 voltios y los 1 lógicos se representan con 5v o 3.3v.
Pasar de TTL a RS232 o RS485 es un proceso sencillo para el cual se suelen usar distintos tipos de transductores como el MAX485 o el MAX232.
Puedes aprender a usar un módulo basado en el MAX485 en este tutorial.