marcus anderson almeida bezerra.pdf

71
UNIVERSIDADE FEDERAL DO CEARÁ CENTRO DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELÉTRICA CURSO DE ENGENHARIA ELÉTRICA MARCUS ANDERSON ALMEIDA BEZERRA PROTOCOLOS DE COMUNICAÇÃO APLICADOS EM FPGAs FORTALEZA 2013

Upload: vonguyet

Post on 10-Jan-2017

219 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

UNIVERSIDADE FEDERAL DO CEARÁ

CENTRO DE TECNOLOGIA

DEPARTAMENTO DE ENGENHARIA ELÉTRICA

CURSO DE ENGENHARIA ELÉTRICA

MARCUS ANDERSON ALMEIDA BEZERRA

PROTOCOLOS DE COMUNICAÇÃO APLICADOS EM FPGAs

FORTALEZA

2013

Page 2: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

MARCUS ANDERSON ALMEIDA BEZERRA

PROTOCOLOS DE COMUNICAÇÃO APLICADOS EM FPGAs

Monografia apresentada ao Curso de

Engenharia Elétrica do Departamento de

Engenharia Elétrica da Universidade Federal do

Ceará, como requisito parcial para a obtenção

do Título de Engenheiro Eletricista.

Orientador: Prof. Dr. Paulo Peixoto Praça.

FORTALEZA

2013

Page 3: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

___________________________________________________________________________

Página reservada para ficha catalográfica que deve ser confeccionada após apresentação e

alterações sugeridas pela banca examinadora.

Para solicitar a ficha catalográfica de seu trabalho, acesse o site: www.biblioteca.ufc.br, clique

no banner Catalogação na Publicação (Solicitação de ficha catalográfica)

___________________________________________________________________________

Page 4: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

MARCUS ANDERSON ALMEIDA BEZERRA

PROTOCOLOS DE COMUNICAÇÃO APLICADOS EM FPGAs

Monografia apresentada ao Curso de

Engenharia Elétrica do Departamento de

Engenharia Elétrica da Universidade Federal do

Ceará, como requisito parcial para a obtenção

do Título de Engenheiro Eletricista.

Aprovada em: ___/___/______.

BANCA EXAMINADORA

________________________________________

Prof. Dr. Paulo Peixoto Praça. (Orientador)

Universidade Federal do Ceará (UFC)

_________________________________________

Eng. Ms. Dalton de Araújo Honório

Universidade Federal do Ceará (UFC)

_________________________________________

Profa. Dra. Ranoyca Nayana Alencar Leão e Silva

Universidade Federal do Piauí (UFPI)

Page 5: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

A Deus.

Aos meus pais, Aristides e Lucimar.

Page 6: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

AGRADECIMENTOS

Primeiramente a Deus por me guiar nesta minha caminhada e pelas oportunidades

que me foram concedidas.

Aos meus Pais, José Aristides Bezerra e Maria Lucimar Almeida da Silva, por todo

suporte e pela ajuda em todos os momentos da minha vida, bons ou ruins.

À minha irmã Amanda Mirelle Almeida Bezerra por sempre me encorajar e

incentivar ao longo da minha vida a superar os meus limites.

Ao professor Dr. Paulo Peixoto Praça, pela sua orientação, paciência, amizade e

disponibilidade durante todo este tempo. Agradeço pela oportunidade de trabalhar e aprender

mais nessa área, de minha grande admiração, da eletrônica digital.

Aos meus amigos e colegas de graduação Antônio Dias Júnior, Eng. Aloísio

Fernandes Dias, Eng. Diego de Sousa Aguiar, Elcid Rodrigues Oliveira Filho, Jorge Luiz

Wattes Oliveira Junior e Matheus Fernandes Freitas de Castro pelas infindáveis horas de estudo

compartilhadas e pelas contribuições na minha trajetória ao longo do curso.

A todos os outros professores do Departamento de Engenharia Elétrica da UFC e

aos demais funcionários do departamento responsáveis diretamente ou indiretamente pela

minha formação acadêmica.

Page 7: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

“É notável uma ciência que começou com jogos

de azar tenha se tornado o mais importante

objeto do conhecimento humano.”

(Pierre Simon Laplace)”

Page 8: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

RESUMO

Este trabalho tem por objetivo apresentar um estudo sobre os principais protocolos de

comunicação, fazendo uma abordagem desde os conceitos mais básicos de comunicação,

passando por protocolos mais simples, como o RS-232C, até chegar em protocolos mais

complexos, como o USB. Aplicando tais conceitos em FPGAs (Field Programmable Gate

Array), mais especificamente utilizando como plataforma de desenvolvimento o kit didático

DE0-Nano da fabricante Altera®. Os protocolos foram implementado através de blocos de

programa, em linguagem VHDL. Tais blocos foram desenvolvidos de forma possuam todas as

funcionalidades possíveis para cada protocolo e nos mais vários modos de operação, para que

possam ser usados em qualquer projeto de sistemas digitais. A validação foi realizada por meio

de simulações e pela implementação no periféricos disponíveis no kit de desenvolvimento. O

software QUARTUS II® é o ambiente de desenvolvimento usado na criação dos códigos, dos

blocos, da simulação e na programação do dispositivo lógico estudado.

Palavras-chave: Comunicação, FPGA, VHDL, Serial

Page 9: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

ABSTRACT

This work aims to present a study on the main communication protocols, making an approach

from the most basic concepts of communication, through simpler protocols such as RS - 232C,

until you get into more complex protocols such as USB. Applying these concepts on FPGAs

(Field Programmable Gate Array), more specifically as a development platform using the Nano

- de0 teaching kit manufacturer Altera ® . The protocols were implemented through program

blocks in VHDL. Such blocks have been developed to have all possible features for each

protocol and more various modes of operation that can be used in any design of digital systems.

The validation was performed by means of simulations and implementing the peripherals

available on the development kit. The Quartus ® II software is the development environment

used in the creation of codes, blocks, simulation and programming of logic device studied.

Keywords: Communication, VHDL, FPGA, Serial.

Page 10: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

LISTA DE ILUSTRAÇÕES

Figura 1 – Arquitetura interna de um circuito integrado FPGA. .............................................. 16

Figura 2 – Canal simplex. ......................................................................................................... 20

Figura 3 – Canal half-duplex. ................................................................................................... 20

Figura 4 – Canal full-duplex. .................................................................................................... 20

Figura 5 – Comunicação síncrona. ........................................................................................... 22

Figura 6 – Comunicação assíncrona. ........................................................................................ 23

Figura 7 – Sequência de bits em uma transmissão serial. ........................................................ 26

Figura 8 – Níveis de tensões válidos para a comunicação serial RS 232-C. ............................ 27

Figura 9 – Conectores padrão RS 232-C: (a) DB-25; (b) DB-9. .............................................. 28

Figura 10 – Conexão de um DTE com um DCE. ..................................................................... 29

Figura 11 - Configuração do protocolo I2C. ............................................................................ 31

Figura 12 - Condições de início e fim de comunicação do protocolo I2C. .............................. 32

Figura 13 – Comunicação I2C: (a) Processo de Escrita; (b) Processo de Leitura. ................... 33

Figura 14 – Conexão entre dispositivos por um barramento SPI. ............................................ 34

Figura 15 – Procedimento de escrita (a) e leitura (b) de dados do protocolo SPI. ................... 35

Figura 16 – Modelo de protocolo CAN proposto. .................................................................... 36

Figura 17 – Níveis lógicos do barramento CAN. ..................................................................... 38

Figura 18 – Estruturas do protocolo CAN: (a) Versão 2.0 A; (b) Versão 2.0 B. ..................... 40

Figura 19 – Conetores USB 2.0 (esquerda) e USB 3.0 (direita). ............................................. 41

Figura 20 – Kit didático DE0-Nano com FPGA da família Cyclone IV. ................................. 44

Figura 21 – Layout da placa do kit didático DE0-Nano. .......................................................... 44

Figura 22 – Código divisor de frequência em VHDL. ............................................................. 45

Figura 23 – Bloco TX. .............................................................................................................. 46

Figura 24 – Código divisor de frequência em VHDL. ............................................................. 47

Figura 25 –Transmissão de um dado pelo bloco TX. ............................................................... 48

Figura 26 – Lógica de transmissão serial RS-232 C. ............................................................... 48

Figura 27 – Bloco de recepção RX. .......................................................................................... 49

Figura 28 – Bloco de recepção de dados RX............................................................................ 50

Figura 29 – Conversor DB9 RS232 para TTL MAX232. ........................................................ 51

Figura 30 –Programa RcomSerial v1.2. ................................................................................... 51

Figura 31 – Diagrama de blocos da aplicação. ......................................................................... 52

Figura 32 – Recepção da string através da porta serial do PC. ................................................ 53

Figura 33 – Bloco I2C. ............................................................................................................. 54

Figura 34 – Escrita de dados pelo bloco I2C. ........................................................................... 54

Figura 35 – Leitura de dados pelo bloco I2C. .......................................................................... 55

Figura 36 – Conexão entre o FPGA e a memória EEPROM. .................................................. 56

Figura 37 – Conexão do ADC com o kit FPGA. ...................................................................... 58

Figura 38 – Bloco SPI para controle do ADC. ......................................................................... 59

Figura 39 – Leitura e escrita do controlador ADC. .................................................................. 59

Figura 40 – Leitura e escrita do controlador ADC. .................................................................. 60

Page 11: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

LISTA DE TABELAS

Tabela 1 – Caracteres imprimíveis do padrão ASCII. D: Dec, H: Hex, C: Caractere. ............. 19

Tabela 2 – Taxas de Comunicações mais Comuns para protocolo RS-232. ............................ 23

Tabela 3 – Descrição dos pinos dos conectores serias de 9 e 25 pinos. ................................... 29

Tabela 4 – Descrição dos pinos do padrão SPI. ....................................................................... 35

Tabela 5 – Tipos de protocolo CAN. ........................................................................................ 37

Tabela 6 – Parâmetros de ajuste do bloco TX. ......................................................................... 45

Tabela 7 – Pinos do bloco TX. ................................................................................................. 46

Tabela 8 – Cálculo da paridade. ............................................................................................... 47

Tabela 9 – Pinos do bloco TX. ................................................................................................. 49

Tabela 10 – Interface do bloco I2C. ......................................................................................... 54

Tabela 11 – Legenda dos sinais do ADC128S022. .................................................................. 58

Tabela 12 – Descrição dos sinais do Bloco ADC. .................................................................... 59

Page 12: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

LISTA DE ABREVIATURES E SIGLAS

ACK Acknowledge

A/D Analógico/Digital

ADC Conversor Analógico Digital

ASCII American Standard Code for Information Interchange

CAN Controller Area Network

CD Carrier Detect

CI Circuito Integrado

CTS Clear To Send

D/A Digital/Analógico

DCE Data Communication Equipment

DLC Data Lenght Code

DSR Data Set Ready

DTE Data Terminal Equipment

DTR Data Terminal Ready

EEPROM Eletrical Erasable Programmable Read Only Memory

EIA Eletronics Industry Association

FPGA Field-Programmable Gate Array

GPIO General Purpose Input/

IDE Identifier Extension

ISO International Organization for Standardization

LCD Liquid Crystal Display

LE Logic elements

RAM Random Access Memory

RC Received Data

RI Ring Indicator

ROM Read Only Memory

RS Recommended Standard

RTR Remote Transmission Request

RTS Request To Send

SAE Society of Automotive Engineers

SCL Serial Clock line

SDA Serial Data line

SDRAM Synchronous Dynamic Random Access Memory

SOF Start of Frame

SPI Serial Peripheral Interface

SRR Subistitute Remote Request

TD Transmitted Data

TTL Transistor-Transistor Logic

USB Universal Serial Bus

VHDL Very High Speed Integrated Circuit Hardware Description Language

Page 13: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

SUMÁRIO

1 INTRODUÇÃO ............................................................................................................. 15

1.1 Dispositivo FPGA .......................................................................................................... 15

1.2 Objetivos ........................................................................................................................ 17

1.3 Estrutura do trabalho ................................................................................................... 17

2 CONCEITOS BÁSICOS DE COMUNICAÇÃO ....................................................... 18

2.1 Codificação da Informação .......................................................................................... 18

2.2 Direção do Fluxo de Dados ........................................................................................... 19

2.3 Modos de Comunicação ................................................................................................ 21

2.4 Comunicação Síncrona e Assíncrona .......................................................................... 21

2.5 Taxa de Transmissão .................................................................................................... 23

2.6 Paridade ......................................................................................................................... 24

3 PROTOCOLOS DE COMUNICAÇÃO ..................................................................... 25

3.1 Protocolo RS-232C ........................................................................................................ 25

3.1.1. Descrição dos Sinais ....................................................................................................... 26

3.2. Protocolo I2C ................................................................................................................. 30

3.2.1. Características do Protocolo I2C ................................................................................... 31

3.3. Protocolo SPI ................................................................................................................. 33

3.3.1. Características da interface SPI ..................................................................................... 34

3.4 Protocolo CAN ............................................................................................................... 36

3.4.1 Características dos sinais ............................................................................................... 37

3.4.2 Formato do Protocolo ..................................................................................................... 38

3.5 Protocolo USB ............................................................................................................... 40

3.5.1 Características do padrão USB. ..................................................................................... 42

4 IMPLEMENTAÇÃO DOS PROTOCOLOS ............................................................. 43

4.1 Dispositivo utilizado ...................................................................................................... 43

4.2 Biblioteca RS-232 C ...................................................................................................... 44

4.2.1 Bloco TX .......................................................................................................................... 45

4.2.2 Bloco RX.......................................................................................................................... 49

4.2.3 Proposta de aplicação..................................................................................................... 50

