Re: CCITT-CRC16 in kernel

From: Kyle Moffett
Date: Thu Aug 11 2005 - 11:23:56 EST


On Aug 11, 2005, at 11:19:59, linux-os (Dick Johnson) wrote:
On Thu, 11 Aug 2005 linux@xxxxxxxxxxx wrote:
You're wrong in two ways:
1) You've got CRC-16 and CRC-CCITT mixed up, and
2) You've got the bit ordering backwards. Remember, I said very clearly,
the lsbit is the first bit, and the first bit is the highest power
of x. You can reverse the convention and still have a CRC, but that's
not the way it's usually done and it's more awkward in software.

CRC-CCITT = X^16 + X^12 + X^5 + X^0 = 0x8408, and NOT 0x1021
CRC-16 = X^16 + X^15 + X^2 + X^0 = 0xa001, and NOT 0x8005

Thank you very much for your time, but what you say is completely
different than anything else I have found on the net.

Do the math:

2^ 16 = 65536
2^ 12 = 4096
2^ 5 = 32
2^ 0 = 1
----------------------
69655 = 0x11021

No, it's like this: first, the 16 term is ignored, then:

2^ ( 15 - 12 ) = 2^ 3 = 8 = 0x0008
2^ ( 15 - 5 ) = 2^ 10 = 1024 = 0x0400
2^ ( 15 - 0 ) = 2^ 15 = 32768 = 0x8000
-----------------------------------------------
= 0x8408

This has 2 things:
1) The least-significant bit is the first bit
2) The first bit is the _highest_ power of X.

Cheers,
Kyle Moffett

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCM/CS/IT/U d- s++: a18 C++++>$ UB/L/X/*++++(+)>$ P+++(++++)>$ L++++(+ ++) E
W++(+) N+++(++) o? K? w--- O? M++ V? PS+() PE+(-) Y+ PGP+++ t+(+++) 5 X R?
tv-(--) b++++(++) DI+ D+ G e->++++$ h!*()>++$ r !y?(-)
------END GEEK CODE BLOCK------


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/