6-4
6.1.4 CRC
CRC Check: CRC code covers the content from node address to DATA. Please calculate it according to the following
methods.
(1) Load a 16-bit register with FFFF hex (all1’s). Call this CRC register.
(2) Exclusive OR the first 8-bit byte of the message, the low-order byte of the 16-bit CRC register, putting the result in
the CRC register.
(3) Shift the CRC register one bit to the right (toward the LSB), Zero-filling the MSB. Extract and examine the LSB.
(4) (If the LSB was 0): Repeat Steps (3) (another shift)
(If the LSB was 1): Exclusive OR the CRC register with the polynomial value A001 hex (1010 0000 0000 0001),
putting the result in CRC register.
(5) Repeat Steps (3) and (4) until 8 shifts been performed. When this is done, a complete 8-bit byte will be
processed.
(6) Repeat Steps (2) through (5) for next 8-bit byte of the message, Continue doing this until all bytes have been
processed. The final content in the CRC register is the CRC value. When sending the CRC value, the Low-order
byte should be sent first, then the High-order byte. For example, CRC value: 1241 Hex, the high-order byte
should be set to 41hex and low-order byte 12hex.
CRC calculate program (C language):
UWORD ch_sum ( UBYTE long , UBYTE *rxdbuff )
{
BYTE i = 0;
UWORD wkg = 0xFFFF;
while ( long-- ) {
wkg ^= +;
for ( i = 0 ; i < 8; i++ ) {
if ( wkg & 0x0001 ) {
wkg = ( wkg >> 1 ) ^ 0xa001;
}
else {
wkg = wkg >> 1;
}
}
}
return( wkg );
}
ASCII Mode
STX
‘:’
Address
‘0’
‘1’
Function
‘8’
‘6’
Exception
code
‘5’
‘1’
LRC Check
‘2’
‘8’
END
‘CR’
‘LF’
RTU Mode
Node Address
02H
Function
83H
Exception code
52H
CRC-16
High
C0H
Low
CDH
During a communication error the drive will respond with an Exception Code and send a message back to the main
system consisting of a Function Code that is “ANDED (and 80h)” with 80 Hex.
Exception code
Content
1
Function code error
2
Register number error
3
Number error
4
DATA setting error
5
Write mode error