User Tools

Site Tools


avr:crc16.h

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
avr:crc16.h [2013/09/18 08:52] – Add DOW CRC8 sdoltavr:crc16.h [2013/09/18 09:10] (current) sdolt
Line 5: Line 5:
 ===== Utilisation sur microprocesseur AVR ===== ===== Utilisation sur microprocesseur AVR =====
  
-La bibliothèque standard avr-libc possède des fonctions permettant de calculer rapidement certain type de CRC grâce au fichier d'en-tête crc16.h.+La bibliothèque standard avr-libc possède des fonctions permettant de calculer rapidement certain type de CRC grâce au fichier d'en-tête crc16.h. Ces fonctions sont codées en assembleur pour augmenter leur vitesse d'exécution. 
 <code c> <code c>
 #include <util/crc16.h> #include <util/crc16.h>
Line 14: Line 15:
 ==== CRC pour OneWire ==== ==== CRC pour OneWire ====
  
-Le protocole OneWire utilise deux types de CRC, un sur 8 bits et l'autre sur 16 bits.+Le protocole OneWire utilise deux types de CRC, un sur 8 bits et l'autre sur 16 bits. Les deux types utilises une valeur initiale de 0.
  
-==== DOW CRC8 ====+=== DOW CRC8 ===
 Le CRC 8 bits est utilisés pour la lecture de la mémoire ROM. C'est mémoire de 8 octets contients 1 octets avec la famille du composant utilisé, 6 octets contenant un numéro de série unique et enfin un octets contenants le CRC des 7 octets précédents. Le CRC 8 bits est utilisés pour la lecture de la mémoire ROM. C'est mémoire de 8 octets contients 1 octets avec la famille du composant utilisé, 6 octets contenant un numéro de série unique et enfin un octets contenants le CRC des 7 octets précédents.
  
Line 24: Line 25:
 Pour ce cas, on peut utilisé la fonction _crc_ibutton_update dans le prototype est : Pour ce cas, on peut utilisé la fonction _crc_ibutton_update dans le prototype est :
 <code c> <code c>
-static __inline__ uint8_t  _crc_ibutton_update (uint8_t __crc, uint8_t __data);+static __inline__ uint8_t _crc_ibutton_update (uint8_t __crc, uint8_t __data); 
 +</code> 
 +=== DOW CRC16 === 
 +Le CRC 16 bits est utilisés pour la lecture et l'écriture de la mémoire RAM.  
 + 
 +Pour ce cas, on peut utilisé la fonction _crc16_update dans le prototype est : 
 +<code c> 
 +static __inline__ uint16_t _crc16_update (uint16_t __crc, uint8_t __data); 
 +</code> 
 + 
 +=== Exemple d'utilisation === 
 +Les exemples ci-dessous sont tirés de la documentation d'avr-libc 
 +== Calcul du CRC == 
 +<code c> 
 +    // Contenu des 7 premiers octets de la mémoire ROM, donc sans l'octet CRC 
 +    uint8_t serno[] = { 0x02, 0x1c, 0xb8, 0x01, 0, 0, 0 }; 
 + 
 +    uint8_t make_crc8(void) 
 +    { 
 +        uint8_t crc = 0 
 +        uint8_t i; 
 + 
 +        for (i = 0; i < sizeof serno / sizeof serno[0]; i++) 
 +            crc = _crc_ibutton_update(crc, serno[i]); 
 + 
 +        return crc; // Return 0xa2 
 +    } 
 +</code> 
 +== Vérification du CRC == 
 +<code c> 
 +    // Contenu des 8 octets de la mémoire ROM, donc avec l'octet CRC 
 +    uint8_t serno[] = { 0x02, 0x1c, 0xb8, 0x01, 0, 0, 0, 0xa2 }; 
 + 
 +    uint8_t check_crc8(void) 
 +    { 
 +        uint8_t crc = 0 
 +        uint8_t i; 
 + 
 +        for (i = 0; i < sizeof serno / sizeof serno[0]; i++) 
 +            crc = _crc_ibutton_update(crc, serno[i]); 
 + 
 +        return crc; // Return 0 is CRC is correct 
 +    }
 </code> </code>
-==== DOW CRC16 ==== 
avr/crc16.h.1379494328.txt.gz · Last modified: 2013/09/18 08:52 by sdolt