4
29/6/2014 On-line cálculo do CRC e biblioteca livre http://www.lammertbies.nl/comm/info/crc-calculation.html 1/4 On-line cálculo do CRC e biblioteca livre Introdução em cálculos CRC Rotinas livres cálculo do CRC para o download Fórum de suporte cálculo 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 Feitiço Introdução em cálculos CRC Sempre que os dados digitais são armazenados ou interface, corrupção de dados pode ocorrer. Desde o início da ciência da computação, as pessoas têm pensado em maneiras de lidar com este tipo de problema. Para os dados de série que veio com a solução para anexar um bit de paridade para cada byte enviado. Este mecanismo de detecção simples funciona se um número ímpar de bits em um byte alterações, mas um número par de bits de falsos em um byte não será detectado pelo teste de paridade. Para ultrapassar este problema as pessoas têm procurado mecanismos sonoros matemáticos para detectar vários falsos bits. O CRC cálculo ou verificação de redundância cíclica foi o resultado disso. Hoje em dia os cálculos de CRC são utilizados em todos os tipos de comunicações. Todos os pacotes enviados através de uma conexão de rede são verificados com um CRC. Além disso, cada bloco de dados no seu disco rígido tem um valor CRC ligado a ele. Mundo moderno computador não pode fazer sem estes cálculo do CRC. Então, vamos ver por que eles são tão amplamente utilizado. A resposta é simples, eles são poderosos, detectar vários tipos de erros e são extemamente rápido para calcular especialmente quando chips de hardware dedicados são usados. Pode-se pensar, que o uso de uma soma de verificação pode substituir cálculos CRC adequadas. É certamente mais fácil de calcular a soma de verificação, mas somas não encontrar todos os erros. Vamos dar um exemplo de seqüência e calcular a soma de verificação de um byte. A seqüência de exemplo é " Lammert "que converte as ASCII valores [ 76 , 97 , 109 , 109 , 101 , 114 , 116 ]. A uma soma de verificação 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 verificação de dois byte vai resultar em 65.536 possíveis valores de soma de verificação diferentes e quando um valor de quatro bytes é usado há mais de quatro mil milhões de valores possíveis. Podemos concluir que, com uma soma de verificação de quatro bytes a chance que nós accidentily não detectar um erro é menos de 1 a 4 bilhões. Parece muito bom, mas isso é apenas teoria. Na prática, os bits não mudam puramente aleatório durante as comunicações. Eles muitas vezes não em rajadas, ou devido a picos elétricos. Vamos supor que Lammert Bies Interface Mapa do Fórum PT NL

On-line cálculo do CRC e biblioteca livre.pdf

Embed Size (px)

