Nos dias de hoje, transferimos informações digitais a todo instante. Porém, você já parou para pensar em como esse envio pode ser feito? Uma das formas é a comunicação serial, que é bastante comum.

Dentro os tipos de comunicação serial, existe a comunicação serial assíncrona, que será o foco deste post.

Informações básicas

O que é a comunicação serial

A comunicação serial trata-se de um processo de transmissão de dados bit a bit de forma sequencial. Isto é, um único bit é enviado por vez em um canal de comunicação (um fio por exemplo).

De forma oposta, existe a comunicação paralela, que possui 1 canal de comunicação para cada bit. E cada canal envia um bit de cada vez, mas todos eles enviam em conjunto. Isso faz ela ser uma comunicação mais rápida, já que, em uma mesma velocidade, dá para enviar mais informações.

A desvantagem é que a comunicação paralela, normalmente, é mais cara. Simplificadamente, isso ocorre, pois é necessário utilizar um fio para cada canal de transmissão ou recepção de dados.

Assim, a comunicação serial possui a vantagem e a desvantagem trocada em relação a paralela: é mais lenta, porém é mais barata (generalizando).

Assíncrona e síncrona

Acho que foi possível entender o que é a comunicação serial, mas o que o “assíncrona” quer dizer? De forma simplificada, “assíncrona” informa que a comunicação não utiliza nenhum tipo de recurso para sincronizar o envio/recebimento dos dados. E sincronismo, no atual contexto, seria uma forma direta dos dispositivos que estão comunicando saberem qual é a hora certa de ler/escrever os dados.

É muito comum comunicações síncronas reservarem um canal apenas para transmitir um clock e, assim, sincronizar a comunicação. Existe outra forma mais complicada que não necessita de um canal de clock, que seria a obtenção do sincronismo pela própria mensagem (por meio da transição de nível dos bits). Entretanto, não entrarei em detalhes.

Bem, se a comunicação assíncrona não possui uma forma direta de obter o sincronismo, como os dispositivos sabem a hora certa de enviar ou receber os dados. Acontece que, para que a comunicação ocorra sem problemas, ambos devem utilizar a mesma velocidade de transmissão, que seria o baud rate explicado adiante. Se ambos utilizam o mesmo baud rate, é possível prever com precisão satisfatória o momento certo de enviar ou receber os bits, conforme veremos em tópicos adiante.

Se você tiver curiosidade de ler, alguns tipos de comunicação síncronas são: SPI e I²C.

Baud Rate

Seguindo o que foi falado acima, uma coisa muito importante na hora de transmitir os bits é a velocidade de comunicação, que tem relação com o baud rate. O baud rate basicamente indica quantos símbolos podem ser enviados por segundo.

Os símbolos mais comuns quando falamos de microcontroladores são o 0 e o 1. Portanto, baud rate, neste contexto, indica a quantidade de bits enviados por segundo. Podem existir sistemas de telecomunicações avançados que transmitem mais de 1 bit por vez, então a quantidade de símbolos seria maior que 2.

De toda forma, no caso do Arduino, por exemplo, um baud rate de 9600 indica que 9600 bits são enviados por segundo.

Funcionamento da comunicação serial assíncrona

Ligação

Imagine que precisamos trocar informações entre dois dispositivos, sendo que os dois podem transmitir e receber dados. Para isso, é necessário um canal de recepção (RX) e um de envio (TX) nos dois dispositivos. E o TX de um dispositivo é ligado ao RX do outro para que eles possam se comunicar ao mesmo tempo sem problemas. A imagem abaixo ilustra essa ligação:

ligação da comunicação serial assíncrona

Além do mencionado, os dois dispositivos precisam estar com o terra (GND) interligado para que o referencial seja o mesmo e, assim, os níveis de tensão sejam corretamente reconhecidos. E, como este é um tipo de comunicação assíncrona, não existe uma linha de clock para ditar o ritmo da transmissão.

Tempo de um bit

Como a comunicação é assíncrona, o baud rate é o responsável por definir os tempos da comunicação, conforme foi comentado. Vamos entender isso de forma mais direta com um exemplo de um baud rate de 9600.

Se o baud rate é de 9600, a quantidade de bits por segundo também é de 9600 (ignorando os contextos avançados). Isso quer dizer que 1 único bit demora cerca de 104 microssegundos para ser enviado (1/9600 = 104 μs).

Portanto, os dispositivos sabem a ordem dos bits por meio deste tempo. Isto é, se já se passaram 312 μs desde o início da comunicação, quer dizer que está na hora de enviar/receber o 4º bit: 1º bit enviado entre 0 e 104 μs; 2º enviado entre 104 e 208 μs; 3º enviado entre 208 e 312 μs; 4º enviado entre 312 e 416 μs; assim em diante…

Bloco de dados

Tendo em vista a ligação anterior, agora podemos entender qual é o formato dos dados que um dispositivo envia para o outro. A imagem adiante será usada como referência para explicar:

Comunicação serial bloco de dados transmitidos
  1. Bit de início ou start bit – A transferência dos dados começa com a linha de transmissão passando de um estado constante de nível alto para nível baixo. E a linha permanece em nível baixo durante 1 tempo de bit, definindo assim o bit de início e o início da transmissão.
  2. Dados – É justamente a informação enviada e, normalmente, são um conjunto de 8 bits (byte).
  3. Bit de paridade – Ajuda a verificar se a comunicação foi bem sucedida. Se ele estiver configurado como par, ele vale 0 se a quantidade de 1’s nos dados for par e 1 se for impar. Caso ele estiver configurado como impar, o contrário acontece. Com isso, é possível descobrir se existe ou não erro nos dados.
    1. O bit de paridade não é obrigatório, mas sua presença ou ausência deve ser configurada previamente nos dois dispositivos.
  4. Bit de parada – Coloca e mantém a linha em nível alto durante 1 tempo de bit para indicar fim de transmissão. Mesmo após o bit de parada, a linha permanece em nível alto, mas é ele que marca o fim da transmissão.

É importante esclarecer que esse bloco de dados diz respeito a um único envio/recebimento, e vários blocos podem ser enviados em sequência para transmitir mais informações.

Além disso, antes da comunicação, é necessário que os dispositivos tenham a mesma configuração de velocidade, de quantidade de bits de dados, de paridade e quantidade de bits de parada (podem ser 1 ou 2). Caso contrário, os dois não vão estar alinhados na comunicação e isso gerará erros.

Obs.: Dentro dos bits dos dados, é preciso saber também qual a ordem de envio, se é do mais significativo pro menos significativo ou o contrário.

Exemplo

Vejamos um exemplo para deixar o entendimento mais claro. Neste caso, os dados contém 8 bits, existe apenas 1 bit de parada, escolheu-se usar o bit de paridade e ele foi configurado como par. Tanto faz o valor do baud rate, pois não entro nos detalhes de temporização aqui.

Exemplo de comunicação serial assíncrona

No caso da imagem acima, o bit de início mandou a linha de transmissão para 0 como foi dito anteriormente. E o bit de parada elevou a linha para 1 novamente. Após a comunicação ter sido iniciada, o seguinte byte foi enviado: 10110100 (supondo que envia primeiro o mais significativo).

Com isso, existem 4 números 1’s dentro deste byte, ou seja, é uma quantidade par. Portanto, o bit de paridade par equivale a 0.

Obs: O bit de paridade é decidido antes do envio dos dados, e o outro dispositivo que recebe os dados apenas verifica se ele está condizente com os dados que foram enviados.

RS-485