Crc

11

Transcript of Crc

CRC

Laura Jessica Tacubeño Padrón

Miguel Ángel Sánchez Rubio

Alan Omar Solano Campos

Josimar Damian Peralta

23 de octubre de 2013

Resumen

En el presente trabajo se muestra el establecimiento de una conexiónentre PC o Laptop y un microcontrolador a través de transmisión serialen banda base, detectando la posible existencia de error en la transmisiónmediante la implementación de un algoritmo de control de error, cuyoresultado se despliega en una pequeña pantalla de cristal líquida.

La transmisión del ordenador al PIC16F877A se realiza por medio dellenguaje de programación C el cual recibe un mensaje en una interfaz queposteriormente se transmite utilizando un cable serial, de USB a DB9 elcual está conectado a una tarjeta de desarrollo QL200 quien recibe losdatos y en ella misma es posible ingresar un bit de error.

En el PIC16F877A tiene programado el algoritmo CRC el cual reali-za la detección de error en el mensaje transmitido si es que este existe.Cuando en el mensaje se detecta error, en la pantalla de cristal liquidase muestra el mensaje (en bits) con error, de lo contrario se despliega elmensaje ingresado.

Introducción

Muchos de los protocolos usados hoy en día usan CRC, el siguiente protocoloes para saber cómo implementar y como funciona CRC en un caso real, sinutilizar protocolos que lo implemente (como TCP/IP, etc).

