sábado, 26 de julho de 2014

Gerador de CRC para comunicações.

Hoje estaremos falando do gerador CRC (Cyclic Redundancy Check) mais comum usado em redes de comunicação serial ou Ethernet , para quem não conhece, um CRC é um trecho de código enviado junto a um frame (pacote de dados para comunicação) para validar a informação que esta chegando ao receptor, vale lembrar que nenhum meio de transmissão é livre de ruído (sendo este previsível, como no caso de atenuação de sinal, ou imprevisível, caso de interferências eletromagnéticas) portanto esta técnica mesmo sendo uma das mais confiáveis não eliminará completamente a chance de um dado corrompido ser interpretado como valido. O processo não é muito complicado, mas chamo a atenção para a frequência de banda da comunicação pois tanto a geração quanto teste de integridade usufruindo desta ferramenta demanda processo matemático, portanto tempo de processamento e quando esta se trabalhando com altas taxas de velocidade os terminais que enviam e recebem estes pacotes  precisam ser um pouco mais porrada quando o assunto é microcontroladores.
A sequencia se resume em escolher um polinômio gerador ou "chave" como também é chamado, fazer a operação XOR (Para quem não se lembra, termos de ordem distinta geram nível alto e de mesma ordem nível baixo, exemplos : 0+0=0, 0+1=1, 1+0=1 e 1+1=0)entre o dado+(sequencia de zeros equivalente a extensão da "chave"-1) a ser verificado a integridade e a "chave", o "resto" desta operação será nosso  CRC e deve possuir o mesmo numero de termos da "chave" e ser anexado ao frame que será enviado, o receptor deste frame deve conhecer a "chave" que gerou o CRC e usa-la para fazer novamente a operação XOR entre o dado+CRC e a "chave", o restante desta soma deve ser zero ("0") comprovando assim que o dado recebido pelo sistema é o mesmo enviado pela origem. Vamos para a parte pratica, digamos que o dado a ser transmitido é a sequencia binária  1010001101 e a chave seja 110101, automaticamente nosso dado se torna 101000110100000 , estes cinco ("5") zeros finais equivalem ao numero de termos do CRC e em seguida efetuamos a operação XOR.

Para enviar:

101000110100000(Dado)
110101                  (Chave)
_______ (Primeira XOR)
0111011  (O primeiro zero da sequencia é eliminado e próximo termo na sequencia desce.)
  110101
  _______ (Segunda XOR)
  00111010 (Como há dois zeros no inicio da sequencia os cortamos e descemos dois termos)
      110101
      _______ (Terceira XOR)
      00111110 (Mesmo caso da soma anterior)
          110101
          _______
          00101100 (Mais dois termos descem)
              110101
              _______
              0110010 (No trecho final não podemos descer mais de um termo)
                110101
                ________
                0001110 (Desce ultimo termo)
                  110101
                  _______
                  111011
                  110101 (Quando necessário executamos a operação mais uma vez)
                  _______
                  001110 >> 01110 (Cortando o ultimo zero temos nosso CRC)

Uma vez que extraímos o CRC pela soma XOR o concatenamos com o dado desta maneira:

Informação contida no frame: Dado+CRC = 101000110101110

Quando o destinatário da mensagem recebe este dado , o mesmo faz o mesmo processo considerando o CRC como parte do trecho de código e o resultado deve ser zero para confirmar a integridade do dado, vejamos a seguir.

Para receber:

101000110101110 (Dado+CRC)
110101                   (Chave)
_______ (Sequencia de XOR)
0111011 (Pule uma casa kkk)
  110101
  _______
  00111010 (Pule duas casas)
      110101
      _______
      00111110 (Pule duas casas)
          110101
          _______
          00101111 (Pule duas casas)
              110101
              _______
              0110101 (Falta pouco, alias, pule uma casa)
                110101
                _______
                000000 >>> (No momento que todos os termos zerarem acaba a soma!)

Eureca, funcionou, com o restante zero confirmamos a integridade do nosso dado, desta maneira podemos evitar interpretação errôneas de dados em nossa linha de comunicação, ufaa!! Com eu disse no inicio simples, porem extensa. Espero que tenham gostado, até a próxima, um grande abraço.
                                    

          

Nenhum comentário:

Postar um comentário