4.3 Biblioteca I2C ................................................................................................................ 53

4.3.1 Proposta de aplicação..................................................................................................... 56

4.4 Biblioteca SPI ................................................................................................................ 57

5 CONCLUSÃO ............................................................................................................... 61

Page 14: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

REFERÊNCIAS ..................................................................................................................... 62

APÊNDICE A – CÓDIGOS EM VHDL .............................................................................. 64

Page 15: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

15

1 INTRODUÇÃO

No atual crescimento tecnológico, onde a facilidade de uso (ou acessibilidade) de

um determinado equipamento, o seu tamanho físico, ou ainda sua portabilidade e seu custo

benefício final, são critérios impactantes para o sucesso frente à grande concorrência, a área de

projetos digitais vem se destacando. Um vezes que esses sistemas possuem uma flexibilidade e

uma capacidade de processamento de informações muito elevada, isso tudo em circuito que

ocupam espaço cada vez menores. Chegando a ser mais viável transformar grandezas

analógicas em digitais, realizar o processamento e depois transformá-las novamente para

grandezas analógicas.

Esta crescente deve-se principalmente a evolução da lógica programável, onde um

projeto pode ser elaborado com um diagrama lógico, desenvolvido a partir de software, no qual

é possível utilizar elementos lógicos, megafunções ou linguagens de descrição de hardware,

como, por exemplo, VHDL (Very High Speed Integrated Circuit Hardware Description

Language).

Quando se deseja realizar um projeto de um circuito digital, a decisão inicial diz

respeito a saber que tipo de circuito integrado (CI) será utilizado. A decisão depende do

projetista do circuito, de acordo com a especificação técnica do projeto e do seu conhecimento

da tecnologia de lógica programável. Em algumas aplicações, a escolha pode ser óbvia e em

outras a escolha necessita de considerações cuidadosas.

Dentre os dispositivos lógicos programáveis presentes no mercado, um que vem se

destacando são os FPGAs (Field Programable Gate Array). Devido à elevada densidade de

elementos lógicos, ampla gama de pinos de I/Os padronizados, grande números de pinos de I/O

disponíveis para o usuário e alta velocidade de processamento, além da possibilidade de

produzir novos produtos em um curto período de tempo, bem como a facilidade de atualização

e modificação de projetos já existentes.

1.1 Dispositivo FPGA

Segundo Pedroni (2010), os FPGAs foram lançados pela Xilins em meados da década

de 1980. Esta tecnologia consiste em uma matriz de blocos lógicos ou células lógicas

independentes, cercada de blocos de entrada e saída, também independentes, e por um conjunto

de recursos de interconexão programáveis, que permitem a interligação arbitrária dos blocos,

mostrado na figura 1.

Page 16: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

16

Figura 1 – Arquitetura interna de um circuito integrado FPGA.

Fonte: Adaptado de COSTA; MESQUITA ; PINHEIRO (2011).

Cada bloco lógico, interligação e bloco de I/O, pode ser programado, tornando esta

arquiteto extremamente flexível e moldável.

O processo de projeto com FPGA envolve várias etapas que geralmente são

automatizadas. A utilização das ferramentas de software com o aperfeiçoamento do hardware

reconfigurável dos FPGAs, permite ao usuário uma enorme simplicidade e velocidade no

desenvolvimento de seus projetos. Um sistema típico de desenvolvimento de projetos, com

ferramentas via softwares, consiste em vários programas interconectados. Esse processo

envolve as seguintes etapas:

Especificação e entrada do projeto;

Síntese e mapeamento da tecnologia;

Posicionamento e roteamento;

Verificação e teste;

Programação do FPGA.

Recursos de Interligação inteligação

Blocos de I/O inteligação

Blocos Lógicos inteligação

Page 17: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

17

1.2 Objetivos

Devido ao fato de o estudo na área de FPGAs no departamento está no início,

adquirir um base de conhecimento sólida é fundamento para criação de projeto com grau de

complexidade mais elevado. Outro fato que é grande importância para desenvolvimento de

projetos é ter sistemas de comunicações confiáveis, uma vez que elevar o grau de complexidade

de um sistema implica em aumentar o número de circuitos trabalhando em conjunto.

Deste modo, este trabalho tem como objetivo realizar um estudo do principais

modos de comunicação com o intuído de aplicá-los em FPGA utilizando a linguagem de

descrição de hardware VHDL. Serão propostos também aplicações para tais modos, com o

intuito de direcionar o estudo para futuros projetos.

1.3 Estrutura do trabalho

No capítulo 1 é realizada uma motivação para o estudo sobre os protocolos de

comunicação, bem como uma introdução sobre os principais conceitos de comunicação de

dados.

No capítulo 2 é realizada uma análise dos principais protocolos de comunicação de

comunicação serial, desde o mais simples protocolo RS-232 C até protocolos mais complexos

e mais difundidos atualmente, como, por exemplo, USB 3.0.

No capítulo 3 é realizada a transformação dos protocolo descritos no capítulo

anterior em bibliotecas que possam ser usadas em projetos futuros. Também são propostas

aplicações fáceis e de grande utilidades, que possam ser aplicadas no dispositivo escolhido.

Por fim, no capítulo 8 são feitas as considerações finais sobre este trabalho, bem

como são dadas sugestões para trabalhos futuros.

Page 18: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

18

2 CONCEITOS BÁSICOS DE COMUNICAÇÃO

Conforme dito por Pedroni (2010), a necessidade de comunicação entre unidades

de sistemas que formam redes maiores, integradas, e a necessidade de grandes espaços para

armazenamento de dados são componentes fundamentais dos sistemas embargados. Visto que

estes sistemas necessitam trocar informações tanto com subsistemas que integram o mesmo

circuito quanto com circuitos externos ou com o periféricos. Por esta razão, um estudo

detalhado sobre os meios de transmissão de dados para dispositivos externos ao circuito

originador é indispensável para o projetista de sistemas digitais.

Primeiramente, para que ocorra a transmissão de um dado, é necessário que o

dispositivo transmissor e o receptor tenham um pleno entendimento lógico sobre o dado e como

este será enviado, para que a informação não seja perdida no processo. Para fazer essa interface

entre os sistemas existem diversos padrões ou protocolos de comunicação que devem ser

seguidos para que o dado seja enviado e interpretado pelo dispositivo receptor.

2.1 Codificação da Informação

A codificação da informação que será enviada deve ser escolhida de maneira mais

conveniente para os dispositivos envolvidos na comunicação. No caso de um sistema digital, o

dado é representado por bits de dados individuais, onde a informação é representada por pacotes

de vários bits.

O tamanho do pacote é escolhido de acordo com o tipo de dado, sendo que quanto

maior o número de bits maior o número de valores que podem ser representados. Um exemplo

de pacote comumente utilizado pelos protocolos de comunicação é o byte, uma sequência

binária de oito dígitos.

Uma codificação amplamente utilizada na comunicação entre computadores é o

ASCII (American Standard Code for Information Interchange) criado com o intuito de prover

a troca de dado entre máquinas de diferente tipo e fabricantes.

O código ASCII é utilizado para representar caracteres, composto por 7 bits,

portanto, representado por uma escala decimal de 0 a 127. Os primeiros caracteres do padrão

ASCII (0 a 31) são caracteres de controle, sendo os 95 restantes são os caracteres que podem

ser impressos. A Tabela 1 mostra esses caracteres imprimíveis.

Page 19: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

19

Tabela 1 – Caracteres imprimíveis do padrão ASCII. D: Dec, H: Hex, C: Caractere.

Binário D H C Binário D H C Binário D H C