Citation preview

  • 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 CRCRotinas livres clculo do CRC para o downloadFrum 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 comeste tipo de problema. Para os dados de srie que veio com a soluo para anexar um bit deparidade para cada byte enviado. Este mecanismo de deteco simples funciona se um nmerompar de bits em um byte alteraes, mas um nmero par de bits de falsos em um byte no serdetectado pelo teste de paridade. Para ultrapassar este problema as pessoas tm procuradomecanismos sonoros matemticos para detectar vrios falsos bits. O CRC clculo ou verificaode redundncia cclica foi o resultado disso. Hoje em dia os clculos de CRC so utilizados emtodos os tipos de comunicaes. Todos os pacotes enviados atravs de uma conexo de redeso verificados com um CRC. Alm disso, cada bloco de dados no seu disco rgido tem um valorCRC 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 quandochips 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 oserros. Vamos dar um exemplo de seqncia e calcular a soma de verificao de um byte. Aseqncia 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 calculadoadicionando todos os valores, do que dividindo por 256 e mantendo o restante. A somaresultante 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. Usandouma soma de verificao de dois byte vai resultar em 65.536 possveis valores de soma deverificao diferentes e quando um valor de quatro bytes usado h mais de quatro mil milhesde valores possveis. Podemos concluir que, com uma soma de verificao de quatro bytes achance 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 ascomunicaes. 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 deverificao para esta nova cadeia ainda 210 , mas o resultado obviamente errado, sdepois de dois bits alterado. Mesmo se tivssemos usado um quatro byte de checksum que noteria detectado este erro de transmisso. Assim, o clculo de uma soma de verificao pode serum mtodo simples para a deteco de erros, mas no d muito mais protegidas do que o bit deparidade, 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 verificaorecalculado. Na verdade, clculos de soma de verificao, tal como descrito acima pode serassim definido. Nosso nico byte exemplo de soma de verificao poderia ter sido calculado coma funo a seguir (em linguagem C) que ns chamamos vrias vezes para cada byte naseqncia 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. Estenmero dividido por um valor determinado e o restante do clculo chamado o CRC. Dividindono clculo CRC no incio parece custar muito poder de computao, mas pode ser realizadomuito rapidamente, se usar um mtodo semelhante ao que aprenderam na escola. Vamos comoexemplo 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 declculo 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 omtodo 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 umquociente de 5 com 14 como o restante. Mas o que vemos tambm no esquema que cada bitextra para verificar custa apenas uma comparao binria e em 50% dos casos, uma subtraobinria. Voc pode facilmente aumentar o nmero de bits do exemplo string de dados para testede 56 bits, se usarmos o nosso exemplo de valor " Lammert ", eo resultado pode ser calculadocom 56 comparaes binrias e uma mdia de 28 substractions binrios. Isto pode serimplementado em hardware directamente com muito poucos transistores envolvidos. Tambmalgoritmos 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 feitosmdulo 2 . Nessa situao voc ignorar carregam pedaos e, com efeito a subtrao ser iguala um exclusivo ou operao. Isso parece estranho, o restante resultante tem um valordiferente, mas de um ponto de vista algbrico a funcionalidade igual. A discusso desseprecisaria conhecimento nvel universitrio da teoria algbrica campo e acho que a maioria dosleitores no esto interessados nisso. Por favor veja no final deste documento para livros quediscutem isso em detalhes.

    Agora temos um mtodo de clculo CRC que implementvel em hardware e software e tambmtem um mais aleatrio sentimento do que o clculo de uma soma de verificao normal. Mascomo ele ir executar na prtica, quando um ou mais bits esto errados? Se escolhermos odivisor-19 no nosso exemplo a ser um estranho nmero, voc no precisa de matemtica dealto nvel para ver que todos os erros de um nico bit sero detectados. Isso ocorre porquecada erro de bit nico vai deixar a mudana de dividendos com uma potncia de 2. Se, porexemplo 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 oerro no vai passar despercebida.

    A segunda situao que queremos detectar quando dois bits nica alterao nos dados. Issorequer 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 independenteda distncia entre os dois bits errados voc sempre vai detect-los. Sabe-se, que os valorescomumente usados 0x8005 e 0x1021 dos clculos CRC16 e CRC-CCITT um desempenho muitobom para esta questo. Por favor, note que outros valores podem ou no, e voc no podefacilmente calcular qual valor divisor adequado para a deteco de dois erros de bit e qualno . Conte com uma extensa pesquisa sobre o assunto matemtico feito h algumas dcadaspor 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 nmerompar de mudanas bits. Isto pode ser conseguido atravs de um divisor com um nmero par debits definidos. Usando modulo 2 matemtica voc pode mostrar que so detectados todos oserros com um nmero mpar de bits. Como eu j disse antes, no mdulo 2 da matemtica afuno 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 expressopermanece o mesmo. Quando escolhendo um divisor com um nmero par de bits definidos, aestranheza do restante igual estranheza do divident. Portanto, se a estranheza dasmudanas de dividendos, porque um nmero mpar de bits de mudanas, o restante tambm vaimudar. Assim, todos os erros que mudam um nmero mpar de bits ser detectado por umclculo CRC, que realizada com uma tal divisor. Voc pode ter visto que o divisor utilizadovalores 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 nossoclculo do CRC com um comprimento mximo para ser detectado, e todos os erros j estourou aser detectado com uma alta probabilidade. Um erro de estouro bastante comum nascomunicaes. o tipo de erro que ocorre por causa de um raio, rel de comutao, etc, ondedurante um perodo pequeno de todos os bits so definidos para um. Para realmente entenderisso, 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 umcomprimento 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. Ovalor divisor mais frequentemente no descrito como um nmero binrio, mas um polinmio deordem determinada. Na vida normal, alguns polinmios so usados com mais freqncia do queoutros. Os trs utilizada no clculo on-line CRC nesta pgina esto a grande CRC16 16 bits eCRCCCITT 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. Oprograma de teste pode ser usado directamente para testar arquivos ou cordas. Voc tambmpode olhar para os cdigos-fonte e integrar essas rotinas CRC em seu prprio programa. Porfavor, 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 resultadosdiferentes do que outras implementaes de CRC. Tudo isso de ps-processamento pr e feitono programa de exemplo para que ele no deve ser difcil de fazer o seu prprio trabalho deimplementao. 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 oresultado no site, sua implementao est funcionando e compatvel com a maioria das outrasimplementaes.

    Apenas como referncia as funes polinomiais para os clculos mais comuns CRC. Recordamosque 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 redecomuns e da teoria e algoritmos por trs de sua implemenentation.

    Andrew S. Tanenbaum

    vrio The Art of Computer Programming a principal referncia paraos algoritmos Seminumerical. Clculos polinomiais so descritos emprofundidade. Algum nvel de matemtica necessriocompreend-lo totalmente embora.

    Donald E. Knuth

    - DNP 3.0, ou protocolo de rede distribuda um protocolo decomunicao concebido para ser utilizado entre computadoressubestao, UTRs unidades terminais remotas , IEDs dispositivoseletrnicos inteligentes e estaes mestras para a indstria deenergia eltrica. Ele agora tambm utilizado em indstriasfamiliares como tratamento de guas residuais, transporte eindstria 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