Вы находитесь на странице: 1из 4

29/6/2014 On-line clculo do CRC e biblioteca livre

http://www.lammertbies.nl/comm/info/crc-calculation.html 1/4
On-line clculo do CRC e biblioteca livre
Introduo em clculos CRC
Rotinas livres clculo do CRC para o download
Frum de suporte clculo CRC Nova
"123456789"
1 byte de checksum 221
CRC-16 0xBB3D
CRC-16 (Modbus) 0x4B37
CRC-16 (Sick) 0x56A6
CRC-CCITT (XModem) 0x31C3
CRC-CCITT (0xFFFF) 0x29B1
CRC-CCITT (0x1D0F) 0xE5CC
CRC-CCITT (Kermit) 0x8921
CRC-DNP 0x82EA
CRC-32 0xCBF43926
123456789 Calcule CRC
tipo de entrada: ASCII Feitio
Introduo em clculos CRC
Sempre que os dados digitais so armazenados ou interface, corrupo de dados pode ocorrer.
Desde o incio da cincia da computao, as pessoas tm pensado em maneiras de lidar com
este tipo de problema. Para os dados de srie que veio com a soluo para anexar um bit de
paridade para cada byte enviado. Este mecanismo de deteco simples funciona se um nmero
mpar de bits em um byte alteraes, mas um nmero par de bits de falsos em um byte no ser
detectado pelo teste de paridade. Para ultrapassar este problema as pessoas tm procurado
mecanismos sonoros matemticos para detectar vrios falsos bits. O CRC clculo ou verificao
de redundncia cclica foi o resultado disso. Hoje em dia os clculos de CRC so utilizados em
todos os tipos de comunicaes. Todos os pacotes enviados atravs de uma conexo de rede
so verificados com um CRC. Alm disso, cada bloco de dados no seu disco rgido tem um valor
CRC ligado a ele. Mundo moderno computador no pode fazer sem estes clculo do CRC. Ento,
vamos ver por que eles so to amplamente utilizado. A resposta simples, eles so poderosos,
detectar vrios tipos de erros e so extemamente rpido para calcular especialmente quando
chips de hardware dedicados so usados.
Pode-se pensar, que o uso de uma soma de verificao pode substituir clculos CRC adequadas.
certamente mais fcil de calcular a soma de verificao, mas somas no encontrar todos os
erros. Vamos dar um exemplo de seqncia e calcular a soma de verificao de um byte. A
seqncia de exemplo " Lammert "que converte as ASCII valores [ 76 , 97 , 109 , 109 ,
101 , 114 , 116 ]. A uma soma de verificao de bytes desta matriz pode ser calculado
adicionando todos os valores, do que dividindo por 256 e mantendo o restante. A soma
resultante 210 . Voc pode usar a calculadora acima para verificar este resultado.
Neste exemplo, utilizamos uma longa soma um byte que nos d 256 valores diferentes. Usando
uma soma de verificao de dois byte vai resultar em 65.536 possveis valores de soma de
verificao diferentes e quando um valor de quatro bytes usado h mais de quatro mil milhes
de valores possveis. Podemos concluir que, com uma soma de verificao de quatro bytes a
chance que ns accidentily no detectar um erro menos de 1 a 4 bilhes. Parece muito bom,
mas isso apenas teoria. Na prtica, os bits no mudam puramente aleatrio durante as
comunicaes. Eles muitas vezes no em rajadas, ou devido a picos eltricos. Vamos supor que
Lammert Bies Interface Mapa do Frum PT NL
29/6/2014 On-line clculo do CRC e biblioteca livre
http://www.lammertbies.nl/comm/info/crc-calculation.html 2/4
no nosso exemplo disposio o menor bit significativo do caractere ' L ' definida, eo menor bit
significativo de charcter' um ' perdido durante a comunicao. O receptor do que ver a matriz
[ 77 , 96 , 109 , 109 , 101 , 114 , 116 ] que representa a string " M `mmert ". A soma de
verificao para esta nova cadeia ainda 210 , mas o resultado obviamente errado, s
depois de dois bits alterado. Mesmo se tivssemos usado um quatro byte de checksum que no
teria detectado este erro de transmisso. Assim, o clculo de uma soma de verificao pode ser
um mtodo simples para a deteco de erros, mas no d muito mais protegidas do que o bit de
paridade, independente do comprimento da soma de verificao.
A idia por trs de um clculo do valor de verificao simples. Use uma funo F (bval, CVAL)
que insere um byte de dados e um valor de verificao e gera um valor de verificao
recalculado. Na verdade, clculos de soma de verificao, tal como descrito acima pode ser
assim definido. Nosso nico byte exemplo de soma de verificao poderia ter sido calculado com
a funo a seguir (em linguagem C) que ns chamamos vrias vezes para cada byte na
seqncia de entrada. O valor inicial para CVAL 0.
int F_chk_8 (int bval, int CVAL) {
retun (+ CVAL bval)% 256;
}
A idia por trs clculo do CRC olhar para os dados como um grande nmero binrio. Este
nmero dividido por um valor determinado e o restante do clculo chamado o CRC. Dividindo
no clculo CRC no incio parece custar muito poder de computao, mas pode ser realizado
muito rapidamente, se usar um mtodo semelhante ao que aprenderam na escola. Vamos como
exemplo calcular o restante para o caractere ' m ', que 1101101 em binrio notao,
dividindo-o por 19 ou 10011 . Por favor, note que 19 um nmero mpar. Isso necessrio,
como veremos mais adiante. Por favor, referir-se a seus livros escolares como o mtodo de
clculo binrio aqui no muito diferente do mtodo decimal voc aprendeu quando era jovem.
Pode apenas olhar um pouco estranho. Tambm notaes diferem entre os pases, mas o
mtodo semelhante.
1 0 1 = 5
-------------
1 0 0 1 1/1 1 0 1 1 0 1
1 0 0 1 1 | |
--------- | |
1 0 0 0 0 |
0 0 0 0 0 |
--------- |
1 0 0 0 0 1
1 0 0 1 1
---------
1 1 1 0 = 14 = restante
Com clculos decimais, voc pode rapidamente verificar que 109 dividido por 19 d um
quociente de 5 com 14 como o restante. Mas o que vemos tambm no esquema que cada bit
extra para verificar custa apenas uma comparao binria e em 50% dos casos, uma subtrao
binria. Voc pode facilmente aumentar o nmero de bits do exemplo string de dados para teste
de 56 bits, se usarmos o nosso exemplo de valor " Lammert ", eo resultado pode ser calculado
com 56 comparaes binrias e uma mdia de 28 substractions binrios. Isto pode ser
implementado em hardware directamente com muito poucos transistores envolvidos. Tambm
algoritmos de software pode ser muito eficiente.
29/6/2014 On-line clculo do CRC e biblioteca livre
http://www.lammertbies.nl/comm/info/crc-calculation.html 3/4
Para os clculos de CRC, no subtrao normal usada, mas todos os clculos so feitos
mdulo 2 . Nessa situao voc ignorar carregam pedaos e, com efeito a subtrao ser igual
a um exclusivo ou operao. Isso parece estranho, o restante resultante tem um valor
diferente, mas de um ponto de vista algbrico a funcionalidade igual. A discusso desse
precisaria conhecimento nvel universitrio da teoria algbrica campo e acho que a maioria dos
leitores no esto interessados nisso. Por favor veja no final deste documento para livros que
discutem isso em detalhes.
Agora temos um mtodo de clculo CRC que implementvel em hardware e software e tambm
tem um mais aleatrio sentimento do que o clculo de uma soma de verificao normal. Mas
como ele ir executar na prtica, quando um ou mais bits esto errados? Se escolhermos o
divisor-19 no nosso exemplo a ser um estranho nmero, voc no precisa de matemtica de
alto nvel para ver que todos os erros de um nico bit sero detectados. Isso ocorre porque
cada erro de bit nico vai deixar a mudana de dividendos com uma potncia de 2. Se, por
exemplo bit n muda de 0 para 1, o valor do dividendo vai aumentar com 2 . Se, por outro lado
bit n muda de 1 para 0, o valor do dividendo vai diminuir com 2 . Porque voc no pode dividir
qualquer potncia de dois por um nmero mpar, o restante do clculo do CRC vai mudar e que o
erro no vai passar despercebida.
A segunda situao que queremos detectar quando dois bits nica alterao nos dados. Isso
requer um pouco de matemtica, que pode ser lido no livro de Tanenbaum mencionados abaixo.
Voc precisa selecionar o seu divisor com muito cuidado para ter certeza de que independente
da distncia entre os dois bits errados voc sempre vai detect-los. Sabe-se, que os valores
comumente usados 0x8005 e 0x1021 dos clculos CRC16 e CRC-CCITT um desempenho muito
bom para esta questo. Por favor, note que outros valores podem ou no, e voc no pode
facilmente calcular qual valor divisor adequado para a deteco de dois erros de bit e qual
no . Conte com uma extensa pesquisa sobre o assunto matemtico feito h algumas dcadas
por matemticos altamente qualificados e utilizar os valores obtidos dessas pessoas.
Alm disso, com o nosso clculo do CRC queremos detectar todos os erros em que um nmero
mpar de mudanas bits. Isto pode ser conseguido atravs de um divisor com um nmero par de
bits definidos. Usando modulo 2 matemtica voc pode mostrar que so detectados todos os
erros com um nmero mpar de bits. Como eu j disse antes, no mdulo 2 da matemtica a
funo de subtrao substitudo pelo exclusivo ou . H quatro operaes XOR possveis.
0 XOR 0 => 0 mesmo => mesmo
0 XOR 1 => 1 estranho => estranho
1 XOR 0 => 1 estranho => estranho
1 XOR 1 => 0 mesmo => mesmo
Vemos que, para todas as combinaes de valores de bit, a estranheza da expresso
permanece o mesmo. Quando escolhendo um divisor com um nmero par de bits definidos, a
estranheza do restante igual estranheza do divident. Portanto, se a estranheza das
mudanas de dividendos, porque um nmero mpar de bits de mudanas, o restante tambm vai
mudar. Assim, todos os erros que mudam um nmero mpar de bits ser detectado por um
clculo CRC, que realizada com uma tal divisor. Voc pode ter visto que o divisor utilizado
valores 0x8005 e 0x1021 realmente tem um nmero mpar de bits, e nem mesmo como dito aqui.
Isto porque no interior do algoritmo existe um "escondido" bit extra 2 , que faz com que o
valor divisor real usado e 0x18005 0x11021 dentro do algoritmo.
Por ltimo, mas no menos importante, queremos detectar todos os erros em rajada com nosso
clculo do CRC com um comprimento mximo para ser detectado, e todos os erros j estourou a
ser detectado com uma alta probabilidade. Um erro de estouro bastante comum nas
comunicaes. o tipo de erro que ocorre por causa de um raio, rel de comutao, etc, onde
durante um perodo pequeno de todos os bits so definidos para um. Para realmente entender
isso, voc tambm precisa ter algum conhecimento do modulo 2 lgebra, ento por favor,
aceitar que, com um divisor de 16 bits, voc ser capaz de detectar todos os estouros com um
comprimento mximo de 16 bits, e todas as rajadas mais longas com pelo menos 99,997%
n
n
16
29/6/2014 On-line clculo do CRC e biblioteca livre
http://www.lammertbies.nl/comm/info/crc-calculation.html 4/4
certeza.
Em uma abordagem matemtica pura, clculo do CRC anotado como clculos polinomiais. O
valor divisor mais frequentemente no descrito como um nmero binrio, mas um polinmio de
ordem determinada. Na vida normal, alguns polinmios so usados com mais freqncia do que
outros. Os trs utilizada no clculo on-line CRC nesta pgina esto a grande CRC16 16 bits e
CRCCCITT e 32 bits de largura CRC32. O ltimo provavelmente mais usados agora, porque,
entre outros, o gerador de CRC para todos verificao do trfego da rede e validao.
Para todos os trs tipos de clculos CRC Tenho uma biblioteca de software livre disponvel. O
programa de teste pode ser usado directamente para testar arquivos ou cordas. Voc tambm
pode olhar para os cdigos-fonte e integrar essas rotinas CRC em seu prprio programa. Por
favor, esteja ciente dos valores de inicializao do clculo do CRC e possvel de ps-
processamento necessrio como lanar bits. Se voc no fizer isso, voc pode obter resultados
diferentes do que outras implementaes de CRC. Tudo isso de ps-processamento pr e feito
no programa de exemplo para que ele no deve ser difcil de fazer o seu prprio trabalho de
implementao. Um teste comum usado para calcular o valor do CRC para o ASCII string
"123456789". Se o resultado da sua rotina corresponde ao resultado do programa de teste ou o
resultado no site, sua implementao est funcionando e compatvel com a maioria das outras
implementaes.
Apenas como referncia as funes polinomiais para os clculos mais comuns CRC. Recordamos
que o termo de maior ordem do polynomal (x x ou ) no est presente na representao
de um nmero binrio, mas sugere o prprio algoritmo.
Funes polinomiais de comum CRC do
CRC-16 0x8005 x x + + x + 1
CRC-
CCITT
0x1021 x x + + x + 1
CRC-
DNP
0x3D65 x x + + x x + + x x + + x x + + x + 1
CRC-32 0x04C11DB7 x x + + x x + + x x + + x x + + x + x
x + + x + x x + + 1
Literatura
2002 Redes de Computadores , descrevendo sistemas de rede
comuns e da teoria e algoritmos por trs de sua implemenentation.
Andrew S. Tanenbaum
vrio The Art of Computer Programming a principal referncia para
os algoritmos Seminumerical. Clculos polinomiais so descritos em
profundidade. Algum nvel de matemtica necessrio
compreend-lo totalmente embora.
Donald E. Knuth
- DNP 3.0, ou protocolo de rede distribuda um protocolo de
comunicao concebido para ser utilizado entre computadores
subestao, UTRs unidades terminais remotas , IEDs dispositivos
eletrnicos inteligentes e estaes mestras para a indstria de
energia eltrica. Ele agora tambm utilizado em indstrias
familiares como tratamento de guas residuais, transporte e
indstria de petrleo e gs.
DNP User Group
Fevereiro 2013 | Mapa do site Copyright 1997-2010 Lammert Bies, Todos os direitos reservados
16 32
16 15 2
16 12 5
16 13 12 11 10 8 6 5 2
32 26 23 22 16 12 11 10 8 7
5 4 2 1

Вам также может понравиться