All calculators

Modbus RTU CRC Calculator & Checker

Append or verify CRC-16/MODBUS from hexadecimal bytes. See the expected low-byte-first trailer and corrected frame.

Enter your values

Try an example

Your result

Expected CRC bytesC5 CD
Payload + expected CRC
01 03 00 00 00 0A C5 CD

Calculated

Calculate the CRC over the payload, then send the low byte first
Modbus RTU CRC Calculator & CheckerPAYLOAD01030000000ACRC: LOW → HIGHC5 CD

How this answer is calculated

These steps use your current values. Change an input to follow a different calculation.

  1. 1

    Begin with the CRC register

    0xFFFF
  2. 2

    Process every payload byte

    01 03 00 00 00 0A → CRC16 (0xA001)
  3. 3

    Append the two CRC bytes

    C5 CD → 01 03 00 00 00 0A C5 CD

How to use this on a job

A CRC checks the bytes that were received. It does not tell you whether the address, function or register selection makes sense. Start with the exact capture, including its byte order, and separate those questions.

  1. 01

    Choose append for an address/function/data payload without CRC, or verify for a complete frame including its final two CRC bytes.

  2. 02

    Enter complete hex bytes, with optional spaces between them. Invalid characters and incomplete bytes are rejected so a mistyped capture cannot quietly become a different valid message.

  3. 03

    Compare the received trailer with the expected low byte followed by high byte. In verify mode, a failed check shows the expected frame for comparison; it does not repair or send the packet.

Work through one example

01 03 00 00 00 0A → C5 CD

The request payload 01 03 00 00 00 0A asks unit 1 for ten holding registers beginning at offset 0. Its CRC bytes are C5 CD. Paste the full eight-byte message into verify mode, then change one payload byte: the comparison should fail.

Before you trust the answer

Register data is normally high-byte first inside each Modbus register, but the RTU CRC trailer is low-byte first. Do not reverse an entire frame to fix a trailer. A matching CRC says nothing about serial timing, device address validity, legal payload lengths for a function or electrical signal quality.

Read ten holding registers starting at offset zero

BytesMeaningIncluded in CRC?
01Server addressYes
03Read holding registersYes
00 00Starting offsetYes
00 0AQuantity: tenYes
C5 CDCRC, low byte firstNo — this is the result

Questions that come up on the job

Do I include the old CRC when recalculating?

Use append mode for the bytes before the CRC. Use verify mode for the entire captured frame: it separates the last two bytes and compares them with a fresh calculation over the payload. Do not append a second CRC to an already complete frame.

Does a matching CRC prove the request is valid?

It proves that these bytes match this checksum. It does not check whether the register exists, the quantity is allowed, the server is correct or the serial timing is valid. A device can return an exception to a request with a perfectly correct CRC.

TRYPLC FIELD REFERENCE / 01

Modbus RTU CRC Calculator & Checker

Append or verify CRC-16/MODBUS from hexadecimal bytes. See the expected low-byte-first trailer and corrected frame.

  • Initial register: FFFF
  • Reflected polynomial: A001
  • Process each byte, then 8 right-shift steps
  • Transmit the CRC low byte first
  • RTU ADU: at most 256 bytes
Modbus RTU CRC Calculator & CheckerPAYLOAD01030000000ACRC: LOW → HIGHC5 CD

How to use this on a job

A CRC checks the bytes that were received. It does not tell you whether the address, function or register selection makes sense. Start with the exact capture, including its byte order, and separate those questions.

  1. 01

    Choose append for an address/function/data payload without CRC, or verify for a complete frame including its final two CRC bytes.

  2. 02

    Enter complete hex bytes, with optional spaces between them. Invalid characters and incomplete bytes are rejected so a mistyped capture cannot quietly become a different valid message.

  3. 03

    Compare the received trailer with the expected low byte followed by high byte. In verify mode, a failed check shows the expected frame for comparison; it does not repair or send the packet.

Work through one example

01 03 00 00 00 0A → C5 CD

The request payload 01 03 00 00 00 0A asks unit 1 for ten holding registers beginning at offset 0. Its CRC bytes are C5 CD. Paste the full eight-byte message into verify mode, then change one payload byte: the comparison should fail.

Before you trust the answer

Register data is normally high-byte first inside each Modbus register, but the RTU CRC trailer is low-byte first. Do not reverse an entire frame to fix a trailer. A matching CRC says nothing about serial timing, device address validity, legal payload lengths for a function or electrical signal quality.

https://tryplc.com/tools/modbus-rtu-crc