Skip to main content
CRC Calc

CRC-8 / OPENSAFETY

Width8-bitRefInNoRefOutNo

Need custom parameters? Open in full calculator

Standard test string

Result

0x3E

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

0x000x2F0x5E0x710xBC0x930xE20xCD0x570x780x090x260xEB0xC40xB50x9A
0xAE0x810xF00xDF0x120x3D0x4C0x630xF90xD60xA70x880x450x6A0x1B0x34
0x730x5C0x2D0x020xCF0xE00x910xBE0x240x0B0x7A0x550x980xB70xC60xE9
0xDD0xF20x830xAC0x610x4E0x3F0x100x8A0xA50xD40xFB0x360x190x680x47
0xE60xC90xB80x970x5A0x750x040x2B0xB10x9E0xEF0xC00x0D0x220x530x7C
0x480x670x160x390xF40xDB0xAA0x850x1F0x300x410x6E0xA30x8C0xFD0xD2
0x950xBA0xCB0xE40x290x060x770x580xC20xED0x9C0xB30x7E0x510x200x0F
0x3B0x140x650x4A0x870xA80xD90xF60x6C0x430x320x1D0xD00xFF0x8E0xA1
0xE30xCC0xBD0x920x5F0x700x010x2E0xB40x9B0xEA0xC50x080x270x560x79
0x4D0x620x130x3C0xF10xDE0xAF0x800x1A0x350x440x6B0xA60x890xF80xD7
0x900xBF0xCE0xE10x2C0x030x720x5D0xC70xE80x990xB60x7B0x540x250x0A
0x3E0x110x600x4F0x820xAD0xDC0xF30x690x460x370x180xD50xFA0x8B0xA4
0x050x2A0x5B0x740xB90x960xE70xC80x520x7D0x0C0x230xEE0xC10xB00x9F
0xAB0x840xF50xDA0x170x380x490x660xFC0xD30xA20x8D0x400x6F0x1E0x31
0x760x590x280x070xCA0xE50x940xBB0x210x0E0x7F0x500x9D0xB20xC30xEC
0xD80xF70x860xA90x640x4B0x3A0x150x8F0xA00xD10xFE0x330x1C0x6D0x42

CRC Source Code

/* 
 * Model: CRC-8 / OPENSAFETY (8-bit)
 * Poly: 0x2F, Init: 0x00, XorOut: 0x00
 * CRC Table C Source Code & Lookup Table Generator
 */
#include <stdint.h>
#include <stddef.h>

