Modbus RTU CRC & frame helper
Compute Modbus RTU CRC-16, append it to a frame, and convert between register numbers and protocol addresses.
CRC-16 (Modbus)
CRC 0xCDC5
| Frame | 01 03 00 00 00 0A |
|---|---|
| CRC on wire (low first) | C5 CD |
| Full frame | 01 03 00 00 00 0A C5 CD |
Address converter
| Documentation | 40001 — Holding register |
|---|---|
| Protocol address | 0 (0x0000) |
| Function codes | 03 (read) · 06/16 (write) |
Every Modbus RTU frame ends with a 16-bit CRC (polynomial 0xA001, init 0xFFFF), transmitted low byte first. If the CRC is wrong, the slave stays silent — there is no error reply, only a timeout. This tool computes the CRC for any frame you paste, so you can verify what your master sent or build test frames by hand.
The two classic mistakes
Byte order. The CRC goes on the wire low byte first. A frame ending … C5 CD carries CRC 0xCDC5. Swapping the bytes is the most common reason a hand-built frame gets no answer.
Off-by-one addressing. Documentation says "holding register 40001"; the protocol address in the frame is usually 0 (some vendors mean 1 — check the manual). The address converter below translates between documentation numbering (40001-style, 30001-style, 00001, 10001) and the protocol address with the matching function code.
Function code quick reference
- 01 read coils · 02 read discrete inputs · 03 read holding registers · 04 read input registers
- 05 write single coil · 06 write single register · 15 write multiple coils · 16 write multiple registers
See also
- Modbus RTU vs Modbus TCP: a practical guide
- Tag-based addressing — Shopfloor glossary
Cite this page: Modbus RTU CRC & frame helper
, Shopfloor. https://shopfloor.space/tools/modbus-crc-frame/