onewire 1-wire ds18x20 ds2450 multi-channel

Dependents:   ibutton

Committer:
fblanc
Date:
Fri Mar 02 08:29:49 2012 +0000
Revision:
0:8c4e1841eb30
v1.1 onewire multi-channel

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fblanc 0:8c4e1841eb30 1 #include <inttypes.h>
fblanc 0:8c4e1841eb30 2 #include "mbed.h"
fblanc 0:8c4e1841eb30 3 #include "onewire.h"
fblanc 0:8c4e1841eb30 4
fblanc 0:8c4e1841eb30 5 #define CRC16INIT 0x0000
fblanc 0:8c4e1841eb30 6 //#define CRC16POLY 0x8005; // Polynome =x^16 + x^15 + x^2 + x^0 = 0x18005
fblanc 0:8c4e1841eb30 7 #define CRC16POLY 0xA001;
fblanc 0:8c4e1841eb30 8
fblanc 0:8c4e1841eb30 9 uint16_t crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:8c4e1841eb30 10 {
fblanc 0:8c4e1841eb30 11 uint16_t crc = CRC16INIT;
fblanc 0:8c4e1841eb30 12 int i, done = 0;
fblanc 0:8c4e1841eb30 13 uint8_t todo;
fblanc 0:8c4e1841eb30 14 if (nboctets != 0) {
fblanc 0:8c4e1841eb30 15 do {
fblanc 0:8c4e1841eb30 16 todo = octets[done];
fblanc 0:8c4e1841eb30 17 crc ^= todo;
fblanc 0:8c4e1841eb30 18 for (i = 0; i < 8; i++) {
fblanc 0:8c4e1841eb30 19 if (crc % 2 != 0) {
fblanc 0:8c4e1841eb30 20 crc = (crc >> 1) ^ CRC16POLY;
fblanc 0:8c4e1841eb30 21 } else {
fblanc 0:8c4e1841eb30 22 crc = crc >> 1;
fblanc 0:8c4e1841eb30 23 }
fblanc 0:8c4e1841eb30 24 }
fblanc 0:8c4e1841eb30 25 done++;
fblanc 0:8c4e1841eb30 26 } while (done < nboctets);
fblanc 0:8c4e1841eb30 27
fblanc 0:8c4e1841eb30 28
fblanc 0:8c4e1841eb30 29 }
fblanc 0:8c4e1841eb30 30
fblanc 0:8c4e1841eb30 31 return crc;
fblanc 0:8c4e1841eb30 32 }
fblanc 0:8c4e1841eb30 33 //CRC16 byte, always two bytes, bit inverted, LSByte first
fblanc 0:8c4e1841eb30 34 uint8_t ctrl_crc16(uint8_t* octets, uint16_t nboctets)
fblanc 0:8c4e1841eb30 35 {
fblanc 0:8c4e1841eb30 36 uint16_t crc;
fblanc 0:8c4e1841eb30 37 uint8_t *ptr;
fblanc 0:8c4e1841eb30 38 #ifdef DEBUG
fblanc 0:8c4e1841eb30 39 printf( "\nCRC16 : " );
fblanc 0:8c4e1841eb30 40 for ( uint8_t i=0 ; i< nboctets; i++ )
fblanc 0:8c4e1841eb30 41 printf(":%2.2X",octets[i]);
fblanc 0:8c4e1841eb30 42 printf( "\n" );
fblanc 0:8c4e1841eb30 43 #endif
fblanc 0:8c4e1841eb30 44 crc =~crc16(octets, nboctets-2);
fblanc 0:8c4e1841eb30 45 ptr=(uint8_t*)&crc;
fblanc 0:8c4e1841eb30 46 #ifdef DEBUG
fblanc 0:8c4e1841eb30 47 printf( "\n" );
fblanc 0:8c4e1841eb30 48 printf("CRC16:%X",crc);
fblanc 0:8c4e1841eb30 49 printf( "\n" );
fblanc 0:8c4e1841eb30 50 #endif
fblanc 0:8c4e1841eb30 51 if(*ptr==octets[nboctets-2])
fblanc 0:8c4e1841eb30 52 if(*++ptr==octets[nboctets-1])
fblanc 0:8c4e1841eb30 53 return 0;
fblanc 0:8c4e1841eb30 54
fblanc 0:8c4e1841eb30 55 return 1;
fblanc 0:8c4e1841eb30 56 }