Skip to main content
CRC Calc

CRC-16 / PROFIBUS

Width16-bitRefInNoRefOutNo

Need custom parameters? Open in full calculator

Standard test string

Result

0xA819

Similar CRC Algorithms

Result is calculated from the current input. Check is the published verification value for the standard input 123456789. Click another algorithm to view its detail page.

CRC Lookup Table

0x00000x1DCF0x3B9E0x26510x773C0x6AF30x4CA20x516D0xEE780xF3B70xD5E60xC8290x99440x848B0xA2DA0xBF15
0xC13F0xDCF00xFAA10xE76E0xB6030xABCC0x8D9D0x90520x2F470x32880x14D90x09160x587B0x45B40x63E50x7E2A
0x9FB10x827E0xA42F0xB9E00xE88D0xF5420xD3130xCEDC0x71C90x6C060x4A570x57980x06F50x1B3A0x3D6B0x20A4
0x5E8E0x43410x65100x78DF0x29B20x347D0x122C0x0FE30xB0F60xAD390x8B680x96A70xC7CA0xDA050xFC540xE19B
0x22AD0x3F620x19330x04FC0x55910x485E0x6E0F0x73C00xCCD50xD11A0xF74B0xEA840xBBE90xA6260x80770x9DB8
0xE3920xFE5D0xD80C0xC5C30x94AE0x89610xAF300xB2FF0x0DEA0x10250x36740x2BBB0x7AD60x67190x41480x5C87
0xBD1C0xA0D30x86820x9B4D0xCA200xD7EF0xF1BE0xEC710x53640x4EAB0x68FA0x75350x24580x39970x1FC60x0209
0x7C230x61EC0x47BD0x5A720x0B1F0x16D00x30810x2D4E0x925B0x8F940xA9C50xB40A0xE5670xF8A80xDEF90xC336
0x455A0x58950x7EC40x630B0x32660x2FA90x09F80x14370xAB220xB6ED0x90BC0x8D730xDC1E0xC1D10xE7800xFA4F
0x84650x99AA0xBFFB0xA2340xF3590xEE960xC8C70xD5080x6A1D0x77D20x51830x4C4C0x1D210x00EE0x26BF0x3B70
0xDAEB0xC7240xE1750xFCBA0xADD70xB0180x96490x8B860x34930x295C0x0F0D0x12C20x43AF0x5E600x78310x65FE
0x1BD40x061B0x204A0x3D850x6CE80x71270x57760x4AB90xF5AC0xE8630xCE320xD3FD0x82900x9F5F0xB90E0xA4C1
0x67F70x7A380x5C690x41A60x10CB0x0D040x2B550x369A0x898F0x94400xB2110xAFDE0xFEB30xE37C0xC52D0xD8E2
0xA6C80xBB070x9D560x80990xD1F40xCC3B0xEA6A0xF7A50x48B00x557F0x732E0x6EE10x3F8C0x22430x04120x19DD
0xF8460xE5890xC3D80xDE170x8F7A0x92B50xB4E40xA92B0x163E0x0BF10x2DA00x306F0x61020x7CCD0x5A9C0x4753
0x39790x24B60x02E70x1F280x4E450x538A0x75DB0x68140xD7010xCACE0xEC9F0xF1500xA03D0xBDF20x9BA30x866C

CRC Source Code

/* 
 * Model: CRC-16 / PROFIBUS (16-bit)
 * Poly: 0x1DCF, Init: 0xFFFF, XorOut: 0xFFFF
 * CRC Table C Source Code & Lookup Table Generator
 */
#include <stdint.h>
#include <stddef.h>

