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) |
From the maintainer: Understanding the Shop Floor — a practical companion to the systems behind these tools; also How to Remain Valuable When Intelligence Becomes Cheap — on staying valuable as AI and automation reshape engineering work.
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. Register data follows different rules: each register is sent high byte first, but a 32-bit float or counter spread across two registers has no standard word order — check it with the Modbus register decoder.
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
- Modbus register decoder & byte-order check — two registers to float32/int32/uint32 in ABCD, CDAB, BADC and DCBA, tested against known readings
- Tag-based addressing — Shopfloor glossary
Cite this page: Modbus RTU CRC & frame helper
, Shopfloor. https://shopfloorspace.yunusemrevurgun.com/tools/modbus-crc-frame/