CRC iButton'a

ëÁÔÅÇÏÒÉÞÅÓËÉ ÐÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Õ×ÁÖÁÅÍÙÊ All! çÏÓÐÏÄÁ, pÁÓÛÉÆpÕÊÔÅ ÍÎÅ ÐÌÉÚ ÁÌÇÏpÉÔÍ ÐÏÄÓÞÅÔÁ CRC Õ ÜÔÏÇÏ iButton'a. ÷ÓÀ ÇÏÌÏ×Õ ÓÌÏÍÁÌ ÕÖÅ. íÎÅ ÎÁ á÷ò ÎÁÄÏ. ðÅpÅÐÉÓÁÌ Ó 51ÇÏ, ÆÉÇ pÁÂÏÔÁÅÔ, × ÔÏÍ ÓÍÙÓÌÅ, ÞÔÏ ÎÅ ÎÏÌØ × ÓÕÍÍÅ.

Valentin

[ÒÅËÌÁÍÁ->... ' ÷ÔÏpÏÊ ÄÕÂÌÉËÁÔ ËÌÀÞÁ ÂÅÓÐÌÁÔÎÏ! é ÎÅÚÁÍÅÔÎÏ ÏÔ ÚÁËÁÚÞÉËÁ... '
Reply to
Valentin Monokonoff
Loading thread data ...

Hello, Valentin! You wrote to All on Wed, 14 Sep 2005 23:05:20 +0400:

VM> çÏÓÐÏÄÁ, pÁÓÛÉÆpÕÊÔÅ ÍÎÅ ÐÌÉÚ ÁÌÇÏpÉÔÍ ÐÏÄÓÞÅÔÁ CRC Õ ÜÔÏÇÏ iButton'a. ÷ÓÀ VM> ÇÏÌÏ×Õ ÓÌÏÍÁÌ ÕÖÅ. íÎÅ ÎÁ á÷ò ÎÁÄÏ. ðÅpÅÐÉÓÁÌ Ó 51ÇÏ, ÆÉÇ pÁÂÏÔÁÅÔ, × ÔÏÍ VM> ÓÍÙÓÌÅ, ÞÔÏ ÎÅ ÎÏÌØ × ÓÕÍÍÅ.

á ÞÅÇÏ ÔÁÍ ÒÁÓÛÉÆÒÏ×Ù×ÁÔØ? äÅÒÖÉ ÎÁ ãÅ (Data[0..7] - ÍÁÓÓÉ× ÐÒÉÎÑÔÙÈ ÄÁÎÎÙÈ)

char a=0; char b, z; //ÐÒÏ×ÅÒËÁ CRC for(z=0;z= 1; a |= 0x80; } else a >>= 1; temp >>= 1; } } if(a) { //ÎÅÐÒÁ×ÉÌØÎÙÊ CRC }

éÍÅÊ × ×ÉÄÕ, ÞÔÏ ÖÅÌÁÔÅÌØÎÏ ÅÝÅ ×ÅÓØ ÍÁÓÓÉ× ÎÁ ÒÁ×ÅÎÓÔ×Ï 0 ÐÒÏ×ÅÒÑÔØ, É ÏÔÂÒÁÓÙ×ÁÔØ, ÅÓÌÉ ÔÁË. éÂÏ × ÓÉÌÕ ÏÓÏÂÅÎÎÏÓÔÅÊ ÒÅÁÌÉÚÁÃÉÉ CRC ÏÔ Dallas ÐÏÌÎÏÓÔØÀ ÎÕÌÅ×ÏÊ ÍÁÓÓÉ× ÓÞÉÔÁÅÔÓÑ ×ÅÒÎÙÍ.

With best regards, Sergey Zabelin. E-mail: snipped-for-privacy@telemak.ru

Reply to
Sergey Zabelin
Reply to
Sergey Kosaretskiy
Reply to
Valentin Monokonoff
Reply to
Sergey Kosaretskiy

Hi Valentin!

14 ÓÅÎÔÑÂÒÑ 2005 23:05, Valentin Monokonoff ÐÉÓÁÌ All:

VM> ëÁÔÅÇÏÒÉÞÅÓËÉ ÐÒÉ×ÅÔÓÔ×ÕÀ ÷ÁÓ, Õ×ÁÖÁÅÍÙÊ All!

VM> çÏÓÐÏÄÁ, pÁÓÛÉÆpÕÊÔÅ ÍÎÅ ÐÌÉÚ ÁÌÇÏpÉÔÍ ÐÏÄÓÞÅÔÁ CRC Õ ÜÔÏÇÏ VM> iButton'a. ÷ÓÀ ÇÏÌÏ×Õ ÓÌÏÍÁÌ ÕÖÅ. íÎÅ ÎÁ á÷ò ÎÁÄÏ. ðÅpÅÐÉÓÁÌ Ó 51ÇÏ, VM> ÆÉÇ pÁÂÏÔÁÅÔ, × ÔÏÍ ÓÍÙÓÌÅ, ÞÔÏ ÎÅ ÎÏÌØ × ÓÕÍÍÅ.

#include "crc.h" unsigned char calculate_crc8(unsigned char* data_pointer, unsigned char number_of_bytes) { unsigned char temp1=0, bit_counter=0, feedback_bit=0, crc8_result=0;

while(number_of_bytes--) { temp1=(*(data_pointer++));

for(bit_counter=8; bit_counter; bit_counter--) { feedback_bit=(crc8_result & 0x01); crc8_result=(crc8_result >> 1); if(feedback_bit ^ (temp1 & 0x01)) { crc8_result=(crc8_result ^ 0x8c); } temp1=(temp1 >> 1); }

}

return(crc8_result); }

/* crc array from the Maxim ApNote

*/

const unsigned char crc_array[256] = {

0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41, 0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9, 0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8, 0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35, };

unsigned char crc8_table (unsigned char *pData, int count, unsigned char crc) { while (count--) { crc = crc_array[*pData ^ crc]; pData++; } return crc; } unsigned char crc8_table_byte (unsigned char data, unsigned char crc) { return crc_array [data ^ crc]; } Bye Valentin! ... á ÔÙ ×ÏÓÐÏÌØÚÏ×ÁÌÓÑ ÐÁËÅÔÏÍ FTN?

Reply to
Alexy Gorbach
Reply to
Dimmy Timchenko

Hello, Dimmy Timchenko! You wrote in conference fido7.ru.embedded to Alexy Gorbach on Tue, 11 Oct 2005 05:16:17

+0400:

DT> Кстати, о стиле...

AG>> for(bit_counter=8; bit_counter; bit_counter--)

DT> Я б обязательно написал bit_counter > 0;

Какая разница?

AG>> crc8_result=(crc8_result >> 1);

DT> А здесь как раз хорошо подходит "операция присваивания":

DT> crc8_result >>= 1;

Ага.

dima

formatting link

Reply to
Dmitry Orlov
Reply to
Alexey V Bugrov
Reply to
Dimmy Timchenko

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.