Wiegand: Algorithme Détection et correction d'erreur
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Wiegand: Algorithme Détection et correction d'erreur



  1. #1
    invitefadeb275

    Question Wiegand: Algorithme Détection et correction d'erreur


    ------

    Bonjour,
    Est ce que quelqu'un connait comment se fait l'algorithme de detection d'erreur dans une trame Wiegand, et est ce qu'on peut utiliser la méthode de CRC checksum ou non??

    Merci d'avance.

    -----

  2. #2
    invitefadeb275

    Talking Re : Wiegand: Algorithme Détection et correction d'erreur

    Lol, aucun connait le protocole de transmission via l'interface wiegand?!!
    Je vais encore chercher sur le net, et je vais vous informer de toute nouvelle!

  3. #3
    Seb.26

    Re : Wiegand: Algorithme Détection et correction d'erreur

    Citation Envoyé par boussema Voir le message
    Lol, aucun connait le protocole de transmission via l'interface wiegand?!!
    LOL aussi ... Et toi, tu peux nous donner la façon d'utiliser le CRC du protocol RS232 stp ? ...

    Tu as du "vrai" wiegand ( = 26b ) ou tu as une trame envoyé en wiegand ? ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  4. #4
    invitefadeb275

    Re : Wiegand: Algorithme Détection et correction d'erreur

    salut,
    Pour le protocole wiegand j'utilise le wiegand 26 bits, le contrôle de parité se fait par les bits de parité (even parity et odd parity), le bit de poid fort controle et detecte les erreurs de 12 bits qui le suive, le bit de poid faible controle et detecte les erreurs des autres 12 bits.

    Pour le calcule de CRC d'une trame que se soit de protocole RS232 ou RS485, voici des fonction prédefinis qui le calcule, que se soit pour generer un CRC 8, 16 ou 32 bits, mais en code C pour le microcontroleur

    Code:
    /////////////////////// Driver to generate CRC //////////////////////////
    ////                                                                 ////
    ////  generate_8bit_crc(data, length, pattern)                       ////
    ////        Generates 8 bit crc from the data using the pattern.     ////
    ////                                                                 ////
    ////  generate_16bit_crc(data, length, pattern)                      ////
    ////        Generates 16 bit crc from the data using the pattern.    ////
    ////                                                                 ////
    ////  generate_32bit_crc(data, length, pattern)                      ////
    ////        Generates 32 bit crc from the data using the pattern.    ////
    ////                                                                 ////
    /////////////////////////////////////////////////////////////////////////
    ////        (C) Copyright 1996,2003 Custom Computer Services         ////
    //// This source code may only be used by licensed users of the CCS  ////
    //// C compiler.  This source code may only be distributed to other  ////
    //// licensed users of the CCS C compiler.  No other use,            ////
    //// reproduction or distribution is permitted without written       ////
    //// permission.  Derivative programs created using this software    ////
    //// in object code form are not restricted in any way.              ////
    /////////////////////////////////////////////////////////////////////////
    
    #define CRC_16    0x8005      //bit pattern (1)1000 0000 0000 0101
    #define CRC_CCITT 0x1021      //bit pattern (1)0001 0000 0010 0001
    #define CRC_32    0x04C11DB7  //bit pattern (1)0000 0100 1100 0001 0001 1101 1011 0111
    
    
    int generate_8bit_crc(char* data, int16 length, int pattern)
    {
       int   *current_data;
       int   crc_byte;
       int16 byte_counter;
       int   bit_counter;
    
       current_data = data;
       crc_byte = *current_data++;
    
       for(byte_counter=0; byte_counter < (length-1); byte_counter++)
       {
          for(bit_counter=0; bit_counter < 8; bit_counter++)
          {
             if(!bit_test(crc_byte,7))
             {
                crc_byte <<= 1;
                bit_test(*current_data, 7 - bit_counter) ?
                   bit_set(crc_byte,0) : bit_clear(crc_byte,0);
                continue;
             }
             crc_byte <<= 1;
             bit_test(*current_data, 7 - bit_counter) ?
                bit_set(crc_byte,0) : bit_clear(crc_byte,0);
             crc_byte ^= pattern;
          }
          current_data++;
       }
       for(bit_counter=0; bit_counter < 8; bit_counter++)
       {
          if(!bit_test(crc_byte,7))
          {
             crc_byte <<= 1;
             continue;
          }
          crc_byte <<= 1;
          crc_byte ^= pattern;
       }
       return crc_byte;
    }
    
    
    int16 generate_16bit_crc(char* data, int16 length, int16 pattern)
    {
       int   *current_data;
       int16 crc_Dbyte;
       int16 byte_counter;
       int   bit_counter;
    
       current_data = data + 2;
       crc_Dbyte =  make16(data[0], data[1]);
    
       for(byte_counter=0; byte_counter < (length-2); byte_counter++)
       {
          for(bit_counter=0; bit_counter < 8; bit_counter++)
          {
             if(!bit_test(crc_Dbyte,15))
             {
                crc_Dbyte <<= 1;
                bit_test(*current_data, 7 - bit_counter) ?
                   bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
                continue;
             }
             crc_Dbyte <<= 1;
             bit_test(*current_data, 7 - bit_counter) ?
                bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
             crc_Dbyte ^= pattern;
          }
          current_data++;
       }
    
       for(bit_counter=0; bit_counter < 16; bit_counter++)
       {
          if(!bit_test(crc_Dbyte,15))
          {
             crc_Dbyte <<= 1;
             continue;
          }
          crc_Dbyte <<= 1;
          crc_Dbyte ^= pattern;
       }
    
       return crc_Dbyte;
    }
    
    int32 generate_32bit_crc(char* data, int16 length, int32 pattern)
    {
       int   *current_data;
       int32 crc_Dbyte;
       int16 byte_counter;
       int   bit_counter;
    
       current_data = data + 4;
       crc_Dbyte =  make32(data[0], data[1], data[2], data[3]);
    
       for(byte_counter=0; byte_counter < (length-4); byte_counter++)
       {
          for(bit_counter=0; bit_counter < 8; bit_counter++)
          {
             if(!bit_test(crc_Dbyte,31))
             {
             crc_Dbyte <<= 1;
             bit_test(*current_data, 7 - bit_counter) ?
                bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
                continue;
             }
             crc_Dbyte <<= 1;
             bit_test(*current_data, 7 - bit_counter) ?
                bit_set(crc_Dbyte,0) : bit_clear(crc_Dbyte,0);
             crc_Dbyte ^= pattern;
          }
          current_data++;
       }
    
       for(bit_counter=0; bit_counter < 32; bit_counter++)
       {
          if(!bit_test(crc_Dbyte,31))
          {
             crc_Dbyte <<= 1;
             continue;
          }
          crc_Dbyte <<= 1;
          crc_Dbyte ^= pattern;
       }
    
       return crc_Dbyte;
    }
    (j'espere que ça vous aide, vous pouvez trouver des autres exemples et des fonctions qui peut vous aider dans le site de microchip)

    NB: je sais que je dois envoyer le code en une piece attachée, mais je ne sais pas comment

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Recherche d’un algorithme
    Par invite619074ae dans le forum Archives
    Réponses: 0
    Dernier message: 29/10/2007, 19h24
  2. algorithme
    Par inviteb0f7be7e dans le forum Mathématiques du supérieur
    Réponses: 15
    Dernier message: 29/10/2007, 18h06
  3. algorithme
    Par invite56f88dc9 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 30/11/2006, 18h14
  4. algorithme
    Par inviteac13aab3 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 25/06/2006, 16h29
  5. Algorithme
    Par invite3c81b085 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 26/02/2006, 18h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...