16-
4
750/760 Feeder Management Relay GE Power Management
16.3 MODBUS PROTOCOL 16 COMMUNICATIONS
16
16.3.3 CRC-16 ALGORITHM
The CRC-16 algorithm essentially treats the entire data stream (data bits only; start, stop and parity ignored)
as one continuous binary number. This number is first shifted left 16 bits and then divided by a characteristic
polynomial (11000000000000101B). The 16 bit remainder of the division is appended to the end of the packet,
MSByte first. The resulting packet including CRC, when divided by the same polynomial at the receiver will
give a zero remainder if no transmission errors have occurred. This algorithm requires the characteristic poly-
nomial to be reverse bit ordered. The most significant bit of the characteristic polynomial is dropped, since it
does not affect the value of the remainder.
Note: A C programming language implementation of the CRC algorithm will be provided upon request.
Symbols: -->
data transfer
A
16 bit working register
A
low
low order byte of A
A
high
high order byte of A
CRC
16 bit CRC-16 result
i,j
loop counters
(+)
logical EXCLUSIVE-OR operator
N
total number of data bytes
D
i
i-th data byte (i = 0 to N-1)
G
16 bit characteristic polynomial = 1010000000000001 (binary) with MSbit dropped
and bit order reversed
shr (x)
right shift operator (the LSbit of x is shifted into a carry flag, a '0' is shifted into the
MSbit of x, all other bits are shifted right one location)
Algorithm:
1. FFFF (hex) --> A
2. 0 --> i
3. 0 --> j
4. D
i
(+) A
low
--> A
low
5. j + 1 --> j
6. shr (A)
7. Is there a carry? No: go to step 8.
Yes: G (+) A --> A and continue.
8. Is j = 8? No: go to 5.
Yes: continue.
9. i + 1 --> i
10. Is i = N? No: go to 3.
Yes: continue.
11. A --> CRC