CNAOB-Communications-Protocol-Notes
CRC CheckSum Algorithm
- CRC calculation source code in VB - ModBus-CRC-Local-Version-routine-v1
- link title - ModBus-CRC-Local-Version-routine-2
16-bit CRC verification code
Only 8 data bits are involved in CRC calculation, with the exclusion of start bit and end bit.
Algorithm of CRC code:
- 1) Presetting a 16-bit register to hex FFFF (namely 1 for all bits in binary system). The register is called CRC register
- 2) XORing the first byte of the communication message frame with the low 8-bit of 16-bit CRC register.....then storing the result in CRC register
- 3) Right-shifting the register data by one bit (towards lower bit) and filling the highest bit with 0, then checking the shift-out bit
- 4) If the shift-out bit is 0, repeat step 3 (right-shifting one more bit);
If the shift-out bit is 1, XOR the CRC register data with polynomial A001 (1010 0000 0000 0001) = A001
- 5) Repeating step 3 and step 4 until all of the 8-bit data have been processed after 8 right-shift operations;
- 6) Repeating step 2 to step 5 to process the next byte of the communication message frame;
- 7) When calculation procedures of the first 5 bytes in the communication message frame are completed, the 16-bit CRC verification
code will be generated in the 16-bit CRC register.
Example Calculations: 1, 06, 40, 03,E8, 18, 22 Hex
- 1111111111111111 CRC
- 0000000000000001 Data 1
- ---------------- XOR
- 1111111111111110 CRC
- 0111111111111111 CRC after right shift / shifted bit = 0
- 0011111111111111 CRC after right shift / shifted bit = 1
- 1010000000000001 polynomial
- ---------------- XOR
- 1001111111111110 CRC
keep doing till 8 shifts accomplished