Ir para conteúdo

UART serial em embarcados


ncaio

Posts Recomendados

  • Do Zero Ao Um - Professores

UART SERIAL EM EMBARCADOS

UART é um CI utilizado para comunicação serial por uma porta serial. Esta comunicação geralmente é utilizada para debugar e realizar testes. Ter acesso a esta porta é bastante importante para que você seja capaz de acompanhar um processo de boot, ter acesso a um terminal,comunicação entre dispositivos sem “rede” e etc. Pode ser um CI separado ou já vir implementado em um CHIP. Quando conhecemos um CHIP, sua pinagem, é possível identificar os 4 pinos utilizados para esta comunicação serial: VCC, GND,TX e RX. Utilizando ganchos ou soldando fios, podemos criar conexões a serem utilizadas. No entanto, é comum encontrarmos CHIPS descaracterizados, dificultando este processo de localização.

Padrão Quadrado - Circulo - Circulo - Circulo

Primeiramente, desconheço que esta combinação impressa na placa de circuito seja, de fato, um padrão. Não existe algo oficializando. Mas sim, é possível identificar este pseudo padrão quadrado circulo circulo circulo. Vamos observar as imagens seguintes:

TP Link TL-WRT740N ROUTER

Untitled.png.51c8781b54180e2e36f14e5eec9c376e.png

Dynavision Cybergame

CI-03.thumb.png.e3989ddd74613867512819791d14c22a.png

 

Criando acesso aos pinos

Para facilitar o trabalho, é interessante criar conexões com as supostas portas. Isso irá te permitir uma forma mais fácil de identificar cada porta e conectar ferramentas de comunicação. 

IMG_20191007_160932.thumb.jpg.72c55e60fbddc91aefd7caa6d29f5521.jpg

 

Seu computador falando UART

Você vai precisar de um conversor USB UART. Maiores informações no tópico [- UART - USB TTL SERIAL -], em :

 

IMG_20191024_093024.jpg

Um Pouco mais de interface UART

Existem ótimas publicações detalhando o UART, este artigo escrito por Sjoerd Langkemper e disponível em: https://www.sjoerdlangkemper.nl/2019/03/20/usb-to-serial-uart/ é uma boa referência. Ele escreveu de uma forma bem didática e explicativa, os principais aspectos. É importante que você entenda o que é e como é. São 4 pinos/portas: VCC, TX, RX, GND.

Onde:

VCC: Voltagem que pode variar entre 3V e 5V. Geralmente não se utiliza este pino. Apenas GND, RX e TX, são necessários.
TX: É do tipo transmissão de dados serial. A transmissão é dada da seguinte forma: 

1 START bit + data bits (5, 6, 7, 8) + 1 PARITY bit (optional) + STOP bit (1, 1.5, 2) 


RX: É do tipo recepção de dados serial. A recepção é dada da seguinte forma:

1 START bit + data bits (5, 6, 7, 8) + 1 PARITY bit (optional) + 1 STOP bit 


GND: Terra

Baud Rate

Baud rate determina a velocidade de uma comunicação serial. Mensurado em bytes por segundo (bps) e é necessário que as duas extremidades da comunicação estejam na mesma velocidade. Normalmente, nos deparamos com comunicações a 9600bps e dificilmente com algo maior que 115200. Quanto maior a velocidade de transmissão, maior será a exigência de uso de recurso do microcontrolador.  

Conectando os Fios

Como mencionado previamente neste documento, basicamente, precisamos apenas dos pinos RX,TX e GND. É necessário compreender que, o RX de uma extremidade conecta no TX da outra. Isso faz sentido, output conectado ao input.

RX  ----  TX
TX  ----  RX
GND ----  GND

Identificando 

Para conectarmos corretamente os pinos do nosso device a nossa interface USB ligada ao computador. Evitando degradação de ambas as partes, é essencial que sejamos capazes de identificar cada pino. Vamos aqui detalhar algumas técnicas.

Utilizando o multímetro

 Você vai precisar de um multímetro simples. Vamos observar características de cada porta, a começar com o terra.

GND

Iremos iniciar localizando o terra. Vamos precisar posicionar o nosso multímetro na posição teste de continuidade. E, para facilitar os testes, ter conexões fixadas nos pinos da interface UART a ser identificada.  Como podemos observar na imagem seguinte. No lado esquerdo, uma seta indicando a posição correta no multímetro e, lado direito, as conexões . 

OBS: Não precisa energizar o equipamento para a identificação do terra.

IMG_20191102_155144.thumb.jpg.7cb634b929f58e3ef4192af7567de3e2.jpg

Segundo passo, é encontrar em nosso device um terra como referência. Geralmente, as carcaças são ligadas ao terra do circuito. O plug que recebe a alimentação externa, tem um ground. No nosso caso, iremos utilizar um ponto fácil de identificar. Podemos observar na imagem seguinte, que temos um array de leds. Neles é possível encontrar facilmente um terra que servirá como referência.

Uma ponta do nosso multímetro vai terra de referência, do led, e a outra irá tocar um pino de cada vez. O pino com a menor resistência oferecida durante o teste de condutividade, nos leva a concluir que eles estão fisicamente conectados. em nosso caso. Encontramos o terra no terceiro pino, da direita para esquerda.

IMG_20191102_155236.thumb.jpg.a7698d22ea6c43ca8974cd3ee80cf75f.jpg

VCC

