como funciona el crc

6
MÉTODO DE COMPROBACIÓN DE ERRORES POR REDUNDANCIA CÍCLICA CRC: Cyclic Redundancy Check Por ING. José de Jesús Jiménez Medina 1. Introducción La integridad de los datos, es uno de los asuntos más importantes y prioritarios, de todo sistema que involucre en su concepto, el intercambio de información entre las entidades que lo componen. El transporte de datos entre los dispositivos inteligentes de un sistema, debe tener un alto grado de transparencia, para que el sistema cumpla con los estándares de eficiencia ofrecidos por sus diseñadores. A través de los años, se han elaborado diferentes métodos para detectar los inevitables errores que suceden, al llevar información de un lugar a otro. La paridad y el checksum son métodos sencillos utilizados para detectar errores, pero su probabilidad de éxito es baja y el método en sí tiene una gran posibilidad de generar errores. Sin embargo, los algoritmos de estas formas simples, dieron la pauta para diseñar fórmulas complejas que permiten por una parte, tener un alto porcentaje de confiabilidad, y por otra, una baja probabilidad de inserción de errores por el método mismo. Uno de los métodos más confiables, por su alta sensibilidad para detectar errores, y que se ha convertido en la referencia obligada de los sistemas de telecomunicaciones contemporáneos, es el método conocido como Cyclic Redundancy Check, CRC por sus siglas en inglés, que permite mantener tasas de error extremadamente bajas. Existen varios modelos del método CRC, y dependiendo de la métrica de las tramas que manejan, son conocidos como: CRC-8, CRC-16, CRC-32, CRC-CCITT, etc. En el sistema de procesamiento radar, utilizado por SENEAM para el control de tránsito aéreo, la tasa de error permisible de los canales de comunicación de datos, es de uno entre cien millones de bits. Es decir que, los datos enviados por los sensores de radar hacia los centros de procesamiento, deben llegar con una régimen de error no mayor a 1 x 10 -8 . El modelo que se utiliza es el CRC-CCITT de 16 bits. 2. Descripción del método del CRC El método del CRC, consiste básicamente en aplicar un procesamiento a la trama de bits que son enviados por un canal, y el resultado de ese procesamiento, es agregado a la misma trama, colocándolo al final. En la parte de recepción, se aplica el mismo procesamiento a toda la trama, incluido el resultado del CRC agregado por el emisor, y si el resultado es igual a cero, lo más probable es que la transferencia de información fue hecha sin errores. Todos los métodos de CRC tienen la misma mecánica, la diferencia está solamente en las variables que intervienen en el procesamiento de la información. En las figuras 1 y 2, se muestra el algoritmo que sigue un método de CRC. Información Emisor t0 CRC-tx Información CRC-tx t0 Receptor CRC-rx = 0 El Rx aplica el procesamiento a toda la trama incluido el CRC agregado por el tx, si los datos llegan sin errores, el CRC calculado por el rx debe ser igual a cero. Fig. 1: Mecánica de comprobación de errores por redundancia cíclica 1

Upload: rolandoemem

Post on 27-Dec-2015

91 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Como Funciona El CRC

MÉTODO DE COMPROBACIÓN DE ERRORES POR REDUNDANCIA CÍCLICA

CRC: Cyclic Redundancy Check

Por ING. José de Jesús Jiménez Medina

1. Introducción

La integridad de los datos, es uno de los asuntos más importantes y prioritarios, de todo sistema que involucre en su concepto, el intercambio de información entre las entidades que lo componen. El transporte de datos entre los dispositivos inteligentes de un sistema, debe tener un alto grado de transparencia, para que el sistema cumpla con los estándares de eficiencia ofrecidos por sus diseñadores.

A través de los años, se han elaborado diferentes métodos para detectar los inevitables errores que

suceden, al llevar información de un lugar a otro. La paridad y el checksum son métodos sencillos utilizados para detectar errores, pero su probabilidad de éxito es baja y el método en sí tiene una gran posibilidad de generar errores. Sin embargo, los algoritmos de estas formas simples, dieron la pauta para diseñar fórmulas complejas que permiten por una parte, tener un alto porcentaje de confiabilidad, y por otra, una baja probabilidad de inserción de errores por el método mismo.

Uno de los métodos más confiables, por su alta sensibilidad para detectar errores, y que se ha convertido

en la referencia obligada de los sistemas de telecomunicaciones contemporáneos, es el método conocido como Cyclic Redundancy Check, CRC por sus siglas en inglés, que permite mantener tasas de error extremadamente bajas. Existen varios modelos del método CRC, y dependiendo de la métrica de las tramas que manejan, son conocidos como: CRC-8, CRC-16, CRC-32, CRC-CCITT, etc.

En el sistema de procesamiento radar, utilizado por SENEAM para el control de tránsito aéreo, la tasa de

error permisible de los canales de comunicación de datos, es de uno entre cien millones de bits. Es decir que, los datos enviados por los sensores de radar hacia los centros de procesamiento, deben llegar con una régimen de error no mayor a 1 x 10-8. El modelo que se utiliza es el CRC-CCITT de 16 bits.

2. Descripción del método del CRC

