15
FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO Detecção de erros de comunicação de dados CRC Rui Barbosa 12/04/2011

Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

  • Upload
    vanque

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO

Detecção de erros de

comunicação de dados

CRC

Rui Barbosa

12/04/2011

Page 2: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

2

ÍNDICE

1. Introdução .............................................................................................................................................. 4

2. Cyclic Redundancy Check ................................................................................................................ 5

2.1. Fundamentos Teóricos .................................................................................................................. 5

2.2. Utilização prática ........................................................................................................................... 8

2.2.1. CRC - 12 .................................................................................................................................... 8

2.2.2. CRC - 16 .................................................................................................................................... 9

2.2.3. CRC - CCITT .............................................................................................................................. 9

2.2.4. CRC - 32 .................................................................................................................................. 10

2.3. Hardware ....................................................................................................................................... 10

3. Conclusão ............................................................................................................................................ 13

4. Anexos ................................................................................................................................................... 14

I. Exemplo de Código de Implementação do CRC-32 ............................................................. 15

Page 3: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

3

ÍNDICE DE FIGURAS

Figura 1- Diagrama de blocos do CRC-12 .......................................................................................... 8

Figura 2 - DIAGRAMA DE BLOCOS DO CRC-16 .................................................................................. 9

Figura 3 - DIAGRAMA DE BLOCOS DO CRC-CCITT ............................................................................ 9

Figura 4 - DIAGRAMA DE BLOCOS DO CRC-32 ................................................................................ 10

Figura 5 - Portas lógica XOR (à esquerda) e Shift Register (à Direita) ......................................... 11

Figura 6- Algoritmo Básico do CRC-32 ............................................................................................... 15

ÍNDICE DE TABELAS

Tabela 1 - Polinómios Geradores de alguns CRC Standard ........................................................... 8

Tabela 2 - Funções Lógicas do XOR e do shift register ................................................................... 11

Page 4: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

4

1. INTRODUÇÃO

O objectivo da codificação de dados é a eficiência do transporte dos mesmos através

de um meio específico. Esse meio pode ser um cabo de cobre de par entrelaçado, cabo

coaxial de cobre, cabo óptico ou ar. Cada tipo de meio de comunicação tem uma série

de incapacidades que se traduzem em erros na transmissão de dados. Estes erros podem

incluir a reflexão do sinal, a atenuação do sinal, distorção harmónica, distorção de fase,

eco, interferência, ruído gaussiano e de mudança de frequência. Todas estas deficiências

afectam a capacidade de transporte de dados. Em alguns casos, esses factores podem

causar um número excessivo de erros. Assim sendo é necessário implementar algoritmos

de verificação de erros nos dados transmitidos.

É possível a utilização de métodos ad-hoc para gerar checksums de verificação de

dados, mas usa-se, normalmente, sistemas padrão com propriedades bem

compreendidas como é o caso do CRC.

Este documento tem como finalidade explicar e descrever o funcionamento do CRC.

Page 5: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

5

2. CYCLIC REDUNDANCY CHECK

O CRC (Cyclic Redundancy Check) é uma técnica usada para detecção de erros na

transmissão de dados digitais No método CRC são adicionados check bits normalmente

chamados de checksum. Estes são anexados à mensagem que irá ser transmitida. O

receptor pode assim determinar se os check bits estão de acordo com os dados

transmitidos e determinar com um certo grau de certezas se ocorreram erros na

transmissão ou não. Se ocorrer um erro o receptor envia um “negative

acknowledgement” (NAK) de volta ao emissor, pedindo para que a mensagem seja

retransmitida.

2.1. FUNDAMENTOS TEÓRICOS

O CRC é baseado em aritmética polinomial, em particular, sobre a computação do

resto da divisão de um polinómio em GF(2) - Galois field with two elements - por outro.

Um polinómio em GF (2) é um polinómio com uma única variável x cujos coeficientes

são 0 ou 1. A adição e subtracção são feitas em módulo para 2. A aritmética módulo 2

pode ser facilmente calculada através de uma operação de ou-exclusivo realizada bit a

bit entre os coeficientes do polinómio, ou seja, dos dígitos binários. Podemos notar que as

duas operações tem sempre o mesmo resultado equivalente ao da operação lógica de

ou exclusivo (ou XOR, da sigla em inglês exclusive OR).

Como exemplo podemos somar o polinómio e . O primeiro passo é a

transformação do polinómio em um número binário:

e