const uint8_t crc_table[256] = {
  0x00, 0x2F, 0x5E, 0x71, 0xBC, 0x93, 0xE2, 0xCD, 
  0x57, 0x78, 0x09, 0x26, 0xEB, 0xC4, 0xB5, 0x9A, 
  0xAE, 0x81, 0xF0, 0xDF, 0x12, 0x3D, 0x4C, 0x63, 
  0xF9, 0xD6, 0xA7, 0x88, 0x45, 0x6A, 0x1B, 0x34, 
  0x73, 0x5C, 0x2D, 0x02, 0xCF, 0xE0, 0x91, 0xBE, 
  0x24, 0x0B, 0x7A, 0x55, 0x98, 0xB7, 0xC6, 0xE9, 
  0xDD, 0xF2, 0x83, 0xAC, 0x61, 0x4E, 0x3F, 0x10, 
  0x8A, 0xA5, 0xD4, 0xFB, 0x36, 0x19, 0x68, 0x47, 
  0xE6, 0xC9, 0xB8, 0x97, 0x5A, 0x75, 0x04, 0x2B, 
  0xB1, 0x9E, 0xEF, 0xC0, 0x0D, 0x22, 0x53, 0x7C, 
  0x48, 0x67, 0x16, 0x39, 0xF4, 0xDB, 0xAA, 0x85, 
  0x1F, 0x30, 0x41, 0x6E, 0xA3, 0x8C, 0xFD, 0xD2, 
  0x95, 0xBA, 0xCB, 0xE4, 0x29, 0x06, 0x77, 0x58, 
  0xC2, 0xED, 0x9C, 0xB3, 0x7E, 0x51, 0x20, 0x0F, 
  0x3B, 0x14, 0x65, 0x4A, 0x87, 0xA8, 0xD9, 0xF6, 
  0x6C, 0x43, 0x32, 0x1D, 0xD0, 0xFF, 0x8E, 0xA1, 
  0xE3, 0xCC, 0xBD, 0x92, 0x5F, 0x70, 0x01, 0x2E, 
  0xB4, 0x9B, 0xEA, 0xC5, 0x08, 0x27, 0x56, 0x79, 
  0x4D, 0x62, 0x13, 0x3C, 0xF1, 0xDE, 0xAF, 0x80, 
  0x1A, 0x35, 0x44, 0x6B, 0xA6, 0x89, 0xF8, 0xD7, 
  0x90, 0xBF, 0xCE, 0xE1, 0x2C, 0x03, 0x72, 0x5D, 
  0xC7, 0xE8, 0x99, 0xB6, 0x7B, 0x54, 0x25, 0x0A, 
  0x3E, 0x11, 0x60, 0x4F, 0x82, 0xAD, 0xDC, 0xF3, 
  0x69, 0x46, 0x37, 0x18, 0xD5, 0xFA, 0x8B, 0xA4, 
  0x05, 0x2A, 0x5B, 0x74, 0xB9, 0x96, 0xE7, 0xC8, 
  0x52, 0x7D, 0x0C, 0x23, 0xEE, 0xC1, 0xB0, 0x9F, 
  0xAB, 0x84, 0xF5, 0xDA, 0x17, 0x38, 0x49, 0x66, 
  0xFC, 0xD3, 0xA2, 0x8D, 0x40, 0x6F, 0x1E, 0x31, 
  0x76, 0x59, 0x28, 0x07, 0xCA, 0xE5, 0x94, 0xBB, 
  0x21, 0x0E, 0x7F, 0x50, 0x9D, 0xB2, 0xC3, 0xEC, 
  0xD8, 0xF7, 0x86, 0xA9, 0x64, 0x4B, 0x3A, 0x15, 
  0x8F, 0xA0, 0xD1, 0xFE, 0x33, 0x1C, 0x6D, 0x42
};

uint8_t calculate_crc(const uint8_t *data, size_t length) {
    uint8_t crc = 0x00;
    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 >> 0) ^ data[i]);
        crc = (crc << 8) ^ crc_table[idx];
        #endif
    }
    return crc ^ 0x00;
}

About CRC-8/OPENSAFETY

CRC-8/OPENSAFETY is used in openSAFETY communication profiles.

CRC-8/OPENSAFETY is a 8-bit CRC model defined by polynomial 0x2F, an initial register value of 0x00, and final XOR 0x00. It uses normal, non-reflected input and output processing.

Documented application context for this model includes openSAFETY, Industrial safety, 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
0x3E
Residue
0x00

Model characteristics

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

Bit order
Normal
Register start
0x00
Final XOR
0x00
Published check
0x3E

Implementation checks for CRC-8/OPENSAFETY

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

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

Complete CRC-8/OPENSAFETY parameters

CRC parameter guide
ParameterValueMeaningReference
Width8 bitsCRC register and result widthRead guide
Poly0x2FGenerator polynomial without the leading termRead guide
Init0x00Initial CRC register valueRead guide
RefInNoReflect each input byte before processingRead guide
RefOutNoReflect the register before XOR OutRead guide
XorOut0x00Final value XORed with the CRC registerRead guide
Check0x3ECRC of ASCII “123456789”Read guide
Residue0x00Expected residue after appending a valid CRCRead guide
AliasesopenSAFETY CRC-8

Where CRC-8/OPENSAFETY is used

  • 01openSAFETY
  • 02Industrial safety
  • 03Fieldbus

CRC-8/OPENSAFETY FAQ

What is the check value for CRC-8/OPENSAFETY?

For the standard ASCII test input 123456789, the check value of CRC-8/OPENSAFETY is 0x3E.

What polynomial does CRC-8/OPENSAFETY use?

CRC-8/OPENSAFETY uses the 8-bit polynomial 0x2F.

Does CRC-8/OPENSAFETY use reflected input and output?

For CRC-8/OPENSAFETY, RefIn is No and RefOut is No.

What is CRC-8/OPENSAFETY commonly confused with?

CRC-8/AUTOSAR uses the same polynomial (0x2F), which is the usual source of mix-ups — matching the polynomial alone does not reproduce CRC-8/OPENSAFETY. The two models differ in initial value and final XOR value, so a port from one to the other needs those fields checked explicitly, not just the poly.