const uint16_t crc_table[256] = {
  0x0000, 0x1DCF, 0x3B9E, 0x2651, 0x773C, 0x6AF3, 0x4CA2, 0x516D, 
  0xEE78, 0xF3B7, 0xD5E6, 0xC829, 0x9944, 0x848B, 0xA2DA, 0xBF15, 
  0xC13F, 0xDCF0, 0xFAA1, 0xE76E, 0xB603, 0xABCC, 0x8D9D, 0x9052, 
  0x2F47, 0x3288, 0x14D9, 0x0916, 0x587B, 0x45B4, 0x63E5, 0x7E2A, 
  0x9FB1, 0x827E, 0xA42F, 0xB9E0, 0xE88D, 0xF542, 0xD313, 0xCEDC, 
  0x71C9, 0x6C06, 0x4A57, 0x5798, 0x06F5, 0x1B3A, 0x3D6B, 0x20A4, 
  0x5E8E, 0x4341, 0x6510, 0x78DF, 0x29B2, 0x347D, 0x122C, 0x0FE3, 
  0xB0F6, 0xAD39, 0x8B68, 0x96A7, 0xC7CA, 0xDA05, 0xFC54, 0xE19B, 
  0x22AD, 0x3F62, 0x1933, 0x04FC, 0x5591, 0x485E, 0x6E0F, 0x73C0, 
  0xCCD5, 0xD11A, 0xF74B, 0xEA84, 0xBBE9, 0xA626, 0x8077, 0x9DB8, 
  0xE392, 0xFE5D, 0xD80C, 0xC5C3, 0x94AE, 0x8961, 0xAF30, 0xB2FF, 
  0x0DEA, 0x1025, 0x3674, 0x2BBB, 0x7AD6, 0x6719, 0x4148, 0x5C87, 
  0xBD1C, 0xA0D3, 0x8682, 0x9B4D, 0xCA20, 0xD7EF, 0xF1BE, 0xEC71, 
  0x5364, 0x4EAB, 0x68FA, 0x7535, 0x2458, 0x3997, 0x1FC6, 0x0209, 
  0x7C23, 0x61EC, 0x47BD, 0x5A72, 0x0B1F, 0x16D0, 0x3081, 0x2D4E, 
  0x925B, 0x8F94, 0xA9C5, 0xB40A, 0xE567, 0xF8A8, 0xDEF9, 0xC336, 
  0x455A, 0x5895, 0x7EC4, 0x630B, 0x3266, 0x2FA9, 0x09F8, 0x1437, 
  0xAB22, 0xB6ED, 0x90BC, 0x8D73, 0xDC1E, 0xC1D1, 0xE780, 0xFA4F, 
  0x8465, 0x99AA, 0xBFFB, 0xA234, 0xF359, 0xEE96, 0xC8C7, 0xD508, 
  0x6A1D, 0x77D2, 0x5183, 0x4C4C, 0x1D21, 0x00EE, 0x26BF, 0x3B70, 
  0xDAEB, 0xC724, 0xE175, 0xFCBA, 0xADD7, 0xB018, 0x9649, 0x8B86, 
  0x3493, 0x295C, 0x0F0D, 0x12C2, 0x43AF, 0x5E60, 0x7831, 0x65FE, 
  0x1BD4, 0x061B, 0x204A, 0x3D85, 0x6CE8, 0x7127, 0x5776, 0x4AB9, 
  0xF5AC, 0xE863, 0xCE32, 0xD3FD, 0x8290, 0x9F5F, 0xB90E, 0xA4C1, 
  0x67F7, 0x7A38, 0x5C69, 0x41A6, 0x10CB, 0x0D04, 0x2B55, 0x369A, 
  0x898F, 0x9440, 0xB211, 0xAFDE, 0xFEB3, 0xE37C, 0xC52D, 0xD8E2, 
  0xA6C8, 0xBB07, 0x9D56, 0x8099, 0xD1F4, 0xCC3B, 0xEA6A, 0xF7A5, 
  0x48B0, 0x557F, 0x732E, 0x6EE1, 0x3F8C, 0x2243, 0x0412, 0x19DD, 
  0xF846, 0xE589, 0xC3D8, 0xDE17, 0x8F7A, 0x92B5, 0xB4E4, 0xA92B, 
  0x163E, 0x0BF1, 0x2DA0, 0x306F, 0x6102, 0x7CCD, 0x5A9C, 0x4753, 
  0x3979, 0x24B6, 0x02E7, 0x1F28, 0x4E45, 0x538A, 0x75DB, 0x6814, 
  0xD701, 0xCACE, 0xEC9F, 0xF150, 0xA03D, 0xBDF2, 0x9BA3, 0x866C
};

uint16_t calculate_crc(const uint8_t *data, size_t length) {
    uint16_t crc = 0xFFFF;
    for (size_t i = 0; i < length; i++) {
        #if 0
        uint8_t idx = (uint8_t)(crc ^ data[i]);
        crc = (crc >> 8) ^ crc_table[idx];
        #else
        uint8_t idx = (uint8_t)((crc >> 8) ^ data[i]);
        crc = (crc << 8) ^ crc_table[idx];
        #endif
    }
    return crc ^ 0xFFFF;
}

About CRC-16/PROFIBUS

CRC-16/PROFIBUS is used by PROFIBUS industrial fieldbus networks.

CRC-16/PROFIBUS is a 16-bit CRC model defined by polynomial 0x1DCF, an initial register value of 0xFFFF, and final XOR 0xFFFF. It uses normal, non-reflected input and output processing.

Documented application context for this model includes PROFIBUS, Industrial automation, Fieldbus. The calculator above applies this exact parameter set to the current input; the published Check value below is instead the fixed verification result for ASCII 123456789.

Standard test vector

CRC implementations are commonly verified with the ASCII input 123456789.

Input format
ASCII
Input
123456789
Expected CRC
0xA819
Residue
0xE394

Model characteristics

A model is identified by its complete parameter set, not its polynomial alone.

Bit order
Normal
Register start
0xFFFF
Final XOR
0xFFFF
Published check
0xA819

Implementation checks for CRC-16/PROFIBUS

  • Use a 16-bit register and polynomial 0x1DCF.
  • Initialize the register to 0xFFFF and use XorOut 0xFFFF exactly as listed; changing either value defines a different model.
  • Verify the implementation with ASCII “123456789”; the expected result is 0xA819.

Continue with the main calculator, browse the algorithm catalog, compare models in the Algorithm Reference section, or generate a lookup table.

Complete CRC-16/PROFIBUS parameters

CRC parameter guide
ParameterValueMeaningReference
Width16 bitsCRC register and result widthRead guide
Poly0x1DCFGenerator polynomial without the leading termRead guide
Init0xFFFFInitial CRC register valueRead guide
RefInNoReflect each input byte before processingRead guide
RefOutNoReflect the register before XOR OutRead guide
XorOut0xFFFFFinal value XORed with the CRC registerRead guide
Check0xA819CRC of ASCII “123456789”Read guide
Residue0xE394Expected residue after appending a valid CRCRead guide
AliasesIEC 61158-2 CRC

Where CRC-16/PROFIBUS is used

  • 01PROFIBUS
  • 02Industrial automation
  • 03Fieldbus

CRC-16/PROFIBUS FAQ

What is the check value for CRC-16/PROFIBUS?

For the standard ASCII test input 123456789, the check value of CRC-16/PROFIBUS is 0xA819.

What polynomial does CRC-16/PROFIBUS use?

CRC-16/PROFIBUS uses the 16-bit polynomial 0x1DCF.

Does CRC-16/PROFIBUS use reflected input and output?

For CRC-16/PROFIBUS, RefIn is No and RefOut is No.

What is CRC-16/PROFIBUS commonly confused with?

The closest published model by parameter overlap is CRC-16/GENIBUS, differing from CRC-16/PROFIBUS in polynomial.