El método del CRC, consiste básicamente en aplicar un procesamiento a la trama de bits que son enviados por un canal, y el resultado de ese procesamiento, es agregado a la misma trama, colocándolo al final. En la parte de recepción, se aplica el mismo procesamiento a toda la trama, incluido el resultado del CRC agregado por el emisor, y si el resultado es igual a cero, lo más probable es que la transferencia de información fue hecha sin errores.

Todos los métodos de CRC tienen la misma mecánica, la diferencia está solamente en las variables que

intervienen en el procesamiento de la información. En las figuras 1 y 2, se muestra el algoritmo que sigue un método de CRC.

Información

Emisor t0

CRC-tx

Información CRC-tx

t0 Receptor

CRC-rx = 0

El Rx aplica el procesamiento a toda la trama incluido el CRC agregado por el tx, si los datos llegan sin errores, el CRC calculado por el rx debe ser igual a cero.

Fig. 1: Mecánica de comprobación de errores por redundancia cíclica

1

Page 2: Como Funciona El CRC

2

En al figura 3 se presenta un ejercicio sencillo, que incluye una trama de 8 bits y el polinomio x2 + 1, la

métrica es igual a 2. En el ejemplo se muestra la división de la trama formada por los 8 bits de información más el relleno de ceros igual a la métrica, por el polinomio generador. El resultado del CRC es igual a “01”. En la

figura 4 se muestra el procesamiento de la trama original, más el resultado del CRC que se muestra en la figura 3, más el relleno de ceros según la métrica. Como se puede observar el resultado de aplicar el método, es que se tiene un residuo igual a cero. La operación de la figura 3 es realizada por el emisor, el residuo se envía al final de la trama. La operación de la figura 4 es realizada por el receptor, si todos los bits llegaron sin error y el CRC enviado es correcto, el resultado del cálculo debe ser cero, si no, es que hubo errores en el envío-recepción de la trama.

figura 4 se muestra el procesamiento de la trama original, más el resultado del CRC que se muestra en la figura 3, más el relleno de ceros según la métrica. Como se puede observar el resultado de aplicar el método, es que se tiene un residuo igual a cero. La operación de la figura 3 es realizada por el emisor, el residuo se envía al final de la trama. La operación de la figura 4 es realizada por el receptor, si todos los bits llegaron sin error y el CRC enviado es correcto, el resultado del cálculo debe ser cero, si no, es que hubo errores en el envío-recepción de la trama.

Información

CRC

Fig. 2: Algoritmo de cálculo del CRC

Polinomio CCITT

Cociente

relleno

El residuo de la división es el resultado del cálculo del CRC que es agregado al final de la trama

El dividendo se forma con todos los bits de la trama más un número de “0” ó “1” según la métrica del polinomio

Número binario con una longitud y valor fijos.

El cociente se descarta

16 12Polinomio CCITT-16 bits: x + x + x5+1 El polinomio CCITT-16 es un número binario formado por 17 bits, donde xn representa la posición donde un bit es “1”. El polinomio CCITT-16 = 100010000001000012 = 11021hex En algunos textos se menciona como el polinomio 1021

Fig.3. Cálculo del CRC por el emisor Fig.4. Cálculo del CRC por el receptor

Page 3: Como Funciona El CRC

3. El método del CRC a base de registros Como se conoce, la división binaria se puede realizar haciendo corrimientos de los bits del dividendo, según sea la potencia n de la base 2 del divisor, 2n. En el caso de un polinomio, como el del ejemplo anterior, dado que el residuo es del mismo tamaño que el polinomio (2 bits), se utiliza un registro de corrimiento, para introducir los bits del dividendo, pero se inserta una operación OR exclusiva, a la salida del registro n, donde el polinomio presenta una potencia de x. Las entradas de cada OR exclusiva, son la salida del registro correspondiente y la salida del registro de xn, donde n es máxima. En la figura 5 se muestra el arreglo para la operación de las figuras 3 y 4.

Resultado del CRC (LSB-MSB) Or exclusiva

X2 + x0

Bits de entrada LSB – MSB (01011011)

Fig.5. Cálculo del CRC en base a registros

En la figura 6 se muestra un ejemplo utilizando un entero de 16 bits, al que se le calcula un CRC con el polinomio CCITT-16 = x16 + x12 + x5 + 1. El número de 16 bits transmitido es 400Chex,

3

X16 + X12 + X5 + 1

Secuencia de entrada

4 0 0 C 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 MSB LSB

El CRC de 400C = EBA4

Fig. 6. Cálculo del CRC del número 400Chex

LSB MSB

Page 4: Como Funciona El CRC

4

