GMP231 uses a CRC16-CCITT checksum in its protocol frame. CCITT (x.25) polynomial is X16+X12+X5+1 = 11021hex. Initial value is FFFFhex and the final value is XORed with FFFFhex. The checksum uses a bit reversed algorithm.
When the invoke message is received, the checksum is calculated using bytes from the command byte to the last byte of the data field. The checksum needs to be valid before data can be accepted. If the checksum is not valid, the message is rejected and the internal state of the GMP231 is set to Idle.
When the response message is transmitted, the checksum is calculated using bytes from the status byte to the last byte of the data field.