Procedemos então ao ou-exclusivo bit-a-bit (designada também por "soma polinomial

em módulo 2"):

Page 6: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

6

Ou ainda:

Estes polinómios normalmente não são escritos com sinal negativa embora o possam

ser mas, o coeficiente -1 é equivalente a um coeficiente 1.

A multiplicação destes polinómios é simples. O produto de um coeficiente por outro

dado pela lógica do operador AND, e os produtos parciais são somados utilizando o

operador OU EXCLUSIVO. A multiplicação não é necessária para calcular o checksum

CRC.

No que diz respeito à divisão, existem diversas formas de realizar a divisão de módulo 2

entre dois números binários. A melhor maneira é fazer a representação polinomial do

Dividendo D e do Divisor d, e subtrair consequentemente os monómios do polinómio D. Ao

Dividendo polinomial D inicial, é concatenado á sua direita tantos monómios quanto o

grau do polinómio d.

Para que se entenda melhor é apresentado de seguida um exemplo:

Exemplo 1: Dividir 101011 por 11001.

11001 corresponde ao Divisor d(o qual também é designado por polinómio

"gerador"), e é representado pelo polinómio de grau 4,

;

101011 corresponde ao dividendo inicial D;

1010110000 corresponde ao dividendo inicial D concatenado com tantos bits

nulos quanto o grau do polinómio d (Neste caso o grau polinomial é de 4);

Assim sendo, 1010110000 o qual corresponde ao Dividendo final, será expresso

pelo polinómio

Procedendo agora à divisão:

Page 7: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

7

Resto: , em binário 1001

Quociente: , em binário: 110001

No CRC o são adicionados à trama bits checksum para que garantir que a trama final

é divisível por um polinómio g(x) denominado por polinómio gerador. Assim sendo,

podemos transformar uma trama F(x) numa trama T(x) que é divisível por g(x). Se houver

erros em T(x), estes assumem a forma de uma string diferente E(x) e, no final, os bits

recebidos são T(x)+E(x).

Quando o receptor recebe uma trama correcta, ela é dividida pelo polinómio g(x) e o

resto da divisão obtida é nula. A questão que se coloca é quando é que a trama

recebida T(x)+E(x) quando dividida pelo g(x) retorna um resto de divisão nulo?

Erro num único bit? Um erro num único bit significa que E(x) vai apenas ter um

único termo. Se g(x) for de grau n a divisão nunca vai ser nula;

Erro em múltiplos bits? Diferentes polinómios geradores são usados com

propriedades diferentes. Deve haver um factor no polinómio que

assegura a detecção de erros em todos os bits impares (1,3,5,…)

Alguns polinómios geradores comummente utilizados são:

CRC 12 bits:

CRC 16 bits:

CRC 32 bits:

CRC CCITT:

Pegando no Exemplo 1, anteriormente descrito, onde o nosso (11001)

e considerando o nosso . Assim, se dividirmos o F(x) por g(x) e o resto for

anexado ao F(x) obtém-se o T(x). Segundo os cálculos anteriores, T(x)= 1010111001.

Quando estes dados forem recebidos são divididos e, se a recepção dos dados for

correcta, o resto da divisão será nula.

Page 8: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

8

2.2. UTILIZAÇÃO PRÁTICA

A Tabela 1 mostra os polinómios gerados mais usados para alguns CRC standards.

NOME GERADOR

POLINÓMIO HEX

CRC - 12 80F

CRC - 16 8005

CRC - 32

1021

CRC CCITT 04C11DB7

TABELA 1 - POLINÓMIOS GERADORES DE ALGUNS CRC STANDARD

2.2.1. CRC - 12

O CRC-12 é usado para transmissões de conjuntos de caracteres de 6bits, é usado

ainda em conjuntos de caracteres de 8 bits ou ainda em dados arbitrários de 8 bits.

O diagrama de blocos é apresentado de seguida. Os dados são deslocados para a

linha de entrada de dados. Após todos os dados serem deslocados, o resto será

guardado nos registos de 0 a 11.

FIGURA 1- DIAGRAMA DE BLOCOS DO CRC-12

Page 9: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

9

2.2.2. CRC - 16

O CRC-16 é utilizado no protocolo de comunicações BISYNCH da IBM.

O diagrama de blocos é apresentado de seguida. Os dados são deslocados para a

linha de entrada de dados. Após todos os dados serem deslocados, o resto será

guardado nos registos de 0 a 15.

FIGURA 2 - DIAGRAMA DE BLOCOS DO CRC-16

2.2.3. CRC - CCITT

O CRC-CCITT, também conhecido como ITU-TSS, é usado em vários protocolos de

comunicações como é o caso do XMODEM, X.25, IBM’s SDLC e ISO’s HDLC.

O diagrama de blocos é apresentado de seguida. Os dados são deslocados para a

linha de entrada de dados. Após todos os dados serem deslocados, o resto será

guardado nos registos de 0 a 15.

FIGURA 3 - DIAGRAMA DE BLOCOS DO CRC-CCITT

Page 10: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

10

2.2.4. CRC - 32

CRC – 32 é também conhecido como AUTODIN-II e ITU-TSS (ITU-TSS definiu tanto

polinómios de 16 e 32 bits). É usado em PKZip, Ethernet, AAL5, (ATM Adaptation Layer 5),

FDDI (Fiber Distributed Data Interface), o protocol IEEE-802 LAN/MAN e em algumas

aplicações DOD.

O diagrama de blocos é apresentado de seguida. Os dados são deslocados para a linha

de entrada de dados. Após todos os dados serem deslocados, o resto será guardado nos

registos de 0 a 31.

FIGURA 4 - DIAGRAMA DE BLOCOS DO CRC-32

2.3. HARDWARE

Como foi possível verificar anteriormente, a divisão de polinómios seria mais fácil se

todos os coeficientes forem 1. Isto porque existe um circuito que pode realizar os cálculos

de uma trama de forma continua. O circuito é construído através de portas lógicas XOR

(ou-exlusivo) e shift registers.

Page 11: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

11

FIGURA 5 - PORTAS LÓGICA XOR (À ESQUERDA) E SHIFT REGISTER (À DIREITA)

A tabela seguinte mostra as funções lógicas destas duas portas lógicas.

A B A XOR B

0 0 0

0 1 1

1 0 1

1 1 0

TABELA 2 - FUNÇÕES LÓGICAS DO XOR E DO SHIFT REGISTER

A saída do XOR dá a função de ou-exclusivo de dois sinais de entrada enquanto que a

saída do shift register Q muda o valor de entrada quando se dá um rising do clock.

Circuitos simples podem ser contruidos através desta lógica para realizar a divisão de

polinómios.

O circuito mostrado em baixo tem 5 shift registers o que corresponde a uma sequência

de 5 bits de checksum (grau 5 do polinómio gerador) e um polinómio gerador de

comprimento de 6 bits. Neste exemplo, o polinómio gerador é 100101 (o shift register mais

à esquerda corresponde ao bit menos significativo do polinómio gerador).

Se houver apenas 0s no sistema e colocarmos à entrada os dados 101101011, obtém-se

os seguintes estados:

D C Q

0 0

1 1

0 D

1 D

Page 12: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

12

Dados de

entrada D4 D3 D2 D1 D0 Observações

… 0 0 0 0 0 Estado inicial

1 0 0 0 0 1 1º Bit

0 0 0 0 1 0 2º Bit

1 0 0 1 0 1 3º Bit

1 0 1 0 1 1

0 1 0 1 1 0

1 0 1 0 0 0

0 1 0 0 0 0

1 0 0 1 0 0

1 0 1 0 0 1

0 1 0 0 1 0

0 0 0 0 0 1

0 0 0 0 1 0

0 0 0 1 0 0

0 0 1 0 0 0

E assim resulta T(x) = 101101011 01000

Page 13: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

13

3. CONCLUSÃO

Este documento analisou e explicou o funcionamento do código de verificação de

erros CRC.

Quando a linha de transmissão é longa e é afectada por ruídos, técnicas mais

avançadas de verificação de erros são implementadas. A redundância pode ser

acrescentada ao código para garantir um melhor desempenho do sistema. Quando os

sistemas são mais avançados devem ser usados códigos de controlo de erros mais

complexos como é o caso de verificação de paridade, checksums, CRCs.

Em todos os casos, a redundância resultante da utilização destes códigos permite ao

sistema tolerar uma relação sinal/ruído menos para uma taxa de transmissão de dados

fixa e, consequentemente, permite reduzir o número de erros na transmissão de dados.

Page 14: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

14

4. ANEXOS

Page 15: Detecção de erros de comunicação de dados CRCee06166/documentos/Deteccao_de_erros.pdf · ÍNDICE DE TABELAS Tabela 1 ... transformação do polinómio em um número binário:

15

I . EXEMPLO DE CÓDIGO DE IMPLEMENTAÇÃO DO CRC-

32

FIGURA 6- ALGORITMO BÁSICO DO CRC-32