Como se observa en ambos ejemplos, los bits de la trama sometida al cálculo más el relleno de “0” según la métrica del polinomio, son introducidos uno tras otro al arreglo de registros, empezando por el bit menos significativo. Después de aplicar el número de corrimientos según el número de bits de la trama, más el número de “0” de relleno, el número que quede en el grupo de registros, arreglados del MSB al LSB según se observa en la figura, será el resultado del CRC. Según el arreglo de registros y compuertas OR exclusiva, se advierte que un valor de “1” en la salida del registro x16, provocará la inversión de los bits de la otra entrada de cada compuerta OR exclusiva, mientras que un “0”, en la salida del mismo registro, permitirá un corrimiento transparente de los bits. Por lo tanto, a partir de este modelo, se puede hacer el cálculo del CRC de cualquier número, utilizando registros y compuertas (hardware), -de hecho, los controladores de comunicaciones incluyen en su lógica el cálculo del CRC- y a través de un algoritmo de software, con operaciones de rotación y OR-X. Es importante señalar, que el primer modelo del cálculo del CRC no precisaba si el relleno debiera ser de “0” o de “1”, ni tampoco si los bits debieran entrar por el registro de menos peso o por el de más peso. Como consecuencia de esto, surgieron dos vertientes, que aplicando el mismo método, arrojan resultados de CRC diferentes para un mismo número de entrada. En todo caso, no importa que forma se use, siempre y cuando tanto el emisor como el receptor apliquen la misma, sin embargo es necesario conocer cuál de las dos se aplica, cuando se trate de acoplar un receptor y/o monitor a un enlace establecido. Al final del documento, se agregan las direcciones de las páginas web donde se puede estudiar con más detalle, cada una de las formas.

Page 5: Como Funciona El CRC

5

4. Aplicando la teoría En este tema se aplica una prueba de escritorio, para explicar el cálculo del CRC del número del ejemplo de la figura 6. En el siguiente listado se muestra el estado de los registros que forman el modelo del CRC. El registro inicia con ceros y los bits de la trama, iniciando con el LSB, son introducidos en cada corrimiento. Los corrimientos están numerados del 0 al 31, que corresponden a 32 bits, 16 para los bits de la trama y 16 del relleno de ceros. Cuando el bit del registro 16 (x16 ) es 1, entonces se ejecuta una operación OR exclusiva entre el valor del grupo de registros y el valor del polinomio. El CRC es el valor que queda en los registros, al finalizar el corrimiento de todos los bits, incluyendo los 16 ceros de relleno al final. Los bits del CRC son ordenados de acuerdo a la figura 6. Cálculo del CRC-CCITT de 16 bits de la trama: 0c40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 5 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 6 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 7 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 C 8 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 9 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 10 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 11 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 12 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 13 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 14 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 15 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 40 16 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 17 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 18 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 1 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 19 0 0 1 0 0 0 0 0 0 1 1 0 0 0 1 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 20 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0

21 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 22 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 1 23 0 0 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 0 0 1 1 0 1 0 0 0 1 0 1 0 0 1 1 24 0 1 1 0 1 0 0 0 1 0 1 0 0 1 1 0 25 1 1 0 1 0 0 0 1 0 1 0 0 1 1 0 0 26 1 0 1 0 0 0 1 0 1 0 0 1 1 0 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 1 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 27 0 1 1 0 0 1 0 1 0 1 1 1 0 0 1 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 0 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 28 1 1 1 0 1 0 1 0 1 0 1 0 0 1 1 0 29 1 1 0 1 0 1 0 1 0 1 0 0 1 1 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 1 1 0 0 0 1 0 1 0 1 1 0 1 1 0 1 30 1 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 1 31 0 0 1 1 0 1 0 1 1 1 1 1 0 1 1 0 0 Pol 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 ------------------------------------- OrX 0 0 1 0 0 1 0 1 1 1 0 1 0 1 1 1 ====================================== CRC 1 1 1 0 1 0 1 1 1 0 1 0 0 1 0 0 EBA4 ===================================

Page 6: Como Funciona El CRC

5. Programa: cal_CRC.exe Una aplicación, conocida como calculadora de CRC para el polinomio CCITT-16, acompaña a este documento para ayudar en el cálculo rápido de cualquier trama de datos. En la figura 7 se muestra la interfaz gráfica de la calculadora. Esta pequeña aplicación, funciona en una plataforma de W9x, W2K ó WXP. La ventana de datos permite ingresar un máximo de 256 caracteres, en formato hexadecimal o en formato ASCII. La trama de datos se forma a partir del primer byte ingresado, el cual es el byte menos significativo, y al final del cálculo, el CRC formado de 16 bits es ordenado con el mismo criterio, es decir, el byte de menos peso es puesto primero, de izquierda a derecha, en la ventana del resultado ”CRC:”. Al activar la caja de la opción “Archivo CRC”, la calculadora genera un archivo con la prueba detallada del CRC de la trama de datos.

Fig. 7. Calculadora de CRC, CCITT-16

Ventana para ingresar datos (máximo 256)

Permite generar un archivo de texto con el cálculo del CRC

Botón para calcular el CRC de la trama ingresada

Limpia la ventana de datos y de resultado

Ventana de resultado

Selecciona el formato de datos en ASCII

Selecciona el formato de datos en HEX

Enlaces web con información sobre el método CRC: http://www.macs.hw.ac.uk/~pjbk/nets/crc/http://www.ece.msstate.edu/~reese/EE4743/crcexplained.htmhttp://www.zorc.breitbandkatze.de/crc.htmlhttp://www.joegeluso.com/software/articles/ccitt.htm 6