Apesar de não ser um pino obrigatório a ser conectado para este tipo de comunicação, é importante encontrá-lo. Identificando o GND e o VCC, ficamos mais seguros na hora de determinar o RX e o TX. Temos 3 pinos a serem identificados: 

* Um de alimentação, que vamos imaginar como uma porta que passa um fluxo continuo.

* E duas portas que não.

Em uma comunicação UART, com fluxo de entrada e saída, nós podemos deduzir, em um olhar bem generalista, que o TX terá mais atividade que o RX, em uma situação de BOOT e funcionamento posterior. Basicamente, a atividade RX deverá ser gerada por um TX externo. No nosso caso, não estamos enviando dado, até o momento.Como algumas aplicações/implementações UART variam entre 3V a 5V, o threshold máximo para determinar um 1 é qualquer coisa acima de 2V. Então, quando estamos procurando pelo VCC, estamos procurando por um pino que provavelmente terá a voltagem estável, no processo de boot e no decorrer do funcionamento.

Conecte o terra no terra encontrado anteriormente. E realize uma varredura de portas a procura da porta estabilizada. É PRECISO ENERGIZAR O EQUIPAMENTO. No nosso exemplo, é o quarto pino da esquerda para direita na imagem que estamos utilizando como referência. Logo após o GND, são vizinhos.

IMG_20191102_190748.thumb.jpg.60cb39bec149bea57f1ffab89644fa5b.jpg  

RX e TX

Garantindo que conhecemos o GND e o VCC, fica mais fácil continuar o nosso mapeamento. Novamente, uma ponta vai no terra e a outra vai sair mapeando os dois pinos restantes. Vai depender bastante de como a comunicação serial foi implementada, é recomendado acompanhar a atividade nessas portas após ligarmos o equipamento. Iremos perceber que a porta TX terá uma voltagem menor que o VCC, maior que 2V e quase sempre ativa. Ao contrário da RX, já que é uma porta de "INPUT".

O nosso mapeamento fica:

TX     ----    PIN1
RX     ----    PIN2
GND  ----    PIN3
VCC   ----    PIN4

 

Verificando o resultado

Vamos verificar se os testes realizados para identificar as portas foram bem sucedidos. Podemos utilizar um analisador lógico para observar mais de perto. Utilizei um Saleae clone de 8 canais e o software Pulseview para fazer o decode.

Onde:

UART			Analisador Lógico
GND				 GND
TX					CH1
RX					CH2

2019-11-02_21-14-26_254.thumb.jpg.19bfd9bdc2f459cb05fed44e9aa8ef42.jpg

Em seguida, temos a sequencia de telas do Pulseview.

  • Decoder para UART

PulseView-01.thumb.png.3656b391bab032e2bd9996c690a73a5e.png

  • Configuração das portas

PulseView-02.thumb.png.3dbc49c79e261cc2ee863ac1a6d46fc8.png

  • Leitura

PulseView-03.thumb.png.c904194680aa34927fc2c32590fc42dc.png

Existem outros parâmetros importantes, como velocidade do terminal e paridade, por exemplo. Neste momento, estamos nos limitando a identificação de portas, voltaremos a falar sobre estes parâmetros neste tópico. Na imagem seguinte, podemos observar um terminal utilizando o minicom referente a comunicação UART que acabamos de estabelecer.

 PulseView-04.thumb.png.d95c75b11905071108f2e06b0ff56bb0.png

 

Utilizando um Arduino para mapear as portas.

No passo anterior, nós utilizamos um multímetro para determinar GND, VCC, TX e RX. O conceito que utilizamos anteriormente é o "mesmo" que veremos agora. Iremos utilizar um Arduino UNO. Vamos abrir aqui um parentese, este mapeamento requer 4 portas analógicas, fecha parentese. Isso significa que você pode utilizar qualquer modelo de Arduino que satisfaça este pré requisito. 

Conectando os fios

No Arduino, conecte uma extremidade da conexão as portas A0,A1,A2 e A3. Já na outra extremidade, conecte nos 4 pinos a serem identificado. Assim como podemos observar nas imagens seguintes.

IMG_20191103_182722.thumb.jpg.5f07b01b69bf7b28a924bec0de92dd49.jpgIMG_20191103_182958.thumb.jpg.1a75a43044cdabf579584ef5a761bdc2.jpg

 

Parte lógica

Com os cabos devidamente conectados nas extremidades. Passaremos para a preparação do Arduino. Primeiramente, certifique que o seu Arduino e a IDE estejam funcionando. Para este procedimento, vamos utilizar o código disponibilizado no repositório da https://securelayer7.net, na URL: https://github.com/securelayer7/PinNinja .  Você precisa apenas copiar a versão RAW e colar na sua IDE do Arduino.

RAW: https://raw.githubusercontent.com/securelayer7/PinNinja/master/PinNinja/PinNinja.ino

Realize o teste de compilação e envie o código para o seu Arduino. Abra a tela de visualização do terminal da IDE do Arduino , na velocidade 9600bs. E em seguida ligue o seu device. A saída esperada, é:

arduino-01.thumb.png.358d2db89a7211a7724289f88dfb02f9.png

Perfeito. Temos o mesmo resultado obtido no processo de identificação utilizando um multímetro. 

OBS: Por segurança, para evitar queimar o seu Arduino, tente obter a voltagem com um multímetro. Por mais que a maioria dos routers wireless, por exemplo, tenham uma variação entre 3v para 5v no pino VCC, pode ocorrer casos inesperados. 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...