Autor Tema: Como hacer el CRC del protocolo BSAP  (Leído 4649 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Como hacer el CRC del protocolo BSAP
« en: 01 de Septiembre de 2011, 12:10:07 »
Hola amigos del foro, estoy intentando realizar algunas cosas del protocolo BSAP para pruebas, no se nada del protocolo, apenas empece a leerlo, pero ahora me toca hacer la comprobacion del CRC, pero no entiendo como hacerlo, ya he hecho pruebas pero ninguno me funciona, aquí esta la explicación que encontré por internet:

CRC Calculation

The CRC under the ISO standard is CRC-CCITT which uses a generator polynomial
with the (16, 12, 5, 1) terms.

CRC calculation will begin following the STX in the initiating sequence. The first DLE
in each two character DLE sequence (DLE DLE, DLE ETX) will not be included in the
CRC calculation.

The CRC calculation will terminate following the ETX in the
terminating sequence.

Lo implemente así, pero a esto le hace falta información, si alguien sabe como hacerlo y me puede ayudar, me seria de gran ayuda, muchas gracias.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #1 en: 01 de Septiembre de 2011, 12:19:52 »
Hola.

Hace unos años hice un hilo y expliqué bastante del tema. Hay algún problema con las fórmulas del LATEX,pero algo todavía se entiende.

http://www.todopic.com.ar/foros/index.php?topic=25627.0

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #2 en: 01 de Septiembre de 2011, 16:16:25 »
hola BrunoF, ya había mirado tu post, pero tampoco me sirvió, ya me estoy volviendo loco he intentado hacer todas las combinaciones posibles pero nada, muchas gracias de todas maneras por la ayuda.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #3 en: 02 de Septiembre de 2011, 00:06:31 »
No tenes un ejemplo numérico como para experimentar opciones?
No contesto mensajes privados, las consultas en el foro

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #4 en: 02 de Septiembre de 2011, 11:02:35 »
Hola suky, claro, tengo no uno si no varios ejemplos, pero en ninguno ha dado, he hecho muchas combinaciones pero no han tenido resultado, te voy a poner varios ejemplos y lo que dice un libro en español y mi código para ver si alguien puede hacer algo:

CRC: Campo para la verificación de error. Se calcula desde STX a ETX y no toma en cuenta los DLE intermedios. Utiliza el algoritmo CRC UIT-T V.41. (DLE,DLE,STX,DATOS,DLE,ETX,CRC1,CRC2)

0,10,2,1,32,8B,31,10,3,E3,F6

0,10,2,1,33,85,0,10,3,39,55

0,10,2,0,32,86,1,0,4,10,3,84,44

char CRC1, CRC2;
unsigned int CRC;
int ContBan;
unsigned int j, i, z;
short d;

        CRC1=CRC2=0;
   CRC = 65535;//;

        z = 0;d = 0;
        for (j=0; j<tamano_crc; j++){
                //d = (crc_vector[j]*256);
                CRC = CRC^crc_vector[j];//d;
                i = 0;
                for (i=0; i<8; i++){
                        z = CRC & 1;//32768;
                        if (z>0){
                                CRC = CRC >> 1;//<< 1;
                                CRC = CRC & 0x7FFF;//65534;
                                CRC = CRC ^ 0x1021;//polinomio
                        }else{
                                CRC = CRC >> 1;//<< 1;
                                CRC = CRC & 0x7FFF;//65534;
                        }
                }
        }

        //CRC
        CRC1 = CRC & 255;
        CRC  = CRC >> 8;
        CRC2 = CRC & 255;

Este metodo ha sido cambiado varias veces pero ninguna ha dado, ojala me puedan ayudar en algo.


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #5 en: 02 de Septiembre de 2011, 13:37:09 »
No veo donde apliques el polinomio del CRC  :roll: Explícate que significa cada dato, cual es DLE, STX, DATOS, ETX, etc en los ejemplos numéricos. Porque dice que alguno de estos bytes no se incluyen en el calculo del CRC.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #6 en: 02 de Septiembre de 2011, 13:42:59 »
hola, el polinomio lo aplico aquí " CRC = CRC ^ 0x1021;//polinomio"

0x1021=x16+x12+x5+1

Cuales son los datos en una trama:

0,10,2,1,32,8B,31,10,3,E3,F6
DLE,DLE,STX,DATO1,DATO2,DATO3,DATO4,DLE,ETX,CRC1,CRC2

Si no me supe explicar, por favor discúlpame, gracias por la colaboración.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #7 en: 02 de Septiembre de 2011, 14:16:39 »
El polinomio está mal, seria x16+x12+x5+x

Alguna teoría para ver el calculo?
No contesto mensajes privados, las consultas en el foro

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #8 en: 02 de Septiembre de 2011, 14:28:58 »
No creo Suky. Todos los polinomios que conozco de CRC son impares...Sino se perdería resolución(azar) en la división.

Por favor, primero encontrá el polinomio invertido correcto siguiendo mi explicación(o cualquier otra). Luego someté los datos correspondientes a un algorítmo de CRC16, y luego podríamos ver si hace falta algún valor inicial de entrada o salida para acomodar los valores.

Saludos.
« Última modificación: 02 de Septiembre de 2011, 14:34:09 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #9 en: 02 de Septiembre de 2011, 14:36:14 »
Puede ser, yo lo digo por lo que puso aquí:

The CRC under the ISO standard is CRC-CCITT which uses a generator polynomial with the (16, 12, 5, 1) terms.

 :tongue:
No contesto mensajes privados, las consultas en el foro

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #10 en: 02 de Septiembre de 2011, 15:21:46 »
Bueno, la verdad nunca lo he visto pero me parece que es algo lógico, allí en ese polinomio están mostrando los coeficientes, si el ultimo fuera 0 el final del polinomio fuera 1, tiene lógica aunque lo que dice BrunoF es cierto también, voy a hacer las pruebas y les comento a ver que paso, gracias por la ayuda.

La teoría que encontré acerca del crc es que utiliza el algoritmo CRC UIT-T V.41.

Nota: hice las pruebas pero tampoco resulto.
« Última modificación: 02 de Septiembre de 2011, 16:32:12 por IngRandall »

Desconectado om@r

  • PIC12
  • **
  • Mensajes: 86
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #11 en: 05 de Septiembre de 2011, 19:23:40 »
Hola a Todos ,solo por curiosidad  :shock: porque de crc nose nada  :shock: aplique un par de calculadoras de crc a la trama de ejemplo ,0,10,2,1,32,8B,31,10,3,E3,F6  y no arroja el crc que dice ser el correcto E3 F6 ,por el polinomio tendria que ser alguno del tipo ccitt kermit o crc16 de los que figuran para calculo en los programas :shock: pero no dan el mismo resultado ,te pego los links :shock:
Saludos!
http://www.lammertbies.nl/comm/info/crc-calculation.html
http://www.zorc.breitbandkatze.de/crc.html


 

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #12 en: 06 de Septiembre de 2011, 09:32:20 »
hola om@r, gracias por los link, ya los tengo, con esos hago tambien mis pruebas para corroborar mis programas, con respecto a la teoria el libro divce algo pero en la realidad da otra cosa, asi q todavia estoy en la búsqueda, cuando sepa algo les avisare, gracias.

Desconectado IngRandall

  • PIC18
  • ****
  • Mensajes: 383
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #13 en: 26 de Septiembre de 2011, 11:34:19 »
Hola amigos del foro, les tengo buenas noticias, ya me dio el bendito crc, bueno en realidad me lo pasaron, en la pagina www.lammertbies.nl hay una sesión de foros también, allí pregunte y un forista me respondió, me dijo algunas inconsistencias que también yo vi del mismo libro y me dijo que tipo de crc podria ser, y lo mejor de todo, me dio el código en c++ de este crc ya probado, lo pase a mi pic24 y para sorpresa mía, me funciono, ya lo probé con varias tramas y me funciona a la perfeccion, gracias a todos por ayudarme, les voy a subir el programa con el que lo probe, ojala a alguien mas le sirva.

         while(1)
        {
                unsigned int RandallEx[] = {0x00,0x33,0x87,0x01,0x00,0x04,0x03};
                unsigned int crc;

                crc = CRC16_MCRF4XX(RandallEx, 7);

                CRC1=CRC2=0;

                CRC1 = crc & 255;
                crc  = crc >> 8;
                CRC2 = crc & 255;

                U1(CRC2);//para mostrar los dos bytes por el uart 1 del pic
                U1(CRC1);
        }

        int CRC16_MCRF4XX(unsigned int *data, unsigned int len) {
        unsigned int crc = 0xFFFF;

        int i, j;
        // Note: 0x8408 is the reflection of 0x1021
        for (j=len; j>0; j--) {
        crc ^= *data++;
        for (i=0; i<8; i++) {
        if (crc & 1) crc = (crc >> 1) ^ 0x8408;
        else crc >>= 1;
            }
         }
         return (crc);
      }

si necesitan mas información no duden en preguntar.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Como hacer el CRC del protocolo BSAP
« Respuesta #14 en: 26 de Septiembre de 2011, 15:20:42 »
Hola.

Si te fijas la implementación es identica a la mía y utiliza el polinomio revertido.

Tuviste suerte de que hicieron la tarea por vos.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.