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:54] 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. Ces fonctions sont codée en assembleur et de type "inline" pour augmenter leur vitesse d'exécution.+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>
Line 15: 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 27: Line 27:
 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> </code>
-==== DOW CRC16 ====+=== DOW CRC16 ===
 Le CRC 16 bits est utilisés pour la lecture et l'écriture de la mémoire RAM.  Le CRC 16 bits est utilisés pour la lecture et l'écriture de la mémoire RAM. 
  
Line 33: Line 33:
 <code c> <code c>
 static __inline__ uint16_t _crc16_update (uint16_t __crc, uint8_t __data); 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>
avr/crc16.h.1379494469.txt.gz · Last modified: 2013/09/18 08:54 by sdolt