avr:crc16.h
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
avr:crc16.h [2013/09/18 08:54] – sdolt | avr:crc16.h [2013/09/18 09:04] – sdolt | ||
---|---|---|---|
Line 15: | Line 15: | ||
==== CRC pour OneWire ==== | ==== CRC pour OneWire ==== | ||
- | Le protocole OneWire utilise deux types de CRC, un sur 8 bits et l' | + | Le protocole OneWire utilise deux types de CRC, un sur 8 bits et l' |
- | ==== 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); | ||
</ | </ | ||
- | ==== DOW CRC16 ==== | + | === DOW CRC16 === |
Le CRC 16 bits est utilisés pour la lecture et l' | Le CRC 16 bits est utilisés pour la lecture et l' | ||
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); | ||
+ | </ | ||
+ | |||
+ | === Exemple d' | ||
+ | Les exemples ci-dessous sont tirés de la documentation d' | ||
+ | == Calcul du CRC == | ||
+ | <code c> | ||
+ | // Contenu des 7 premiers octets de la mémoire ROM, donc sans l' | ||
+ | uint8_t serno[] = { 0x02, 0x1c, 0xb8, 0x01, 0, 0, 0 }; | ||
+ | |||
+ | uint8_t make_crc8(void) | ||
+ | { | ||
+ | uint8_t crc = 0, i; | ||
+ | |||
+ | for (i = 0; i < sizeof serno / sizeof serno[0]; i++) | ||
+ | crc = _crc_ibutton_update(crc, | ||
+ | |||
+ | return crc; // Return 0xa2 | ||
+ | } | ||
+ | </ | ||
+ | == Vérification du CRC == | ||
+ | <code c> | ||
+ | // Contenu des 8 octets de la mémoire ROM, donc avec l' | ||
+ | uint8_t serno[] = { 0x02, 0x1c, 0xb8, 0x01, 0, 0, 0, 0xa2 }; | ||
+ | |||
+ | uint8_t check_crc8(void) | ||
+ | { | ||
+ | uint8_t crc = 0, i; | ||
+ | |||
+ | for (i = 0; i < sizeof serno / sizeof serno[0]; i++) | ||
+ | crc = _crc_ibutton_update(crc, | ||
+ | |||
+ | return crc; // Return 0 is CRC is correct | ||
+ | } | ||
</ | </ |
avr/crc16.h.txt · Last modified: 2013/09/18 09:10 by sdolt