0010 0000 32 20 vazio 0100 0000 64 40 @ 0110 0000 96 60 `

0010 0001 33 21 ! 0100 0001 65 41 A 0110 0001 97 61 a

0010 0010 34 22 " 0100 0010 66 42 B 0110 0010 98 62 b

0010 0011 35 23 # 0100 0011 67 43 C 0110 0011 99 63 c

0010 0100 36 24 $ 0100 0100 68 44 D 0110 0100 100 64 d

0010 0101 37 25 % 0100 0101 69 45 E 0110 0101 101 65 e

0010 0110 38 26 & 0100 0110 70 46 F 0110 0110 102 66 f

0010 0111 39 27 ' 0100 0111 71 47 G 0110 0111 103 67 g

0010 1000 40 28 ( 0100 1000 72 48 H 0110 1000 104 68 h

0010 1001 41 29 ) 0100 1001 73 49 I 0110 1001 105 69 i

0010 1010 42 2A * 0100 1010 74 4A J 0110 1010 106 6A j

0010 1011 43 2B + 0100 1011 75 4B K 0110 1011 107 6B k

0010 1100 44 2C , 0100 1100 76 4C L 0110 1100 108 6C l

0010 1101 45 2D - 0100 1101 77 4D M 0110 1101 109 6D m

0010 1110 46 2E . 0100 1110 78 4E N 0110 1110 110 6E n

0010 1111 47 2F / 0100 1111 79 4F O 0110 1111 111 6F o

0011 0000 48 30 0 0101 0000 80 50 P 0111 0000 112 70 p

0011 0001 49 31 1 0101 0001 81 51 Q 0111 0001 113 71 q

0011 0010 50 32 2 0101 0010 82 52 R 0111 0010 114 72 r

0011 0011 51 33 3 0101 0011 83 53 S 0111 0011 115 73 s

0011 0100 52 34 4 0101 0100 84 54 T 0111 0100 116 74 t

0011 0101 53 35 5 0101 0101 85 55 U 0111 0101 117 75 u

0011 0110 54 36 6 0101 0110 86 56 V 0111 0110 118 76 v

0011 0111 55 37 7 0101 0111 87 57 W 0111 0111 119 77 w

0011 1000 56 38 8 0101 1000 88 58 X 0111 1000 120 78 x

0011 1001 57 39 9 0101 1001 89 59 Y 0111 1001 121 79 y

0011 1010 58 3A : 0101 1010 90 5A Z 0111 1010 122 7A z

0011 1011 59 3B ; 0101 1011 91 5B [ 0111 1011 123 7B {

0011 1100 60 3C < 0101 1100 92 5C \ 0111 1100 124 7C |

0011 1101 61 3D = 0101 1101 93 5D ] 0111 1101 125 7D }

0011 1110 62 3E > 0101 1110 94 5E ^ 0111 1110 126 7E ~

0011 1111 63 3F ? 0101 1111 95 5F _

Fonte: site http://www.ufpa.br/dicas/progra/arq-asc.htm, acessado em 3 de nov. 2013.

Como o código ASCII foi concebido a partir da língua inglesa, não contém assim

os caracteres de acento das línguas francesa, espanhola e portuguesa. Por este motivo surgiu o

ASCII estendido, agora composto por 8 bits, ou seja, agora com 128 caracteres adicionais dos

símbolos necessários para os idiomas citados.

2.2 Direção do Fluxo de Dados

Considerando a direção do fluxo de dados que vai trafegar pelos dispositivos, ou

seja, a forma de utilização do canal de comunicação de dado, pode-se distinguir três maneiras

de transmissão: simplex, half-duplex e full-duplex.

Page 20: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

20

No canal simplex a informação é transmitida em uma única direção, do transmissor

para o receptor. Um exemplo de canal simplex é uma estação de rádio, onde o sinal é transmitido

para os ouvintes sem a possibilidade de retorno de informação. O esquemático de ligação de

um canal simplex é apresentado na Figura 2.

Figura 2 – Canal simplex.

Fonte: site http://www.podre.com.br/trabalhos/GraduacaoComputacaoUnisinos/2004-

1/Comunicacao_de_dados/aula03/tp_concbasicos.pdf, acessado em 12 de dez. 2013.

Em um canal half-duplex a informação pode trafegar nas duas direções, mas não ao

mesmo tempo, ou seja, de modo alternado. Quando um dispositivo está transmitindo o outro se

torna o receptor e vice-versa, como mostrado na figura 3.

Figura 3 – Canal half-duplex.

Fonte: site http://www.podre.com.br/trabalhos/GraduacaoComputacaoUnisinos/2004-

1/Comunicacao_de_dados/aula03/tp_concbasicos.pdf, acessado em 12 de dez. 2013.

Já em um canal full-duplex a informação é trocada simultaneamente nas duas

direções. Este tipo de canal pode ser definido com dois canais simplex, um em cada direção,

como mostrado na figura 4.

Figura 4 – Canal full-duplex.

Fonte: site http://www.podre.com.br/trabalhos/GraduacaoComputacaoUnisinos/2004-

1/Comunicacao_de_dados/aula03/tp_concbasicos.pdf, acessado em 12 de dez. 2013.

Page 21: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

21

2.3 Modos de Comunicação

Com a evolução dos sistemas digitais surgiram dispositivos mais que interagem

com outros sistemas ou periféricos, além de outros processo que passaram a ser controlados.

Por este motivo surgiu à necessidade de obter métodos de comunicação mais otimizados para

cada processo, o que proporcionou a criação de diferentes modos de comunicação.

De acordo com Pereira e Larges (2012), os modos de comunicação empregados

pelos dispositivos digitais podem ser classificados de acordos com diferentes características.

Levando em consideração o número de dispositivos interconectados fisicamente a um

dispositivo de transmissão, pode-se diferenciar a comunicação entre ponto a ponto e multi-

ponto. Na comunicação ponto a ponto um único dispositivo comunica-se diretamente com outro

pelo meio físico, conectando o transmissor ao receptor. Na comunicação multi-ponto um

dispositivo comunica-se simultaneamente com diversos outros dispositivos, podendo ser esta

ligação feita por mais de um condutor ou por um único condutor chamado de barramento.

Considerando como os dados são transmitidos, pode-se classificar a comunicação

como serial, onde o dado é transmitido bit a bit, sequencialmente, por uma única linha de

transmissão, e como paralela, onde todo o pacote de bits é envidado simultaneamente,

utilizando um número de canais de transmissão equivalente a quantidade de bits do dado. Fato

este, que leva com que a comunicação paralela ser utilizada, na maioria dos casos, em

comunicação de curto alcance, visto que, a dificuldade física e o elevado custo dos condutores

muitas vezes tornam este tipo de estrutura inviável para o projeto.

Outro aspecto importante de se ressaltar é que apesar de aparentemente a

comunicação serial ser mais lenta que a paralela, pelo fato desta última enviar simultaneamente

os dados, com os elevados clock’s dos dispositivos digitais utilizados atualmente esta diferença

tornou-se praticamente irrisória.

2.4 Comunicação Síncrona e Assíncrona

Segundo Canzian (2013), em uma transmissão serial, como os dados são

transmitidos em sequência, é importante saber o momento em que o receptor tem que começar

a captura de cada bit para que não ocorra a ruptura ou a perda de um dado. Entretanto, na

serialização de um dado, não há garantia de um envio uniforme pelo canal. Isso ocorre devido

ao fato de cada pacote de dados ser remetido seguido de uma pausa até que toda a informação

seja transmitida. Tais pausas, muitas vezes, possuem comprimentos variáveis. O receptor deve

saber o momento exato que vai começar a captura dos bits individuais, o tempo entre cada bit

Page 22: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

22

e quando começa e termina um pacote. Conhecendo toda esta temporização, o dispositivo

receptor é dito em sincronismo com o transmissor, garantido uma transferência de dado

confiável.

Levando em consideração a sincronização, pode-se classificar a comunicação como

síncrona e assíncrona. Em uma comunicação síncrona, há canais separados para a transmissão

de dados e para a temporização. No canal de temporização um clock é enviado ao receptor com

intuito de habilitar a captura de dados, ou seja, o receptor irá ler o canal e armazenar o dado

apenas quando receber um pulso de clock. Sendo assim, o transmissor estabelece um controle

sobre a transmissão a partir do canal de temporização, garantindo um sincronismo entre os

dispositivos. Na figura 5 é apresentado um exemplo de comunicação síncrona.

Figura 5 – Comunicação síncrona.

Fonte: CANZIAN (2012).

Em uma comunicação assíncrona, a comunicação é estabelecida com apenas um

canal. Como não há um clock de referência entre o transmissor e o receptor, o sincronismo é

feito bit a bit, através de um clock localizado no receptor com um período 𝑘 vezes menor que o

período do clock do dispositivo transmissor. Após 𝑛 amostras sequenciais, é definido o nível

lógico do bit enviado.

Para sinalizar ao receptor que a transmissão de um pacote de dados foi iniciada, o

sinal do canal, que inicialmente está em nível lógico ‘1’ (repouso), é levado para nível lógico

‘0’ (start bit). Após detectar o start bit, o dispositivo irá se preparar para receber o pacote de

dados a um taxa de transmissão pré-estabelecida e, posteriormente, um bit de paridade e um

sinal de parada (stop bit).

Ao recebe um stop bit, o dispositivo entrará novamente em repouso e só sairá desta

condição ao receber um start bit. Assim, o sincronismo é realizado a cada pacote de dados. Na

figura 6 é mostrada uma comunicação assíncrona de um pacote de dados de oito bits.

Page 23: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

23

Figura 6 – Comunicação assíncrona.

Fonte: CANZIAN (2012).

2.5 Taxa de Transmissão

Os dispositivos digitais podem trabalhar em altíssimas velocidades, entretanto, a

velocidade com que uma informação pode ser transmitida acaba sendo limitada pelo canal.

Desta forma, a velocidade com que uma informação é transmitida dever ser de tal modo que

consiga mesclar as capacidades, tanto do receptor, quanto do canal. Daí vem o conceito de taxa

de transmissão. A taxa de transmissão nada mais é do que o número de mudanças de sinal que

ocorrem em um meio por segundo, também conhecida como baud ou taxa de modulação.

De acordo com Pereira e Larges (2012), as taxas de transmissão entre dois

dispositivos dependem de vários fatores, tais como: as características dos condutores utilizados,

a utilização do canal para transmissão de um ou mais fluxos de dados ao mesmo tempo

(multiplexação), a capacidade máxima de transmissão de cada dispositivo envolvido e etc. Na

Tabela 2 são mostrado as taxas de comunicação mais comuns para protocolo RS-232.

Tabela 2 – Taxas de Comunicações mais Comuns para protocolo RS-232.

Taxa Tempo de Mudança

150 Baud 6.66 ms

300 Baud 3.33 ms

600 Baud 1.66 ms

1200 Baud 833 us

2400 Baud 416 us

4800 Baud 208 us

9600 Baud 104 us

1920 Baud 52 us

Fonte: BRAGA (2010).

Page 24: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

24

2.6 Paridade

Segundo Canzian (2013), ruídos ou distúrbios elétricos momentâneos podem causar

distorções nos dados quando estão trafegando pelos canais de comunicação. Se o dispositivo

receptor não perceber tal falha, a mensagem recebida será incorreta, o que pode acarretar

consequências sérias para o sistema. Como primeira linha de defesa contra erro de dados, eles

devem ser detectados. Através de uma detecção prévia de um erro pode-se pedir o reenvio do

dado ou impedir que este seja usado pelo sistema.

O bit de paridade é o método mais simples de detecção de erro. Um bit extra é

adicionado ao pacote de código original, de modo que com o novo pacote de código sempre

exiba um número par (ou ímpar) de valores unitários (‘1’s). Assim, o código pode detectar um

erro, embora não possa corrigi-lo.

Existem outros métodos mais complexos que, além de detectar o erro, efetuam a

correção do pacote de dados. Entretanto, a correção de erros em uma transmissão de dados

reduz a eficiência do sistema, resultando em uma queda na taxa de transmissão.

Page 25: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

25

3 PROTOCOLOS DE COMUNICAÇÃO

Como mencionado no capítulo anterior, na comunicação de dados, protocolo é um

padrão que define o formato de dados e as regras a serem seguidas para possibilitar a

comunicação entre dispositivos diferentes. Sem protocolos, uma comunicação não é viável,

uma vez que nem sempre os dispositivos se comunicam através da mesma linguagem. Um

protocolo determina como um programa deve tratar os dados para serem enviados para a etapa

seguinte do processo de comunicação.

Cada dispositivo deve ser configurado com os mesmos parâmetros e obedecer

aos mesmos padrões para que a comunicação possa ser realizada sem erros. Existem diversos

tipos de protocolos de comunicação, variando de acordo com as características do circuito.

Em função dos aspectos já mencionados aspectos como redução dos custos de

cabeamento (tanto na aquisição, quanto na instalação e manutenção), uma das interfaces mais

comumente utilizadas para transmissão de dados entre dispositivos digitais são as interfaces

seriais. Consequentemente, o estudo detalhado dos protocolos de comunicação para interfaces

seriais é grande importância.

Este capítulo tem por objetivo abordar as características dos principais

protocolos de comunicação serial utilizados em sistemas embarcados, desde protocolos mais

simples, como o RS-232C, até protocolos mais sofisticados e mais amplamente utilizados

atualmente. Um estudo mais detalhado que irá possibilitar a implementação, posteriormente, de

tais protocolos em um dispositivo FPGA.

3.1 Protocolo RS-232C

Segundo Canzian (2013), os padrões RS (Recommended Standard) são protocolos

já antigos, criados no início dos anos 60, pela necessidade de se interligar dois ou mais pontos

em uma rede de computadores. Sua especificação foi criada pela Eletronics Industry

Association (EIA), e definiu-se como sendo RS as siglas que a designariam. O protocolo RS-

232C especifica as tensões, temporizações e funções dos sinais, um protocolo para troca de

informações, e as conexões mecânicas. É um protocolo muito popular e tipicamente usado para

conexão de dois dispositivos de comunicação de dados.

As taxas de transmissão para uma interface RS-232C são de até 20Kbps para uma

distância de até 15,24 m. Entretanto, atualmente já existem versões comerciais capazes de

transmitir a maiores taxas em condutores que permitem alcançar distâncias maiores do que as

Page 26: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

26

originalmente padronizadas (por exemplo, produtos comerciais transmitindo a 115 Kbps ou

mesmo 1,6 Mbps encontram-se disponíveis).

Com este protocolo foi inicialmente criado para ser utilizado em computadores,

nada melhor para analisar todos os aspectos dessa interfase do que um estudo detalhado do

modo como o computador emprega cada um dos sinais existentes no conector serial.

3.1.1. Descrição dos Sinais

Os canais da interface RS-232C são do tipo simplex, ou seja, uma linha para

transmissão e outra para a recepção de dados, onde somente é permitida a comunicação

assíncrona. O padrão de pacote de dados utilizado é constituído por um start bit, um caractere

com 5, 6, 7 ou 8 bits, um bit de paridade e com 1, 1.5 ou 2 stop bit. Em computador, tal pacote

bem como todo o modo de operação das portas seriais são totalmente programáveis. Incluindo

um gerador de baud rate programável que permite a operação a até 115 200 bauds e um sistema

de interrupções de transmissão, recepção e erro.

Na figura 7 é mostrado um pacote de dados do protocolo RS-232C com um dado

de 8 bits, sem paridade e com 1 stop bit. Percebe-se a diferença entre os níveis de tensão entre

os níveis de tensão estabelecido pelo protocolo e o nível TTL, comumente utilizado em

dispositivos digitais.

Figura 7 – Sequência de bits em uma transmissão serial.

.

Fonte: Elaborada pelo autor.

RS-232C

TTL

Page 27: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

27

Analisando agora a saída RS 232-C é possível distinguir três momentos distintos.

O primeiro é quando a tensão de linha for mais negativa que -3 V, denominado de “marca”,

onde será caracterizado que o estado está em nível lógico ‘1’. O segundo momento será quando

a tensão medida for mais positiva que +3 V, recebendo o nome de “espaço” e será caracterizado

como nível lógico ‘0’. As regiões compreendidas entre +3 V e -3 V e acima de +15 V ou abaixo

de -15 V são denominada região de transição e é considerado como nível inválido.

A maioria dos equipamentos digitais utilizam níveis TTL ou CMOS. Portanto, o

primeiro passo para conectar um equipamento digital a uma interface RS-232C é transformar

níveis TTL (0 a 5 V) em RS-232C e vice-versa. Isto é feito por conversores de nível. O circuito

MAX232 é o circuito integrado mais utilizado por projetista de circuito eletrônicos que queiram

trabalhar com o padrão RS-232C em conjunto com integrados da família TTL ou que operam

com 5 V.

Na figura 8 são mostrados os níveis de tensões padronizados pelo protocolo RS-

232C.

Figura 8 – Níveis de tensões válidos para a comunicação serial RS 232-C.

Fonte: Adaptado de ZELENOVSKY; MENDONÇA (2006).

3.1.2 Descrição dos conectores da porta serial

Segundo Zelenovsky e Mendonça (2006), os sinais RS 232-C podem ser

distribuídos através de dois tipos de conectores do tipo DB, de 9 ou 25 pinos. A figura 9

apresenta o formato destes conectores e os principais pinos utilizados na comunicação serial.

Page 28: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

28

Figura 9 – Conectores padrão RS 232-C: (a) DB-25; (b) DB-9.

(a)

(b)

Fonte: PEREIRA; LARGES (2002)

Se este protocolo for completamente implementado, o equipamento que faz o

processamento dos sinais é chamando DTE (Data Terminal Equipment – usualmente um

computador ou terminal), este é um equipamento terminal de dados, ou seja, todos dados são

gerados ou terminam nele. O DTE será conectado a outro dispositivo através do DCE (Data

Communication Equipment – usualmente um modem), dispositivo que servira de interface com

o meio (normalmente uma linha telefônica), utilizando todos os 25 pinos para um controle

maior sobre a troca de dados. Esta ligação é mostrada na figura 10.

Page 29: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

29

Figura 10 – Conexão de um DTE com um DCE.

Fonte: Elaborado pelo autor.

Para troca de dados entre dispositivos em que o DCE não é modem, ou quando dois

dispositivos DTE são diretamente conectados, poucos sinais são necessários serem utilizados.

Os principais sinais envolvidos em uma transmissão no padrão RS 232-C são mostrados na

Tabela 3.

Tabela 3 – Descrição dos pinos dos conectores serias de 9 e 25 pinos.

9 Pinos 25 Pinos Sinal PC para Disp. Ext.

3 2 TD – Transmitted Data →

2 3 RD – Received Data ←

7 4 RTS – Request to Send →

8 5 CTS – Clear to Send ←

6 6 DSR – Data Send Ready ←

5 7 GND – Ground -

1 8 CD – Carries Detect ←

4 20 DTR – Data Terminal Ready →

9 22 RI – Ring Indicator ←

Fonte: ZELENOVSKY; MENDONÇA (2006).

Dentre os sinais de entrada, que são gerados por outro dispositivo serial, sendo este

advindo de outro computador ou de um circuito conversor TTL/RS 232-C, podem-se destacar

os seguintes sinais:

RC – Received Data: Sinal por onde os dados seriais são recebidos. Mantido

em nível lógico alto (‘1’) quando estiver em repouso.

CTS – Clear To Send: Este sinal é habilitado quando o periférico estiver pronto

para transmitir o dado.

DSR – Data Set Ready: Este sinal é utilizado pelo periférico para informar ao

dispositivo está pronto para estabelecer comunicação.

CD – Carrier Detect: Este sinal é relevante quando o DCE for um modem. Ele

é habilitado quando a linha está “fora do gancho”, uma conexão for

estabelecida, e um tom de resposta começar a ser recebido do modem remoto.

Page 30: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

30

Este sinal é desabilitado quando não houver tom de resposta sendo recebido, ou

quando o tom de resposta for de qualidade inadequada para o modem local.

RI – Ring Indicator: Este sinal só é relevante quando o DCE for um modem, e

é habilitado quando um sinal de chamada estiver sendo recebido na linha

telefônica. A habilitação desse sinal terá aproximadamente a duração do tom de

chamada, e será desabilitado entre os tons ou quando não houver tom de

chamada presente.

Por fim, dentre os sinais de saída gerados pelo dispositivo transmissor a outros

dispositivos seriais, podem-se destacar os seguintes sinais:

TD – Transmitted Data: Sinal por onde os dados seriais são transmitidos.

RTS – Request To Send: Este sinal é habilitado para informar ao periférico que

o dispositivo está pronto para transmitir.

DTR – Data Terminal Ready: Este sinal é utilizado pelo dispositivo para

informar ao periférico está pronto para estabelecer comunicação.

A conexão entre dois dispositivos deve ser realizada com bastante cuidado, uma

vez que os pinos de transmissão de um devem ser conectados com os pinos de recepção do

outro. Em alguns dispositivos esta ligação é realizada nos respectivos conectores utilizando,

desta forma, cabos denominados “transparentes”, onde nenhuma conexão cruzada é realizada.

No caso contrário, onde não há esta inversão de pinos, a conexão é realizada por cabos

denominados “null-modem”, onde as linhas são cruzadas. Desta forma, a realização de testes

ou até mesmo a criar os próprios cabos são as melhores saídas para que não ocorram problemas

futuros.

3.2. Protocolo I2C

De acordo com Marciel, Soares e Aguiar (2012), o I2C foi desenvolvido em meados

dos anos 80 pela Philips Semiconductors. O I2C é um protocolo serial, síncrono e com canal

bidirecional do tipo half-duplex, destinado a aplicações de baixo custo e transferência de dados

de volume mediano. Este protocolo tem como principal finalidade ser utilizado na comunicação

entre dispositivos onboard, ou seja, dispositivos que estão dispostos em uma mesma placa de

circuito impresso. Isso nada impede a comunicação via barramento I2C entre dispositivos

instalados em placas distintas, desde que estejam próximas fisicamente. Entretanto, se os

circuitos se encontrarem em longa distância será necessário a utilização de um circuito a parte

para amplificador sinal para que não ocorra nenhum distorção.

Page 31: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

31

O I2C permite a comunicação entre diversos dispositivos através de um barramento

de duas vias: a Serial Data line (SDA) e a Serial Clock line (SCL). Pela linha SDA trafegam

dados e endereços, enquanto na linha SCL trafega o clock responsável pelo sincronismo dos

dispositivos.

Neste protocolo os dispositivos envolvidos na comunicação são denominados

Mestre e Escravos. Ao configurar um processo baseado no protocolo I2C, um dispositivo

mestre será responsável por comandar a transmissão, podendo ser conectado a vários Escravos,

como mostrado na figura 11.

Figura 11 - Configuração do protocolo I2C.

Fonte: MARCIEL; SOARES; AGUIAR (2012).

Uma vez configurado o dispositivo Mestre, este dispositivo será responsável pelo

clock, começar e finalizar a transmissão. Entretanto, como este protocolo possui um canal

bidirecional, ele pode tanto transmitir quanto receber informações dos dispositivos Escravos.

As principais aplicações deste protocolo estão relacionadas com o controle de

dispositivos como memória RAM, memória ROM, drive de LCD, conversores A/D e D/A,

processadores de áudio, processadores de vídeo, entre outros. Ou seja, as aplicações estão

sempre relacionadas com o controle de periféricos dos sistemas, visto seu baixo custo por usar

apenas dois condutores e sua capacidade de trabalhar com vários escravos.

Inicialmente criado para trabalhar a uma taxa de transferência de dados de até 100

Kbps, com o avanço da tecnologia e aumento do desempenho proporcionou que com a interface

I2C alcançasse taxas de transferências de até 3,4 Mbps.

3.2.1. Características do Protocolo I2C

Como o protocolo trabalha a partir do conceito de Mestre e Escravos, e a

comunicação é realizada por apenas duas linhas (clock e dados), para estabelecer uma

comunicação é necessário a identificação do dispositivo que se pretende comunicar. Sendo

assim, a comunicação sempre será iniciada pelo envio pela linha SDA do endereço do

Page 32: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

32

dispositivo escravo com qual se deseja estabelecer comunicação. Este endereçamento pode ser

de 7 ou 10 bits e será feito por software.

A informação irá trafegar pela linha SDA através de pacotes de 8 bits. Para o

endereçamento de 7 bits, o mestre irá inicializar a comunicação com o envio de 1 byte pela

linha SDA, sendo os primeiros 7 bits para identificar o dispositivo escravo. O oitavo bit será o

bit de R/W (Read/Write), este bit irá definir a direção do fluxo de dados, ou seja, se a

comunicação será de escrita ou leitura. Para o endereçamento de 10 bits, o mestre irá enviar 2

bytes pela linha SDA, os quais 10 bits serão de endereçamento mais um bit de R/W.

Da mesma forma que o protocolo RS 232-C, o barramento I2C estará em repouso

sempre que as linhas SDA e SCL estiverem em nível lógico alto. Assim, a comunicação só terá

início quando ocorre a transição de nível lógico alto para baixo na linha SDA, ou seja, o bit de

start do protocolo. Após esta etapa o barramento será considerado ocupado, pois uma

transmissão de dados foi inicializada.

A condição de start irá inicializar a transmissão do sinal de clock pela Lina SCL.

Assim, com o clock ativo, o envio do pacote sé habilitado. A partir deste momento o receptor

deve ler os bits da linha SDA no momento em que o clock estiver em nível lógico alto, período

em que o bit presente na linha SDA deve ser manter obrigatoriamente estável. Após o envio do

pacote, a linha SDA passará novamente para a condição de repouso (nível lógico alto), cessando

o clock da linha SCL. As condições de início e fim de comunicação de um protocolo I2C é

apresentada na figura 12.

Figura 12 - Condições de início e fim de comunicação do protocolo I2C.

Fonte: MARCIEL; SOARES; AGUIAR (2012).

Como mencionado anteriormente, o bit R/W definirá a direção do fluxo de dados.

Onde o dispositivo mestre fará R/W=’1’ para leitura e R/W=’0’ escrita. Após este bit o receptor

tem que enviar um bit ACK (acknowledge), o chamado bit de reconhecimento.

O pulso ACK indica para o transmissor que um byte foi recebido com sucesso. Da

mesma forma, o dispositivo mestre deve receber um bit de ACK após cada byte transmitido,

podendo força uma condição de stop dependendo do nível lógico deste bit. Um nível lógico

Page 33: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

33

baixo no bit de ACK definirá que o bit foi enviado com sucesso, caso contrário, a transmissão

será finalizada com uma condição de stop, sendo esta condição conhecida como pulso de

NACK (not acknowledge). O dispositivo mestre pode, após gerar uma condição stop, dar início

a uma nova transmissão e reenviar os dados ao dispositivo escravo.

No momento em que o dispositivo mestre estiver recebendo dados (ciclo de leitura),

ele deve gerar um pulso ACK após cada byte recebido com sucesso. Quando não desejar mais

receber dados, ele deve enviar um pulso NACK após o último byte recebido. Neste caso, o pulso

NACK tem o objetivo de informar ao dispositivo escravo que a transmissão será finalizada.

Após o pulso NACK o dispositivo mestre encerra a transmissão impondo uma condição stop

no barramento.

Figura 13 – Comunicação I2C: (a) Processo de Escrita; (b) Processo de Leitura.

(a)

(b)

Fonte: MARCIEL; SOARES; AGUIAR (2012).

3.3. Protocolo SPI

Desenvolvido pela Motorola® para interliga microcontroladores e outro

periféricos, o SPI (Serial Peripheral Interface), por ser bastante simples, tornou-se bastante

difundido entre os outros fabricantes. Atualmente encontrado em uma grande variedade de

dispositivos periféricos usados no projeto de sistemas embarcados. Constituído por um

barramento de comunicação full-duplex síncrono de alta velocidade, este protocolo utiliza a

comunicação do modelo Mestre/Escravo, onde o mestre sempre inicia a transmissão de cada

Page 34: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

34

pacote de dados. Da mesma forma que o protocolo I2C, um dispositivo mestre pode ser ligado

a múltiplos dispositivos escravos, entretanto, no SPI cada um terá seu próprio canal de seleção

(Slave Select), como ilustrado na figura 14.

Figura 14 – Conexão entre dispositivos por um barramento SPI.

Fonte: SILVA (2008).

3.3.1. Características da interface SPI

De acordo com Silva (2008), a velocidade de transmissão de um padrão SPI pode

ser superior a 10 Mbps, velocidade muito superior as dos protocolos mencionados até o

momento. Fato este, que o tornou bastante popular entre fabricantes para aplicações em

microcontroladores, especialmente na parte de memória, em que a velocidade da troca de

informações é de extrema importância.

A alta taxa de transmissão deve-se ao fato de que o protocolo SPI, por ser full-

duplex, o dispositivo pode enviar um dado e receber outro ao mesmo tempo. Nenhum

dispositivo conectado é somente transmissor ou receptor.

O fluxo é controlado pelo Mestre através do sinal de relógio SCLK. Só há

transferência enquanto o Mestre pulsar o sinal SCLK. Deste modo, não somente a escrita, mas

também para a leitura os pulsos devem ser gerados, o que só ocorre quando um dado é enviado.

Para iniciar uma comunicação, o Mestre configura o clock, utilizando uma

frequência inferior ou igual à frequência máxima do dispositivo Escravo suporta. Assim, os

dados são transferidos em pacotes de 8 bits, no qual o bit mais significativo é transmitido

primeiro.

Na Tabela 4 segue a descrição dos sinais que compõem a interface física de um

padrão SPI.

Page 35: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

35

Tabela 4 – Descrição dos pinos do padrão SPI.

Sinal (Pino) Descrição

SS Select Slave – Seleção do Escravo, ativa com

nível lógico ‘0’ (saída do Mestre e entrada do

Escravo).

SDI Serial Data Input – Canal por onde os dados

serão recebidos (entrada).

SDO Serial Data Output – Canal por onde os dados

serão enviados (saída).

SCLK Serial Clock – Clock de Sincronização (saída

do Mestre e entrada do Escravo).

Fonte: Elaborada pelo autor.

As figuras 15 (a) e (b) mostram, respectivamente, o procedimento de escrita e

leitura do protocolo SPI em dispositivo de memória. A comunicação começa com um 1 bit de

W/R, que define se o mestre quer transmitir ou receber um dado. Em seguida, um pacote é

enviado para definir o endereço de memória que se deseja acessar. Por último, o dado é

transmitido.

Figura 15 – Procedimento de escrita (a) e leitura (b) de dados do protocolo SPI.

(a)

(b)

Fonte: SILVA (2008).

Page 36: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

36

3.4 Protocolo CAN

Segundo Marques (2004), ao longo do tempo, as técnicas de controle envolvidas e,

consequentemente, a necessidade de sensoriamento e de trocar informações expandiram de tal

forma que proporcionou o aumento do volume de cabos e linhas de controles na estrutura

automotivas. Além do aumento do custo em cabeamento, a quantidade exagerada de cabos na

estrutura proporciona um aumento físico e complexidade das ligações. Tais fatores tornam o

circuito pouco confiável no que diz respeito à segurança, a estabilidade e a tolerância a falhas,

visto que, o número de condutores em paralelo gera um ruído e o sistema ainda tem que suportar

a instabilidade e as trepidações intrínsecas do próprio automóvel.

Pensando nisso, o modelo do Controller Area Network (CAN) foi proposto por

Robert Bosh, em 1986, com o intuito de prover as interconexões automotivas de forma mais

organizada e eficiente. Este novo modelo consiste na criação de um único barramento elétrico,

que percorria todo o veículo, interconectando todos os sensores e dispositivos de controle, assim

que eles podem comunicar entre si de forma mais eficiente e organizada, evitando a quantidade

excessiva de cabos. Este novo modelo mostrou-se tão eficiente que, atualmente, a maioria dos

fabricantes automotivos o utiliza. Na figura 16 é apresentado um modelo de como o barramento

CAN foi implementado em uma estrutura automotiva.

Figura 16 – Modelo de protocolo CAN proposto.

Fonte: site http://www.mzeditora.com.br/artigos/veicular.htm, acessado em 2 de dez. 2013.

Devido suas excelentes características, o protocolo CAN vem sendo utilizadas em

aplicações industriais com bastante sucesso. Isso deve-se ao fato de ser um sistema bastante

robusto e confiável criado para suporta situações com altos índice de ruídos induzidos e grandes

variações de alimentação.

Page 37: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

37

A regulamentação geral da rede CAN está presente na resolução ISO 11898, gerada

pela International Organization for Standardization e sua regulamentação específica para as

diversas aplicações em automóveis foi padronizada pela Society of Automotive Engineers

(SAE).

O CAN é um protocolo serial constituído por um barramento multi-mestre, ou seja,

vários dispositivos podem pedir acesso ao sistema simultaneamente. Da mesma forma, um

único dispositivos também pode mandar uma mensagem para vários dispositivos diferentes.

Ao contrário dos outros protocolos, não existe um endereçamento do destinatários

no sentido convencional. Em vez disso, são transmitidas mensagens que possuem um

determinado identificador. Assim, um emissor envia uma mensagem para todos os nós do

barramento e cada dispositivo decide com base no identificador se a mensagem é relevante e o

nível de prioridade que ela terá ao competir pelo acesso do barramento.

Segundo Barbosa (2003), algumas modificações foram realizadas no protocolo

CAN com o passar do tempo. Estas modificações ocorreram principalmente no que diz respeito

a taxa máxima de transmissão e no tamanho do identificador. Desta forma, acabaram surgindo

três tipos de protocolos CAN, diferenciada de acordo com a taxa de transferência e o tamanho

do identificador. Esta divisão é apresenta na Tabela 5.

Tabela 5 – Tipos de protocolo CAN.

Nomenclatura Padrão Taxa máxima Identificador

CAN baixa velocidade ISO 11519 125 Kbps 11 bits

Versão 2.0 A ISO 11898:1993 1 Mbps 11bits

Versão 2.0 B SO 11898:1995 1 Mbps 29 bits

Fonte: BARBOSA (2003).

Nota-se que nas duas primeiras versões o identificador pode assumir até 2048, já

com a Versão 2.0 B o identificadores podem assumir 537 milhões de números. Ou seja, uma

quantidade muito elevada de dispositivos pode estar conectada em um único barramento CAN.

3.4.1 Características dos sinais

Para se analisar os sinais envolvidos neste tipo de protocolo é necessário analisar

primeiramente como é definido cada nível lógico do barramento. O protocolo CAN utiliza um

meio de transmissão diferencial, na qual é observa a diferença de tensão entre dois condutores,

o CANH e o CANL. Quando a interface deseja gera um bit de nível lógico baixo, chamado de

bit dominante, ele força um nível elétrico no conduto CANH de aproximadamente 3,5 V e força

Page 38: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

38

o condutor CANL para aproximadamente 1,5 V. Estabelecendo uma diferença de potencial de

aproximadamente 2 V. Da mesma forma, quando se deseja gerar um bit de nível lógico alto,

chamado de bit recessivo, é mantido um nível de tensão de aproximadamente 2,5 V nos

condutores CANH e CANL, obtendo uma diferença de potencial nula.

Esse tipo de transmissão utilizando dois condutores foi projetado de forma que reduza

o ruído através do cancelamento do efeito de campo. Além disso, não há gasto de potência da

rede quando o bit está no modo recessivo, apenas quando é gerado um bit dominante, reduzindo

a energia gasta na transmissão. Os níveis de tensões para o modo recessivo e dominante são

apresentados na figura 17.

Figura 17 – Níveis lógicos do barramento CAN.

Fonte: FERREIRA (2009).

3.4.2 Formato do Protocolo

Dentre as versões de protocolo CAN apresentada anteriormente há duas que são

bastante utilizadas atualmente: a Versão 2.0 A e a Versão 2.0 B. A diferença entre estes dois

tipos diz respeito ao tamanho do campo destinado para o identificador. De modo a manter a

compatibilidade com as outras variações, na 2.0 B podem tanto ter tanto identificadores de 11

bits quando identificadores de 29 bits.

As duas versões possuem basicamente a mesma estrutura de pacote. Assim, um

pacote de dados de um protocolo é constituído por:

Start of Frame (SOF): Indica o início da transmissão de uma informação. Um

único bit dominante.

Arbitration Field: Na versão 2.0 A é constituído por um pacote de 11 bits

chamado de Identificador da mensagem, e um bit de requisição de retransmissão

Page 39: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

39

de dados (RTR – Remote Transmission Request). O pacote Identificador é

responsável por informar ao barramento a prioridade da mensagem. E o bit RTR,

se este for dominante, é responsável por informar que o dispositivo requisita

dados de outros nós do barramento.

Na versão 2.0 B, o Arbitration Field possui 29 bits no pacote de identificação

dividido em um pacote de 11 bits, e um de 18 bits. Um bit SRR (Subistitute

Remote Request) substitui o bit RTR e é transmitido recessivo. Após o bit SRR

vem um bit IDE (Identifier Extension), que se recessivo, informa que o próximo

pacote é a extensão do identificador, caso contrário, informa é o fim da

identificação. Sendo finalizado por um bit RTR.

Control Field: Constituído por um pacote de 4 bits informando o comprimento

da mensagem (DLC – Data Lenght Code) e por um (versão 2.0 A) ou dois (versão

2.0 B) bits reservados.

Data Field: É a mensagem propriamente dita. O campo da mensagem pode ser

composto de 0 a 8 bytes.

CRC Field: Composto por uma sequência de 15 bits e um recessivo delimitador,

este pacote é um método para detectar um erro durante a transmissão. O CRC é

identificado por um polinômio identificador, g(x). O polinômio gerador é x15 +

x14 + x10 + x8 + x7 + x4 + x3 + 1. Para calcular o CRC, a cadeia de dados, d(x),

deve ser dividida pelo polinômio gerador, g(x); Dessa operação resultam q(x)

(quociente) e r(x) (resto). O resto é o valor CRC.

ACK Field: Constituído por dois bits de confirmação de recebimento. É

dominante somente se a mensagem enviada foi recebida corretamente pelo

receptor.

End of Frame (EOF): Indica o fim de transmissão. Constituído por um pacote de

7 bits para informar o fim do pacote (7 bits recessivos) ou informar algum erro

aconteceu.

Interframe Space (IFS): Um pacote de 3 bits recessivos utilizados para definir

um espaço entre dois pacotes de dados.

Nas figura 18 (a) e (b) são apresentada, respectivamente, o pacote de dados da

Versão 2.0 A e da Versão 2.0 B.

Page 40: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

40

Figura 18 – Estruturas do protocolo CAN: (a) Versão 2.0 A; (b) Versão 2.0 B.

(a)

(b)

Fonte: BARBOSA (2003).

Por ser uma comunicação assíncrona, onde só existem as duas linhas de dados, as

sincronização dos dispositivos em um protocolo CAN é realizada através de dois

procedimentos: a sincronização forçada e a resincronização. A sincronização forçada ocorre

dentro do dispositivo receptor quando o barramento está em repouso e detecta a transição de

um bit recessivo para um dominante. A resincronização consiste em produzir um alongamento

ou estreitar do tempo de bit, ou seja, aumenta ou diminui a diferença entre o clock do

transmissor e receptor, de forma a permitir que a localização do ponto de amostragem seja

correta.

3.5 Protocolo USB

Dentre os protocolos já mencionados, o USB (Universal Serial Bus) é um dos mais

populares, graças a sua facilidade de uso, desempenho, robustez e versatilidade em

interconectar diferentes dispositivos através de uma interface única.

De acordo com Zelenovsky e Mendonça (2006), este protocolo surgiu a partir da

metade da década de 90 pelos principais líderes de mercado com o objetivo de criar uma

interfase padrão que oferecesse características confortáveis de operação não presentes nos

padrões até então vigente, como:

Permitir a conexão de periféricos sem a necessidade de abri o gabinete do

computador;

Permitir a conexão de dispositivos com o sistema operacional em atividade;

Possuir um conector padrão, simples, barato e de fácil encaixe;

Dispensar drivers específicos de fabricantes;

Page 41: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

41

Possuir um controle interno de energia que permite que o dispositivo se

desconecte automaticamente e não consuma potência quanto estiver ocioso;

Especificar um protocolo de comunicação com detecção e supressão automática

de erros de transmissão.

O padrão USB foi adotado e padronizado por empresas mundialmente conhecidas

no mercado de computadores pessoais como, por exemplo: Apple, Hewlett-Packard, Intel,

Microsoft, Compaq, dentre outras. O que acabou contribuindo ainda mais para o sucesso deste

protocolo.

Nas primeiras versões a interface oferecia uma taca de transmissão de até 12 Mbps,

sendo padronizado nos anos 2000, um modelo 2.0 que popularizou essa tecnologia, dispondo

de 480 Mbps de velocidade. Em 2009 surgiu a versão 3.0 disponibiliza 4.8 Gbps, ou seja,

consegue ser pelo menos dez vezes mais rápido na hora de fazer transferência de dados.

Tanto o modelo 2.0 quanto o 3.0 possuem a mesma estrutura de conector (sendo

que o do último possui cor azul), o que permite a compatibilidade de ambos em versões

diferentes, como por exemplo, usar um USB 2.0 em entrada 3.0 ou vice-versa. Entretanto, o

dispositivo não irá dispor de toda a capacidade que tecnologia permite. Na figura 19 são

mostrados os conectores 2.0 e 3.0.

Figura 19 – Conetores USB 2.0 (esquerda) e USB 3.0 (direita).

Fonte: site http://techiedas.blogspot.com.br/2012/05/all-you-need-to-know-about-usb-20-and.html, acessado em 2

de dez. 2013.

Page 42: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

42

3.5.1 Características do padrão USB.

O USB é um barramento serial de dados constituído por um hospedeiro (Host) e

por diversos periféricos simultaneamente conectados. O barramento permite que periféricos

sejam conectados, configurados, usados e desconectados enquanto outros periféricos estão em

operação, conexão conhecida como plug and play.

O barramento físico do protocolo USB é constituído por um cabo blindado com

quatro condutores: Vbus, D+, D- e GND. O condutor Vbus é responsável pela alimentação do

dispositivo USB, desta forma o dispositivo não necessita de uma fonte próprio, o que diminui

os custo do projeto. Da mesma forma que a interfase do protocolo CAN, o USB utiliza a

diferença de tensões dos sinais D+ e D- para trocar informações.

Apesar de possuir um barramento simples, com boa taxa de transferência de dados

e uma versatilidade de uso, a interface elétrica e lógica pode torna-se bastante complexa, o que

caba inviabilizando sua construção com componentes discretos digitais e analógicos. O que

muitas vezes leva os projetistas a utilizar interfases já prontas para as aplicações.

Page 43: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

43

4 IMPLEMENTAÇÃO DOS PROTOCOLOS

Com todas as características dos protocolos descritas no capítulo anterior é possível

cria bibliotecas para serem usadas como módulos de projetos futuros. Esta bibliotecas devem

possuir todas as funcionalidades possíveis para cada protocolo e nos vários modos de operação.

Isso daria uma grande flexibilidade ao projetista, pois aceleraria bastante o tempo de

desenvolvimento do projeto.

Desenvolvidas tais bibliotecas o projetista escolheria apenas os módulos de acordo

com a necessidade do circuito. Assim o projeto de comunicação se reduziria apenas a um

controle que ativaria cada um dos módulos no momento apropriado, sem se preocupar com os

detalhes de restrição de tempo e padrão de interfase. Uma vez que, quando ativados os modos

de operação de cada biblioteca, os dados são transmitidos com o padrão do protocolo em

questão.

Serão desenvolvidas bibliotecas para todos os protocolos citados excetuando-se os

protocolos CAN e USB, que necessitam de um interfase elétrica mais robusta e pela

indisponibilidade de periféricos ou conectores para o dispositivo FPGA escolhido como base

para tal aplicação. Além do que, o protocolo USB ser uma fonte de conhecimento que seria

mais apropriado um estudo a parte voltado apenas para este tema.

4.1 Dispositivo utilizado

Os blocos foram desenvolvidos na linguagem VHDL, sendo implementados em

FPGA utilizando como plataforma de desenvolvimento o kit didático DE0-Nano da fabricante

Altera®. A placa DE0-Nano apresenta uma plataforma de desenvolvimento FPGA de tamanho

compacto, o mais adequado para projetos de circuitos de protótipos, principalmente para projeto

elétricos voltados mercado. Este kit foi projetado para ser usada na implementação mais simples

visando o dispositivo Cyclone IV, contendo até 22.320 Logic elements (LE’s).

O DE0-Nano possui uma interface que disponibiliza incluindo dois headers

externos GPIO para estender projetos além da placa, a placa possui memória SDRAM e

EEPROM, conversor A/D, LED’s e push-buttons.

Na figura 20 é mostrado a imagem do Kit didático DE0-Nano com FPGA da família

Cyclone IV.

Page 44: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

44

Figura 20 – Kit didático DE0-Nano com FPGA da família Cyclone IV.

Fonte: TERASIC (2011).

As vantagens do DE0-Nano incluem seu tamanho e peso, bem como sua capacidade

de ser configurado sem a necessidade de hardware. Além disso, é ideal para projetos móveis e

portáteis. Na figura 21 é apresentado o layout da placa do kit didático DE0-Nano com os

principais componentes disponíveis.

Figura 21 – Layout da placa do kit didático DE0-Nano.

Fonte: TERASIC (2011).

4.2 Biblioteca RS-232 C

Como já analisado, o protocolo RS-232C é assíncrono e constituído por canais do

tipo simplex. Partindo destes dados foram criados dois blocos para compor esta biblioteca: o

Page 45: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

45

receptor (RX) e o transmissor (TX). Cada bloco foi projetado para funcionar de forma

independente e com parâmetros de comunicação moldáveis para funcionar em qualquer modo

de comunicação.

4.2.1 Bloco TX

Este bloco implementa o transmissor RS-232 C. É constituído por dois processos,

o primeiro gera a taxa de transmissão do pacote e o segundo é uma máquina de estado que

configura cada bit do pacote. Esta configuração será definida a partir de quatro parâmetros

definidos por variáveis genéricas no início do bloco. Estes parâmetros estão descritos na Tabela

6.

Tabela 6 – Parâmetros de ajuste do bloco TX.

Sinal Descrição

DIVISOR Valor que irá dividir o clock interno para

gerar a taxa desejada.

DBIT Número de bits do dado.

SP Número de stop bit no final do pacote.

P Dois bits para configurar a paridade.

“11” = Sem paridade

“10” = Paridade ímpar

“01” = Paridade par

“00” = sem paridade

Fonte: Elaborado pelo autor.

O primeiro processo (PROCESS: DIVIDIR) é constituído por um divisor de

frequência que a partir do valor configurado no parâmetro DIVISOR irá dividir a frequência do

clock de entrada para obter a taxa de transferência desejada para a transmissão, mostrado na

figura 22.

Figura 22 – Código divisor de frequência em VHDL.

Fonte: Elaborado pelo autor.

DIVIDIR: PROCESS (CLK_IN, CLK_OUT)

VARIABLE AUX: INTEGER RANGE 0 TO DIVISOR := 0;

BEGIN

IF (AUX = DIVISOR) THEN

AUX := 0;

CLK_OUT <='0';

ELSIF((CLK_IN'EVENT) AND (CLK_IN='1'))THEN

AUX := AUX + 1;

CLK_OUT <= '1';

END IF;

END PROCESS DIVIDIR;

Page 46: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

46

O segundo processo (PROCESS: TRANSMITIR) é onde ocorre de fato a

configuração do pacote RS-232 C. No estado de repouso a saída CTS será levada para nível

lógico ‘1’ para mostrar ao modem que o dispositivo está pronto para transmissão. Para que a

máquina de estado saia da condição de repouso e ocorra a transmissão, o bloco tem que receber

um sinal de HABILITAR com nível lógico. Os pinos de entrada e saída do bloco TX são

mostrados na figura 23.

Figura 23 – Bloco TX.

Fonte: Elaborado pelo autor.

Na Tabela 7 é apresentada a descrição de cada pino o bloco TX.

Tabela 7 – Pinos do bloco TX.

Sinal Descrição

CLK_IN Clock de referência (50MHz)

HABILITAR Habilita a trnamissão

TxIN[7..0] Oito bits de dado para ser transmitido.

TxD Saída serial.

CTS Bloco pronto para transmitir

Fonte: Elaborado pelo autor.

Ao sair do estado de repouso a máquina irá para o estado de START onde a saída

TxD será levada para nível lógico baixo, mostrando ao dispositivo receptor que irá começar

uma nova transferência de dados. No próximo estado o dado posto na entrada TxIN será

mandado para um registrador auxiliar. A partir desse registrador o dado começará a ser

transferido desde o bit menos significativo até o mais significativo para a saída TxD, a cada

pulso de clock.

Após transferir o dado, a máquina irá para a condição de paridade ou de stop bit

dependendo do valor configurado no parâmetro P, que define se o protocolo terá ou não bit de

paridade, além de configura-la (tabela 6). Se o parâmetro P for configurado em “01” ou “10”,

Page 47: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

47

a máquina irá para a condição de paridade, neste estado um laço FOR irá contar a quantidade

de 1’s encontrado no dado e irá definir o valor da paridade de acordo com a Tabela 8.

Tabela 8 – Cálculo da paridade.

P CONTADOR2(0) (MSB) TxD

“10” ‘1’ ‘0’

‘0’ ‘1’

“01” ‘1’ ‘1’

‘0’ ‘0’ Fonte: Elaborado pelo autor.

Na figura 24 é mostro o laço FOR responsável pelo cálculo da paridade.

Figura 24 – Código divisor de frequência em VHDL.

Fonte: Elaborado pelo autor.

Por último vem os estado de parada que são configurados pelo parâmetro SP. Este

parâmetro pode ir de 1 a 2 stop bits e define quantos estados a máquina irá percorre até chegar

na condição de final de transmissão. Ao chegar nessa condição a máquina deverá ser resetada

para que possa ser transmitido outro dado.

A figura 25 mostra a forma de onda obtida na ferramenta Programmer and

SignalTap II da Altera®. Com o bloco TX configurado para transmitir dados de 8 bits (DBIT

= 8), com paridade par (P = “01”) e com um stop bit (SP = 1), um dado com valor “10000001”

é enviado respeitando todas as etapas de transmissão do protocolo RS-232 C.

DEF : FOR i IN 0 TO 7 LOOP

IF (TxREG(i) = '1') THEN

CONTADOR2 := CONTADOR2 + 1;

END IF;

END LOOP DEF;

IF (P = "01") THEN -- PARIDADE PAR

IF (CONTADOR2(0) = '1') THEN -- NÚMERO IMPAR

TxR <= '1'; -- PARIDADE '1'

ELSE

TxR <= '0'; -- PARIDADE '0'

END IF;

ELSIF (P = "10") THEN -- PARIDADE IMPAR

IF (CONTADOR2(0) = '1') THEN -- NÚMERO PAR

TxR <= '0'; -- PARIDADE '0'

ELSE

TxR <= '1'; -- PARIDADE '1'

END IF;

END IF;

CONTADOR2 := "00000000";

Page 48: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

48

Figura 25 –Transmissão de um dado pelo bloco TX.

Fonte: Elaborada pelo autor.

Na figura 25 são apresentadas cinco regiões que correspondem aos estados do

pacote transmitido que são:

Região 1: Bloco TX em repouso. Saída TxD em nível lógico ‘1’.

Região 2: Início de transmissão, enviando start bit. Saída TxD em nível

lógico ‘0’.

Região 3: Pacote de dado de 8 bits. Enviando sequencialmente o dado

“10000001”.

Região 4: Região de paridade. Como P = “01” (paridade par) é enviado um

bit de paridade com nível lógico ‘0’.

Região 5: Região de stop bit. A linha é levado para condição de repouso

(nível lógico ‘1’), esperando uma nova transmissão.

Um fluxograma com a lógica empregada no bloco TX é apresentada na figura 26.

Figura 26 – Lógica de transmissão serial RS-232 C.

Fonte: Elaborado pelo autor.

Page 49: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

49

4.2.2 Bloco RX

Este bloco implementa o receptor RS-232 C. Da mesma forma que o bloco TX, o

receptor RX é composto por um processo responsável pelo clock e outro pelo controle. O

processo de clock irá definir a taxa de recepção de dados, sendo esta quatro vezes a taxa de

transmissão para manter o sincronismos entre eles. O processo de controle será responsável por

receber cada bit e alocá-los na saída RxR para compor a informação sem que esta seja

corrompida. Os pinos de entrada e saída do bloco RX são mostrados na figura 27.

Figura 27 – Bloco de recepção RX.

Fonte: Elaborado pelo autor.

Na Tabela 8 é apresentada a descrição de cada pino o bloco RX.

Tabela 9 – Pinos do bloco TX.

Sinal Descrição

CLK_IN Clock de referência (50MHz)

RxD Entrada serial.

RTS Transmissor pronto para transmitir

e habitar recepção (nível lógico ‘1’)

RxR[7..0] Dado recebido

CTS Dispositivo pronto para receber (nível lógico ‘1’)

Fonte: Elaborado pelo autor.

Este bloco funciona de maneira muito semelhante ao TX. Ao ser definido que o

dispositivo transmissor está pronto para transmitir através da detecção de um, sinal com nível

lógico alto no sinal RTS, o controle irá analisar o sinal RxD até detectar o sinal de start bit.

Com a detecção do start bit, o controle irá continuar a varredura do sinal RxD com uma

frequência quatros vezes a do transmissor pegando uma amostra no meio de cada bit e alocando

na saída RxR, sempre do bit menos significativo para o mais significativo.

A figura 28 mostra a forma de onda obtida na ferramenta Programmer and

SignalTap II da Altera®. Com o bloco RX configurado para receber dados de 8 bits (DBIT =

8), com paridade par (P = “01”) e com um stop bit (SP = 1), um sinal é enviado para o bloco

Page 50: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

50

RX. O bloco conseguiu capturar o dado e passar para o registrado RxR sem danificar a

informação transmitida.

Figura 28 – Bloco de recepção de dados RX.

Fonte: Elaborado pelo autor.

Na figura 28 são apresentadas cinco regiões que correspondem aos estados do

pacote recebido que são:

Região 1: Bloco RX em repouso.

Região 2: Detecta início de transmissão. RxD em nível lógico ‘0’.

Região 3: Começa a receber os 8 bits de dado.

Região 4: Região de paridade. Como P = “01” (paridade par) é enviado um

bit de paridade com nível lógico ‘1’. A saída RxR (dado recebido) vai para

“00000001”.

Região 5: Região de stop bit. A linha é levado para condição de repouso

(nível lógico ‘1’), esperando uma nova transmissão.

4.2.3 Proposta de aplicação

Tendo criado as bibliotecas do protocolo RS-232 C, aplicar o conhecimento torna-

se uma questão de configurar os blocos e aplicar um controle de transferência de dados. Um

aplicação bastante simples e que ao mesmo tempo abre uma gama de possibilidades para futuras

aplicações é a comunicação entre um FPGA e um computador pessoal.

O primeiro passo é ter uma interface que converta os níveis lógicos do FPGA para

níveis aceitos pelo computador. O mercado disponibiliza módulos conversores que podem fazer

este papel com grande facilidade. Este conversores podem ir tanto de conversores TTL para

padrão RS-232 disponível para um comunicação serial com a porta serial presente nos

computadores pessoais, até conversores RS-232 para USB.

Neste trabalho, será utilizado um dispositivo que converte os níveis de 3.3 V

disponíveis pelo kit DE0-Nano para os níveis RS-232 aceitos pela porta serial do PC. A Figura

23 mostra o módulo conversor utilizado nesta aplicação.

Page 51: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

51

Figura 29 – Conversor DB9 RS232 para TTL MAX232.

Fonte: Datasheet Conversor DB9 RS232 para TTL MAX232.

Para a recepção dos dados transmitidos para porta serial do PC será utilizado o

software RcomSerial v1.2, disponibilizado pelo fabricante Rogercom®. O RcomSerial é um

software para testar dispositivos que se comunicam através da porta serial RS232. Nesta

aplicação, este programa irá receber os dados do conversor TTL/RS-232 conectado ao kit DE0-

Nano.

Figura 30 –Programa RcomSerial v1.2.

Fonte: Elaborado pelo autor.

Para mostrar a funcionalidade da biblioteca será utilizado o bloco TX em conjunto com

um bloco de controle que irá transmitir a string “HELLO WORLD!”, sendo cada caractere

Page 52: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

52

transmitido a cada 1s. Assim, o bloco de controle terá que mandar o ASCII correspondente de

cada caractere, assim como, um sinal de HABILITAR para resetar o transmissor serial. A

Figura 31 mostra o diagrama de blocos do processo descrito.

Figura 31 – Diagrama de blocos da aplicação.

Fonte: Elaborado pelo autor.

O bloco serial foi configurado para transmitir cada pacote de 8 bits com um velocidade

de 9600 bauds (DIVISOR = 2500), sem paridade (P = “00”) e um stop bit (SP = 1). Da mesma

forma o software RcomSerial foi configurado para recebe pacotes de dados com as mesma

características definidas no bloco TX, habilitando a porta COM1 do computador para realizar

a transmissão.

Utilizando o software Quartus II, da fabricante Altera®, o programa foi sintetizado e,

posteriormente, passando as informações para o kit DE0-Nano. Realizadas as ligações entre o

kit e o conversor, foram obtidos os seguintes resultados mostrados na figura 32.

Como pode ser observado pela figura 32, a string foi enviada com sucesso, provando a

funcionalidade do bloco em questão.

Page 53: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

53

Figura 32 – Recepção da string através da porta serial do PC.

Fonte: Elaborado pelo autor.

4.3 Biblioteca I2C

Por ser um protocolo mais robusto que o RS-232, o I2C exige um tratamento mais

detalhado do sinal, uma vez que a interface desse protocolo é constituída por apenas dois

condutores: o SDA e o SCL, sendo o SDA um canal de dados bidirecional do tipo half-duplex,

onde que trafega pacotes de endereçamento, dados, direção da informação e estado de

transmissão. Entretanto, por ser uma comunicação serial síncrona, a etapa de sincronismo torna-

se fácil de se lidar.

O bloco criado implementa um dispositivo I2C mestre, ou seja, um dispositivo que

irá comandar todas etapas da transmissão. Devido a robustez de uma FPGA, esta atribuição

pode ser realizada com grande facilidade. Os sinais que estarão presentes neste bloco estão

apresentados na Tabela 10.

Page 54: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

54

Tabela 10 – Interface do bloco I2C.

Sinal Tipo Descrição

I2C_CLK IN Clock de referência do FPGA.

I2C_SCLK OUT Clock de transferência de dados I2C (SCL).

I2C_DONE OUT Estado de transmissão.

I2C_SDATA IN/OUT Canal SDA por onde trafegam os dados.

I2C_DATAOUT OUT Registrador de dado recebido.

I2C_CS OUT Sinal de viabilidade de transferência de dados.

Fonte: Elaborado pelo autor.

Com base nesse sinais foi desenvolvido um bloco em VHDL no Quartus II que

implementa as funcionalidades de um protocolo I2C mestre. Este bloco é apresentado na Figura

33.

Figura 33 – Bloco I2C.

Fonte: Elaborado pelo autor.

A configuração deste bloco é realizado através dos sinais genéricos DISP_ADDR,

I2C_DATAIN e WR, que são, respectivamente, o endereço, o dado e se o processo é de escrita

ou leitura.

Na Figura 34 é apresentado a escrita de um dado pelo bloco I2C. O bloco está

configurado para enviar um endereço “0011101" e um dado com valor de "00011000" em um

processo de escrita (WR = ‘0’).

Figura 34 – Escrita de dados pelo bloco I2C.

Fonte: Elaborado pelo autor.

Page 55: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

55

Na figura 34 são apresentadas regiões que correspondem aos estados do pacote de

escrita do bloco I2C, que são:

Região 1: Bloco Condição de start. I2C_SDATA vai para nível lógico ‘0’

Região 2: Os 7 bits de endereço são enviado serialmente. O endereço que se

deseja acessar é o “0011101".

Região 3: Um bit WR em nível lógico ‘0’ para identificar que irá realizar

um procedimento de escrita no escravo.

Região 4: Um bit ACK em nível lógico baixo é recebido, indicando que o

escravo recebeu o endereço.

Região 5: O dado com valor de "00011000" é transmitido serialmente pelo

I2C_SDATA.

Região 6: Um bit ACK em nível lógico baixo é recebido, indicando que o

escravo recebeu o dado.

Região 7: I2C_SDATA entra na condição de stop bit.

Região 8: I2C_SDATA já está na condição de parada (nível lógico ‘1’). O

sinal I2C_DONE indica que a transmissão foi realizada com sucesso (nível

lógico ‘1’).

Na Figura 35 é mostrado o processo de leitura de dados do bloco I2C. Nesta etapa

o mestre manda o endereço, manda um bit WR =’1’ para definir que espera ler um dado e espera

em alta impedância o sinal de ACK e o dado serial do escravo.

Figura 35 – Leitura de dados pelo bloco I2C.

Fonte: Elaborado pelo autor.

Na figura 35 são apresentadas regiões que correspondem aos estados do pacote de

leitura do bloco I2C, que são:

Região 1: Bloco Condição de start. I2C_SDATA vai para nível lógico ‘0’

Região 2: Os 7 bits de endereço são enviado serialmente. O endereço que se

deseja acessar é o “0011101".

Page 56: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

56

Região 3: Um bit WR em nível lógico ‘1’ para identificar que irá realizar

um procedimento de leitura de um dado do escravo.

Região 4: O pino I2C_SDATA é colocado em alta impedância esperando o

bit de ACK do escravo.

Região 5: O pino I2C_SDATA é colocado em alta impedância esperando

que o escravo envie o dado.

Região 6: O pino I2C_SDATA é colocado em alta impedância esperando o

bit de ACK do escravo.

Região 7: I2C_SDATA entra na condição de stop bit.

Região 8: I2C_SDATA já está na condição de parada (nível lógico ‘1’). O

sinal I2C_DONE indica que a transmissão foi realizada com sucesso (nível

lógico ‘1’).

4.3.1 Proposta de aplicação

Com o intuito de validar a biblioteca de I2C ser proposto a comunicação de um

dispositivo com um periférico de memória. No caso do kit DE0-Nano, pode-se utilizar o bloco

I2C na comunicação do dispositivo com a memória EEPROM.

O DE0-Nano contém um memória EEPROM de 2 Kbits configurada por uma

interface serial I2C de dois fios, organizada em blocos de memória de 256 x 8 bits. A Figura 36

mostra a conexão interna da memória com o FPGA Cyclone IV.

Figura 36 – Conexão entre o FPGA e a memória EEPROM.

Fonte: TERASIC (2011).

Page 57: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

57

Uma EEPROM é um tipo de memória que pode armazenar valores que serão retidos

mesmo quando a energia é desligada e pode ser programada e apagada várias vezes,

eletricamente. Este tipo de memória é bastante útil na criação de tabelas ou na aquisição de

dados.

O acesso a esta memória é realizado pelos pinos PIN_F2 e PIN_F1 do kit DE0-Nano,

respectivamente, os pinos I2C_SCLK e I2C_SDAT mostrado na figura 36.

Deste modo, com a biblioteca criada, o acesso a esta memória fica reduzido à definir o

clock de funcionamento, o dado e o endereço em que se deseja escrever ou ler uma informação.

Como forma de validação da biblioteca criada foi realizado um procedimento de escrita

e leitura de um dado na memória EEPROM do kit DE0-Nano. Utilizando o clock de 50 MHz

como referência para gerar um clock de sincronismo de 500 kHz e acessando o endereço

"1010100".

4.4 Biblioteca SPI

Com base nas informações adquiridas sobre este protocolo no capítulo anterior, será

desenvolvido uma biblioteca para a leitura do conversor A/D serial ADC128S022 em FPGA

utilizando o kit didático DE0-Nano a partir de uma comunicação serial do tipo SPI. Proposta

desenvolvida por Wattes (2013).

Dentre todas as aplicações aplicáveis do dispositivo adotado, a utilização do ADC

(Analog-to-Digital Converter) é sem dúvida a mais importante voltada para o curso de

Engenharia Elétrica, uma vez que todo projeto digital que tenha algum tipo de sensoriamento

necessita conversão analógico/digital.

O ADC que está disponível no DE0-Nano possui oito canais analógicos que

conseguem converte sinais de 0 a 3,3 V com uma precisão de 12 bits. A Figura 37 mostra a

conexão do ADC com o kit FPGA.

Page 58: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

58

Figura 37 – Conexão do ADC com o kit FPGA.

Fonte: TERASIC (2011).

Na Tabela 8 são mostradas as descrições de cada sinal envolvidos na conversão do sinal

analógico pelo kit DE0-Nano.

Tabela 11 – Legenda dos sinais do ADC128S022.

Sinal Descrição

IN0...IN7 Entradas analógicas

𝐂𝐒̅̅̅̅ Sinal de habilitação do CI.

SCLK

Clock de conversão de sinal (0,8 a 3,2 MHz)

DIN

Entrada de sinal de dados para seleção de canal analógico.

DOUT

Saída do sinal digital convertidos.

VA Tensão de referência(+) analógica. Limita o sinal de entrada analógico em 3,3 V

VD Tensão de referência digital(+). Define o nível lógico alto em 3,3 V (compatível

com o FPGA)

AGND Tensão de referência(-) analógica.

DGND Tensão de referência(-) digital.

Fonte: WATTES(2013).

O CI ADC128S022 possui dois modos de operação: operacional e serial. Estes

modos de operação diferem entre si pelo tempo de conversão entre cada amostragem. No

operacional as conversões ocorrem sucessivamente a cada 16 pulsos de clock. Já na operação

serial há um espaçamento entre cada amostragem, desligando o ADC neste período.

O bloco SPI empregado nesta aplicação é bastante simples. Um divisor de

frequência irá pegar a frequência do oscilador interno do kit e irá coloca-la na faixa suportada

pelo ADC. A partir deste momento ocorrerá dois processos, o de escrita, repensável por enviar

ao ADC pelo canal DIN, o endereço de 3 bits do canal analógico no qual se deseja converter a

tensão. Após definir o canal, o ADC retorna o valor convertido pelo canal DOUT.

Page 59: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

59

Independentemente da quantidade de bits utilizáveis, os dois sinais, DIN e DOUT, enviam os

dados em pacotes de 2 bytes.

Na Figura 38 é apresentado o bloco SPI desenvolvido no software Quartus II, da

fabricante Altera®. Este bloco está configurado para utilizar o ADC128S022 do kit DE0-Nano

no modo operacional, realizando conversões consecutivas. As descrição de cada pino do bloco

ADC é mostrada na Tabela 12.

Figura 38 – Bloco SPI para controle do ADC.

Fonte: Elaborado pelo autor.

Tabela 12 – Descrição dos sinais do Bloco ADC.

Sinal Tipo Descrição

DOUT IN Valor convertido pelo ADC.

CLK IN Clock interno do FPGA.

CH[3..5] IN Seleção do canal analógico.

CS OUT Sinal que Habilita o ADC.

SCLK OUT Clock de conversão A/D.

DIN OUT Pacote de seleção de canal.

DATA[11..00] OUT Sinal convertido. Fonte: Elaborado pelo autor.

Na Figura 39 é apresenta a simulação do bloco ADC para a seleção do canal analógico

do ADC. A seleção é realizada através do pino DIN, onde são contabilizado 16 bits (bordas de

descida do clock), sendo lido pelo ACD apenas os bits 3 a 5, que correspondem ao canal

escolhido.

Figura 39 – Leitura e escrita do controlador ADC.

Fonte: Elaborada pelo autor.

Page 60: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

60

Ao contrário da seleção de canal, o valor convertido é lido na borda de subida do

clock, sendo os 4 primeiros bits desconsiderado, obtendo assim um valor convertido com uma

precisão de 12 bits. Na figura 40 é apresentado a simulação do bloco ADC mostrando o valor

convertido.

Figura 40 – Leitura e escrita do controlador ADC.

Fonte: Elaborada pelo autor.

Page 61: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

61

5 CONCLUSÃO

Neste trabalho foi apresentada um estudo sobre os protocolos de comunicação

serial, criando bibliotecas em VHDL para tais protocolo, além de propor aplicações com o

intuito de testá-los na prática. Observou-se que devido a flexibilidade e alta capacidade de

processamento, o FPGA, conseguiu implementar com alto desempenho todos os protocolos que

a ele foi proposto.

Uma vez que o FPGA possui um elevado clock interno, até as mais elevada taxa de

transmissão podem ser alcança sem grandes problemas. Além do que a estrutura protocolada

dos modos de comunicação se adequa muito bem a linguagem de descrição de hardware

VHDL.

Entretanto, em alguns protocolos, como CAN e USB, em que possuem uma

interface elétrica mais robusta, a falta de drivers que consigam adequar os 3.3 V disponíveis

em FPGA para os níveis de tensão do protocolo e consiga acompanhar sua velocidade de

transferência de dados, acabou inviabilizando a implementação de tais protocolos.

Como proposta para trabalhos futuros, sugere-se a implementação dos protocolos

CAN e USB, com o desenvolvimento de drives que adequem o FPGA aos níveis estabelecidos

pelo protocolo ou até mesmo utilizando drivers já prontos que execute a conversão.

Page 62: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

62

REFERÊNCIAS

BARBOSA, L.R.G. Rede CAN. Belo Horizonte, 2003. Apostila, Escola de Engenharia da

Universidade Federal de Minas Gerais.

BRAGA, A.P.S. Microprocessadores: Comunicação de Dados. Fortaleza,2010. Notas de

Aula, Universidade Federal do Ceará.

CANZIAN, E. Comunicação Serial - RS232. São Paulo, 2012. Minicurso, CNZ Engenharia e

Informática Ltda.

CONTI, F. Código ASCII. Disponível em: < http://www.ufpa.br/dicas/progra/arq-asc.htm>.

Acesso em: 3 de nov. 2013.

COSTA, C.; MESQUITA, L.;PINHEIRO, E. Elementos de Lógica Programável com VHDL

e DSP. 1 Ed. Editora Érica, p 15-30, 2011.

FERREIRA, E.H.C.: Automação Residência Utilizando Protocolo. Curitiba, 2009, p 18-30.

Monografia, Universidade Federal do Paraná.

MARCIEL, B.K.; SOARES, L.B.; AGUIAR, Y.Q. Barramento Serial I²C e SPI. Rio Grande

do Sul, 2012. Artigo, Universidade Federal de Rio Grande.

PEDRONI, V.A.: Eletrônica Digital Moderna e VHDL. 1 Ed. Editora Elsevier, 2010.

PEREIRA, C.E.; LARGES, W.F. Robótica Industrial - Aplicação na Indústria de

Manufatura e de Processos. 1 Ed. Editora Edgard Blucher LTDA, Capítulo 3, 2002.

RAVITEJA, K. All you need to know about USB 2.0 and 3.0. Disponível em: <

http://techiedas.blogspot.com.br/2012/05/all-you-need-to-know-about-usb-20-and.html>.

Acesso em: 2 de dez. 2013.

ROESLER, V. Comunicação de Dados. Disponível em: <

http://www.podre.com.br/trabalhos/GraduacaoComputacaoUnisinos/2004-

1/Comunicacao_de_dados/aula03/tp_concbasicos.pdf >. Acesso em: 12 de dez. 2013.

SILVA, A.L.V. Arquitetura Compactada para Projetos de Robôs Móveis Visando

Aplicações Multipropósitos. São Carlos, 2008. Dissertação, Escola de Engenharia de São

Carlos da Universidade de São Paulo

WATTES, J.L. Prática TAED 10 - ADC SPI-4. Fortaleza, 2013. Notas de Aula, Universidade

Federal do Ceará.

Page 63: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

63

ZELENOVSKY, R; MENDONÇA, A. PC: um Guia Prático de Hardware e

Interfaceamento. 4 Ed. Editora Mz, p 552-561, p 778-813, 2006.

ZELENOVSKY, R; MENDONÇA, A. Introdução às Redes Intraveiculares. Disponível em:

< http://www.mzeditora.com.br/artigos/veicular.htm >. Acesso em: 2 de dez. 2013.

TERASIC. User Manual, DE0-Nano. USA, p 16-17, p 20-22, 2011.

Page 64: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

64

APÊNDICE A – CÓDIGOS EM VHDL

A.1 – Bloco TX

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164 .ALL;

USE IEEE.NUMERIC_STD .ALL;

ENTITY TX IS

GENERIC (DIVISOR : INTEGER := 5208; -- COLOCAR BAUD 9600

DBIT : INTEGER := 8;

SP : INTEGER := 1;

P :BIT_VECTOR (1 DOWNTO 0) := "01");

-- 11 = SEM PARIDADE

-- 10 = PARIDADE IMPAR

-- 01 = PARIDADE PAR

-- 00 = SEM PARIDADE

PORT( CLK_IN : IN BIT;

HABILITAR : IN BIT;

TxIN : IN BIT_VECTOR (7 DOWNTO 0);

-- RTS : IN BIT;

TxD : OUT BIT;

CTS : OUT BIT);

END TX;

ARCHITECTURE DO OF TX IS

TYPE ST IS (PARADO, START, DADO, PARIDADE, STOP1, STOP2, FIM);

SIGNAL ESTADO : ST;

SIGNAL RTS : BIT;

SIGNAL TxREG : BIT_VECTOR (7 DOWNTO 0);

SIGNAL TxR : BIT;

SIGNAL CLK_OUT : BIT;

BEGIN

RTS <= '1';

DIVIDIR: PROCESS (CLK_IN, CLK_OUT)

VARIABLE AUX: INTEGER RANGE 0 TO DIVISOR := 0;

BEGIN

IF (AUX = DIVISOR) THEN

AUX := 0;

CLK_OUT <='0';

ELSIF((CLK_IN'EVENT) AND (CLK_IN='1'))THEN

AUX := AUX + 1;

CLK_OUT <= '1';

END IF;

END PROCESS DIVIDIR;

RECEBER : PROCESS(CLK_OUT,TxIN, HABILITAR, TxR, TxREG, ESTADO, RTS)

VARIABLE CONTADOR : INTEGER RANGE 0 TO 9;

VARIABLE CONTADOR2 : UNSIGNED (7 DOWNTO 0);

BEGIN

IF (CLK_OUT'EVENT) AND (CLK_OUT = '0') THEN

Page 65: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

65

IF HABILITAR = '1' THEN

ESTADO <= PARADO;

ELSE

CASE ESTADO IS

WHEN PARADO =>

IF RTS = '1' THEN

ESTADO <= START;

END IF;

WHEN START =>

ESTADO <= DADO;

WHEN DADO =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = DBIT) THEN

CONTADOR := 0;

IF ((P = "00") OR (P = "11")) THEN

ESTADO <= STOP1;

ELSE

ESTADO <= PARIDADE;

END IF;

END IF;

WHEN PARIDADE =>

ESTADO <= STOP1;

WHEN STOP1 =>

IF (SP = 1) THEN

ESTADO <= FIM;

ELSIF (SP = 2) THEN

ESTADO <= STOP2;

END IF;

WHEN STOP2 =>

ESTADO <= FIM;

WHEN FIM =>

NULL;

END CASE;

END IF;

END IF;

IF (ESTADO = PARADO) THEN

CTS <= '1';

TxR <= '1';

TxREG <= "00000000" ;

IF RTS = '1' THEN

TxR <= '1';

END IF;

ELSIF (ESTADO = START) THEN

TxR <= '0';

TxREG <= TxIN;

ELSIF (ESTADO = DADO) THEN

TxR <= TxREG(CONTADOR);

ELSIF (ESTADO = PARIDADE) THEN

DEF : FOR i IN 0 TO 7 LOOP

IF (TxREG(i) = '1') THEN

CONTADOR2 := CONTADOR2 + 1;

END IF;

END LOOP DEF;

IF (P = "01") THEN -- PARIDADE PAR

IF (CONTADOR2(0) = '1') THEN -- NÚMERO IMPAR

TxR <= '1'; -- PARIDADE '1'

ELSE

TxR <= '0'; -- PARIDADE '0'

END IF;

ELSIF (P = "10") THEN -- PARIDADE IMPAR

IF (CONTADOR2(0) = '1') THEN -- NÚMERO PAR

TxR <= '0'; -- PARIDADE '0'

Page 66: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

66

ELSE

TxR <= '1'; -- PARIDADE '1'

END IF;

END IF;

CONTADOR2 := "00000000" ;

ELSIF (ESTADO = STOP1) THEN

TxR <= '1';

ELSIF (ESTADO = STOP2) THEN

TxR <= '1';

ELSIF (ESTADO = FIM) THEN

TxR <= '1';

END IF;

TxD <= TxR;

END PROCESS;

END DO;

A.2 – Bloco RX

ENTITY RX IS

GENERIC (DIVISOR : INTEGER := 1302;

DBIT : INTEGER := 8;

SP : INTEGER := 1;

P :BIT_VECTOR (1 DOWNTO 0) := "01");

-- 11 = SEM PARIDADE

-- 10 = PARIDADE IMPAR

-- 01 = PARIDADE PAR

-- 00 = SEM PARIDADE

PORT( CLK_IN : IN BIT;

RxD : IN BIT;

RTS : IN BIT;

RxR : OUT BIT_VECTOR (7 DOWNTO 0);

CTS : OUT BIT);

END RX;

ARCHITECTURE DO OF RX IS

TYPE ST IS (PARADO, START, DADO, PARIDADE, STOP1, STOP2);

SIGNAL ESTADO : ST;

SIGNAL RxREG : BIT_VECTOR (7 DOWNTO 0);

-- SIGNAL RTS : BIT;

SIGNAL PxREG : BIT;

SIGNAL CLK_OUT : BIT;

BEGIN

--RTS <= '1';

DIVIDIR: PROCESS (CLK_IN)

VARIABLE AUX: INTEGER RANGE 0 TO DIVISOR := 0;

BEGIN

IF (AUX = DIVISOR) THEN

AUX := 0;

CLK_OUT <='0';

ELSIF((CLK_IN'EVENT) AND (CLK_IN='1'))THEN

AUX := AUX + 1;

Page 67: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

67

CLK_OUT <= '1';

END IF;

END PROCESS DIVIDIR;

RECEBER : PROCESS(CLK_OUT,RxD, ESTADO, RTS)

VARIABLE CONTADOR : INTEGER RANGE 0 TO 9;

VARIABLE CONTADOR2 : INTEGER RANGE 0 TO 9;

BEGIN

CTS <= '1';

IF (CLK_OUT'EVENT) AND (CLK_OUT = '0') THEN

IF (RTS = '1') THEN

CASE ESTADO IS

WHEN PARADO =>

IF (RxD = '0') THEN

ESTADO <= START;

END IF;

WHEN START =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = 4) THEN

CONTADOR := 0;

ESTADO <= DADO;

END IF;

WHEN DADO =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = 4) THEN

CONTADOR2 := CONTADOR2 + 1;

CONTADOR := 0;

IF (CONTADOR2 = DBIT) THEN

IF ((P = "00") OR (P = "11")) THEN

ESTADO <= STOP1;

CONTADOR2 := 0;

ELSE

ESTADO <= PARIDADE;

CONTADOR2 := 0;

END IF;

END IF;

END IF;

WHEN PARIDADE =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = 4) THEN

PxREG <= RxD;

CONTADOR := 0;

ESTADO <= STOP1;

END IF;

WHEN STOP1 =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = 4) THEN

IF (SP = 1) THEN

IF (RxD = '0') THEN

ESTADO <= START;

ELSE

ESTADO <= PARADO;

END IF;

ELSIF (SP = 2) THEN

ESTADO <= STOP2;

END IF;

CONTADOR := 0;

Page 68: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

68

END IF;

WHEN STOP2 =>

CONTADOR := CONTADOR + 1;

IF (CONTADOR = 4) THEN

IF (RxD = '0') THEN

ESTADO <= START;

ELSE

ESTADO <= PARADO;

END IF;

CONTADOR := 0;

END IF;

END CASE;

END IF;

END IF;

IF (ESTADO = DADO) THEN

RxREG(CONTADOR2) <= RxD;

ELSIF (ESTADO = STOP1) THEN

RxR <= RxREG;

ELSIF (ESTADO = STOP2) THEN

RxR <= RxREG;

END IF;

END PROCESS;

END DO;

A.3 – Bloco I2C

LIBRARY ieee;

USE ieee.std_logic_1164 .ALL;

ENTITY I2C IS

GENERIC(DISP_ADDR : STD_LOGIC_VECTOR (1 to 7):="0011101";

I2C_DATAIN : STD_LOGIC_VECTOR (1 to 8):="00011000" ;

WR : STD_LOGIC:='1';

DIV : NATURAL RANGE 0 to 41667:=2

);

PORT( I2C_CLK :IN STD_LOGIC ; --Clock 50MHz)

I2C_SCLK : OUT STD_LOGIC ;

I2C_DONE : OUT STD_LOGIC;

I2C_SDATA : INOUT STD_LOGIC;

I2C_DATAOUT : OUT STD_LOGIC_VECTOR (1 to 8);

I2C_CS: OUT STD_LOGIC

);

END I2C;

ARCHITECTURE do OF I2C IS

TYPE ST IS (START, ADDR, WRR, ACK1, DATA, ACK2, STOP);

SIGNAL ESTADO : ST;

SIGNAL CLK_P: STD_LOGIC:='0';

SIGNAL SCLK: STD_LOGIC:='1';

SIGNAL DATAOUT: STD_LOGIC_VECTOR (1 to 8):="00000000" ;

BEGIN

I2C_SCLK<=SCLK;

I2C_CS<='1';

divisor_freq :PROCESS(I2C_CLK)

Page 69: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

69

VARIABLE divisor:natural range 0 to 3*DIV:=0;

BEGIN

IF(I2C_CLK'EVENT AND I2C_CLK='1')THEN

IF(divisor>=3*DIV)THEN

divisor:=0; CLK_P<='1';

ELSIF(divisor=2*DIV)THEN

divisor:=divisor+1; CLK_P<='1';

ELSIF(divisor=DIV)THEN

divisor:=divisor+1; CLK_P<='1';

ELSE

divisor:=divisor+1; CLK_P<='0';

END IF;

END IF;

END PROCESS divisor_freq ;

comunicacao : PROCESS(CLK_P)

VARIABLE contador: natural range 0 to 59:=59;

BEGIN

IF CLK_P'EVENT AND CLK_P='0' THEN

IF(contador>=59)THEN

contador:=0;

ELSE

contador:=contador+1;

END IF;

CASE contador IS

-- START

WHEN 0 => SCLK<='1'; I2C_SDATA<='1'; I2C_DONE<='0';

WHEN 1 => SCLK<='1'; I2C_SDATA<='0';

WHEN 2 => SCLK<='0'; I2C_SDATA<='0';

-- Disp. Address

WHEN 3 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(1);

WHEN 4 => SCLK<='1';

WHEN 5 => SCLK<='0';

WHEN 6 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(2);

WHEN 7 => SCLK<='1';

WHEN 8 => SCLK<='0';

WHEN 9 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(3);

WHEN 10 => SCLK<='1';

WHEN 11 => SCLK<='0';

WHEN 12 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(4);

WHEN 13 => SCLK<='1';

WHEN 14 => SCLK<='0';

WHEN 15 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(5);

WHEN 16 => SCLK<='1';

WHEN 17 => SCLK<='0';

WHEN 18 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(6);

WHEN 19 => SCLK<='1';

WHEN 20 => SCLK<='0';

WHEN 21 => SCLK<='0'; I2C_SDATA<=DISP_ADDR(7);

WHEN 22 => SCLK<='1';

WHEN 23 => SCLK<='0';

-- WRITE/READ

WHEN 24 => SCLK<='0'; I2C_SDATA<=WR;

WHEN 25 => SCLK<='1'; I2C_SDATA<=WR;

WHEN 26 => SCLK<='0'; I2C_SDATA<=WR;

-- Verificação de ACKNOWLEGE

WHEN 27 => SCLK<='0'; I2C_SDATA<='Z';

WHEN 28 => SCLK<='1';

WHEN 29 => SCLK<='0';

Page 70: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

70

-- Data transfer

WHEN 30 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (1);

END IF;

WHEN 31 => SCLK<='1';

WHEN 32 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(1)<=I2C_SDATA;

END IF;

WHEN 33 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (2);

END IF;

WHEN 34 => SCLK<='1';

WHEN 35 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(2)<=I2C_SDATA;

END IF;

WHEN 36 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (3);

END IF;

WHEN 37 => SCLK<='1';

WHEN 38 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(3)<=I2C_SDATA;

END IF;

WHEN 39 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (4);

END IF;

WHEN 40 => SCLK<='1';

WHEN 41 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(4)<=I2C_SDATA;

END IF;

WHEN 42 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (5);

END IF;

WHEN 43 => SCLK<='1';

WHEN 44 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(5)<=I2C_SDATA;

END IF;

WHEN 45 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (6);

END IF;

WHEN 46 => SCLK<='1';

WHEN 47 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(6)<=I2C_SDATA;

END IF;

WHEN 48 => SCLK<='0';

IF(WR='0')THEN

Page 71: MARCUS ANDERSON ALMEIDA BEZERRA.pdf

71

I2C_SDATA<=I2C_DATAIN (7);

END IF;

WHEN 49 => SCLK<='1';

WHEN 50 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(7)<=I2C_SDATA;

END IF;

WHEN 51 => SCLK<='0';

IF(WR='0')THEN

I2C_SDATA<=I2C_DATAIN (8);

END IF;

WHEN 52 => SCLK<='1';

WHEN 53 => SCLK<='0';

IF(WR='1')THEN

I2C_SDATA<='Z';

DATAOUT(8)<=I2C_SDATA;

END IF;

-- Verificação de ACKNOWLEGE

WHEN 54 => SCLK<='0'; I2C_SDATA<='Z';

WHEN 55 => SCLK<='1';

WHEN 56 => SCLK<='0';

-- STOP

WHEN 57 =>SCLK<='0'; I2C_SDATA<='0';

WHEN 58 =>SCLK<='1'; I2C_SDATA<='0';

WHEN 59 =>SCLK<='1'; I2C_SDATA<='1';

I2C_DONE<='1';

I2C_DATAOUT <=DATAOUT;

END CASE;

IF (contador > 0) AND (contador < 3) THEN ESTADO <= START;

ELSIF (contador > 2) AND (contador < 24)THEN ESTADO <= ADDR;

ELSIF (contador > 23) AND (contador < 27)THEN ESTADO <= WRR;

ELSIF (contador > 26) AND (contador < 30)THEN ESTADO <= ACK1;

ELSIF (contador > 29) AND (contador < 54)THEN ESTADO <= DATA;

ELSIF (contador > 56) AND (contador < 58)THEN ESTADO <= ACK2;

ELSIF (contador > 55) AND (contador < 60)THEN ESTADO <= STOP; END IF;

END IF;

END PROCESS comunicacao;

END do;