

#1




Strange CRC.
Hi,
I try to identify a serial protocol for some devices. The transmitted strings are in this form (example): 0180007A0405 the last 2 digit are the checksum modulo 256 (100h) of the previous digits as ascii characters (hex): 0=30+ 1=31+ 8=38+ 0=30+ 0=30+ 0=30+ 7=37+ A=41+ 0=30+ 4=34 summ = 205 CRC= 205 mod 100 = 05 the bytes 7A and 04 are another checksum (BCC) for the digits before those bytes (01 80 00). This is the only description I've found about this check:  Each message contains a Block Check Sum word BCC, composed by two bytes ordered as BCC1 & BCC2 which are calculated, using one's complement arithmetic (a carry resulting from a two byte sum is added to the result), with the following procedure:  Initialize S1(0)=0 and S2(0)=0  Perform partial calculation using all message's N bytes B(n) starting form first byte B(1) S1(n) = S1(n1) + B(n) S2(n) = S2(n1) + S1(n)  Calculate checksum bytes as BCC1 =  (S1(N) + S2(N)) BCC2 = S2(N)  I've followed the above steps but the results are always wrong... Any suggestions, please ? Thanks in advance. 
#2




See Wikipedia for one's complement (http://en.wikipedia.org/wiki/Signed_....27_complement)
Here's how it gets calculated: Code:
index  00  01  02  03  b(x)  ..  01  80  00 s1(x)  00  01  81  81 s2(x)  00  01  82  04 (*1) bcc1 = ~(81+4) = ~85 = 7A (*2) bcc2 = 04 *1) 0x81 + 0x82 = 0x103 = 4 ("a carry resulting from a two byte sum is added to the result") *2) one's complement to 85 is 7A. Its not the same as minus sign in ordinary arithmetics. Have a nice day, kao. 
#3




Thank you very much kao!!!
My mistake was think at the "BCC" as the "CRC" (last byte) and operate with the ascii values (30,31,38,30,...) instead the simple bytes. Regards. 