Usemos ley C, ya que en Java se utilizan Sockets que ya implementan dichosprotocolos (TCP/IP o UDP'S).

Por ahora nos limitamos a detección de error.

1

Codigo de deteccion de errores (CRC).

El método de redundancia cíclica (CRC Cyclic Redundancy Check) [2] esuna técnica muy usada para detección de errores. Trabaja al nivel de mensaje,agregando varios caracteres de control al �nal, siendo lo más común 2 o 4 bytesde control.

Se divide la secuencia de bits a enviar, por un numero binario predetermi-nado.El resto de la división se adiciona a él mensaje como secuencia de control.

Por una regla aritmética simple, si el divisor es un numero de 16 bits, po-demos tener la certeza que el resto siempre podrá almacenares en dos bytes, dedonde, agregando 2 caracteres a nuestro mensaje tendremos el método imple-mentado.

El extremo receptor realiza el mismo cálculo que el emisor y compara elresultado obtenido con la secuencia de control recibida. Si no coinciden, equivalea una indicación de error.

Los códigos polinómicos se basan en el tratamiento de series de bits comosi fueran representaciones de polinomios, con coe�cientes de valor 0 y 1 única-mente.

Una trama de k bits se ve como una lista de coe�cientes de un polinomio conk términos, cubriendo un rango desde xk−1 hasta x0. A este tipo de polinomiose le conoce como polinomio de grado k− 1. El bit de orden más alto (el más ala izquierda) es el coe�ciente del término xk−1; el siguiente bit es el coe�cientedel término xk−2, y así sucesivamente.

Por ejemplo, el código 110001 tiene 6 bits y, por consiguiente, representa a unpolinomio de tres términos, que contienen los siguientes coe�cientes 1, 1, 0, 0, 0y 0, es decir: x5 +x4 + x0.

De acuerdo con las teorías de las reglas de la teoría del campo algebraico,la aritmética del polinomio se realiza en módulo 2. No hay términos de acarreopara la suma ni de préstamo para la resta; las dos operaciones son idénticas alOR EXCLUSIV O.

Cuando se emplea el método del código polinómico, el emisor y el receptordeberán estar de acuerdo respecto a un polinomio generador, G(x), en formaanticipada. Los bits de orden superior e inferior del generador deben ser 1.

Para calcular el código de redundancia de alguna trama con m bits, corres-pondiente al polinomio M(x), la trama deberá ser más grande que el polinomiogenerador. La idea básica consiste en incluir un código de redundancia al �nalde la trama, de tal manera que, el polinomio representado por la trama con elcódigo de redundancia sea divisible por G(x).

Cuando el receptor recibe la trama de suma comprobada, intenta dividirlaentre G(x). Si existe un resto, habrá ocurrido un error de transmisión.

El algoritmo para calcular la redundancia es el siguiente:Sea r el grado de G(x). Agregar r bits a cero al extremo de orden inferior

de la trama, de tal manera que ahora contenga m + r bits, y corresponda alpolinomio xrM(x).

Dividir la serie de bits correspondientes a xrM(x) entre la serie de bitscorrespondientes a G(x), empleando la división en módulo 2.

2

Restar el resto (que siempre tiene r o menos bits) de la serie de bits corres-pondientes a xrM(x), empleando la resta en módulo 2. El resultado es la tramalista para trasmitir. Llámese T (x) a este polinomio.

En la siguiente �gura se ilustra el cálculo para la trama 1101011011 y G(x)=x4 + x+ 1:

Figura 1. Ejemplo CRC por división

Cálculo de la Redundancia Cíclica.Un código polinómico con r bits de redundancia, podrá detectar todas las

ráfagas de errores de longitud <= r. Una ráfaga de error de longitud k puederepresentarse por la expresión xi(xk−1+ ...+1), donde i determina qué tan lejosdel extremo derecho de la trama recibida, queda localizada la ráfaga. Si G(x)contiene un termino x0, no tendrá a xi como factor, por lo cual, si el grado de laexpresión entre paréntesis es menor que el grado de G(x), el resto nunca podráser cero.

También se puede demostrar que, cuando ocurre una ráfaga de error mayorque r+ 1 bits, o bien, que ocurren varias ráfagas cortas, la probabilidad de queuna trama mala pase inadvertida es de 1

2r, suponiendo que todos los conjuntosde bits son semejantes.

Tres polinomios se han convertido en normas internacionales:CRC − 12 = x12 + x11 + x3 + x2 + x1 + 1CRC − 16 = x16 + x15 + x2 + 1CRC − CCITT = x16 + x12 + x5 + 1

Los tres contienen el término x + 1 como factor primo. El CRC − 12 seutiliza cuando la longitud del carácter es de 6 bits; en tanto que los otros dosse emplean para caracteres de 8 bits. Un código de redundancia de 16 bits,como las normas CRC−16 o CRC−CCITT , captura todos los errores simplesy dobles, todos los errores con un número impar de bits, todos los errores deráfagas con longitudes de 16 o menos bits, 99.997 de los errores de ráfagas de17 bits y 99.998 de los errores de ráfagas de longitudes de 18 bits o mayores.

3

Conector DB9

El conector DB9 [4] (originalmente DE-9) es un conector analógico de 9clavijas de la familia de conectores D-Subminiature (D-Sub o Sub-D).

El conector DB9 se utiliza principalmente para conexiones en serie, ya quepermite una transmisión asíncrona de datos según lo establecido en la normaRS-232 (RS-232C).

Figura 2. Conectores DB9.

Se debe tener en cuenta que existen adaptadores DB9-DB25 para convertirfácilmente un enchufe DB9 en uno DB25 y viceversa.

Figura 3. Pines DB9.

Justi�cación

Puede dar pie a diferentes aplicaciones, no solo de comunicaciones, si no aotras áreas como a sistemas, mecatrónica, control a distancia, etc. Ejemplo deaplicaciones podrían ver monitoreo y (control del tiempo, humedad, control deroles, envió de mensajes, lector de tarjeta, etc.)

La información puede ser almacenada. Bases de datos para ser utilizada enun servidor, por ejemplo o simplemente desplegarla.

Objetivo

Transmitir datos en Banda Base en lenguaje C entre una PC o Laptop y unmicrocontrolador usando detección de error por CRC.

4

Diseño

Para el proyecto se utilizo la tarjeta de desarrollo QL200 la cual ya cuenta demanera integrada la pantalla de cristal liquido (LCD), el MAX232, el conectorDB9 y el modulo para programar y de lectura para PICs, que en nuestro casose utilizo el PIC16F877A.

Figura 4. Tarjeta QL200Herramientas:

1. PC o Laptop.

2. Tarjeta QL200 (Microcontrolador PIC16F877A,MAX232,Display,LCD).

3. Cable USB-DB9.

5

Figura 5. Conexion Laptop - QL200

Desarrollo

Para la comunicación UART teniendo en cuenta los 9600 Baudios en PIC C.UART1_Init(9600); //INICIALIZAR COMUNICACION UART

Delay_ms(100); //ESPERA INICIALIZAR UART

Envio de datos por DB9 en Cfor(i=0;i<datos;i++) { writeToSerialPort(h,&sendbu�er[i],1); Sleep(42); //SIN-

CRONIA }closeSerialPort(h); //CERRAR COMUNICACION getchar(); return 0;

Inicio de comunicacion C con ayuda de la libreria "serialport.h".HANDLE h = openSerialPort("COM6",B9600,one,o�); //INICIAR COMU-

NICACIONchar sendbu�er[datos]; //BUFFER DE DATOS A ENVIAR

Pruebas

1. Creación de un programa en C/C# que reciba cadena de caracteres atransmitir.

2. Conversión de los datos de entrada a código binario para la transmisión delmensaje hacia el PIC16F877A, mediante el cable USB a DB9. -Recogidade los datos enviados por la tablilla QL-200 para la transmisión hacia elPIC16F877A.

6

3. Creación del programa en PIC, para la detección de errores mediante elmétodo de CRC.

4. Recepción de datos en PIC16F877A, realizando comprobación de erroresmediante CRC.

5. Despliegue de resultado en Display digital de la tablilla QL-200 Yo digoque así quedarían los pasos del escenario de pruebas.

Resultados

1. Programa en C para mandar un mensaje de texto.

Figura 6. Fraccion del codigo de C para el envio del mensaje.

2. Programación en el PIC

Figura 7. PIC comenzando a programar.

7

3. PIC Programado con el codigo de Deteccion de Error, listo para recibir elmensaje.

Figura 8. PIC Programado

4. Si el mensaje recibido no tiene error, se muestra el mensaje enviado, comose ve a continuacion.

Figura 9.Mensaje sin error.

8

5. Si el mensaje recibido tiene error, se muestra la leyenda error en la Trans-mision, como se ve a continuacion.

Figura 9.Mensaje con error.

Conclusiones

Laura Jessica Tacubeño Padrón.El objetivo de transmitir datos en Banda Base en lenguaje C entre una

PC o Laptop y un microcontrolador usando detección de error por CRC fuecumplido, aunque esta transmisión conto con algunas limitantes debido a que elPIC que utilizamos para implementar el algoritmo de detección de error carecíade memoria, dado que de este cuenta con 256 Bytes de los cuales 128 Bytes seutilizan única y exclusivamente para las instrucciones del proceso y los 128 Bytesrestantes son disponibles para las variables con las que trabajemos, por tantoal �nal de programar, nos dimos cuenta que solo contábamos con la posibilidadde enviar un máximo de 19 caracteres.

Otro incidente con el que nos topamos fue el hecho de que la transmisiónse veía afectada dado que la información enviada desde equipo de cómputo erademasiado rápido(velocidad de transmisión) para ser procesado por el PIC portanto recurrimos a ingresar retrasos de manera intencional, además de que de-bíamos sincronizar la transmisión de los datos porque de lo contrario se perdíandatos.

Miguel Ángel Sánchez Rubio.El primer inconveniente que se presenta al implementar el algoritmo CRC,

9

es la capacidad de memoria del PIC (la cual destina el 50% para almacenarvariables y el restante para las instrucciones). No es posible aumentar la ca-pacidad de memoria RAM, ya que si deseamos ocupar la memoria ROM o laFLASH, encontraremos más di�cultades, debido a que podemos provocar �fatigade memoria�.

Existe Circuitos Integrados que realizan la función del CRC pero no puedenser personalizados, ya que vienen con estándares que se manejan en el merca-do, tales como: CRC16, CRC32, CRC64 (los más comunes). En esta prácticapodemos personalizar nuestro polinomio.

Con respecto a la comunicación serial, es necesario notar varias cosas como:

Velocidad de transmisión,sincronía, forma de recepción y transmisión dedatos,con�guración de la palabra (en el PIC) para usar dicha funcionali-dad, estado de los dispositivos (tanto de recepción, transmisión y canal),el cálculo para los baudios se puede obtener por medio de la hoja de datos(Datasheet) del PIC.

Algunos de los problemas que se presentaron durante el desarrollo de dichapráctica fueron:

Mala sincronía en la transmisión, para ello se incluyeron retrasos parasolucionar el problema,pérdida de datos,solucionando la sincronía se so-luciona la pérdida de datos,bloqueo de puertos, en varias ocasiones fuenecesario reiniciar el equipo.

Alan Omar Solano Campos.En conclusión, la comunicación entre la pc y un microcontralador resultó un

tanto confusa ya que fue complicada la sincronización de los dispositivos, sinembargo una vez lograda la sincronización, la transmisión de los datos se pudolograr de forma correcta. Se pudo observar que el CRC es, desde mi punto devista, no es lo su�cientemente e�ciente en la detección de errores.

Josimar Damian Peralta.En el presente proyecto, hemos podido entender de manera más precisa el

funcionamiento de la transmisión de datos, debido al desarrollo que hicimosde la misma. En primer lugar, la programación llevada a cabo, tanto en elPIC16F877A como en el ordenador nos hizo establecer de manera concreta elcómo deberían comunicarse ambos objetos. Enseguida, tomar las consideracio-nes precisas para llevar a cabo la comunicación nos exigió tomar en cuentaalgunas especi�caciones físicas de la conexión, especialmente del PIC.

Después fue preciso observar y determinar lo que se quería transmitir, ponde-rando una transmisión e�caz. En último lugar, ha sido preciso que entendamos afondo los conceptos teóricos de la transmisión de datos, para comprobar de ma-nera práctica a éstos, logrando así la correcta ejecución de los todos los preceptosanteriormente establecidos.

10

Bibliogra�a

[1] Behtouz Forouzan , �Transmisión De Datos Y Redes De Comunicaciones�,Editorial Mc Graw Hill, México, 1999.

[2] Norman Matlo�, �Cyclic Redundancy Checking�, University Of CaliforniaAt Davis, USA, 2001.

[3] Peterson, �Cyclic Codes For Error Detection.�IRE, 1961.[4] Salvatierra, Daniel, �Microcontroladores PIC16F877A Y PIC16F887�, Al-

faomega, México,2009.[5] Andrew Tanenbaum, �Redes De Computadoras�, Pearson Educación, Mé-

xico, 2003.

11