DatasheetQ Logo
Electronic component search and free download site. Transistors,MosFET ,Diode,Integrated circuits

LRI512 Просмотр технического описания (PDF) - STMicroelectronics

Номер в каталоге
Компоненты Описание
производитель
LRI512 Datasheet PDF : 54 Pages
First Prev 41 42 43 44 45 46 47 48 49 50 Next Last
LRI512
APPENDIX B
The CRC Error Detection Method
The Cyclic Redundancy Check (CRC) is calculat-
ed on all data contained in a message, from the
start of the Flags through to the end of Data. This
CRC is used from the VCD to the LRI512, and
from the LRI512 to the VCD.
Table 54. CRC Definition
CRC Type Length
ISO/IEC 13239 16 bits
CRC Definition
Polynomial
X16 + X12 + X5 + 1 = Ox8408
Direction
Backward
Preset
0xFFFF
Residue
0xF0B8
To add extra protection against shift errors, a fur-
ther transformation on the calculated CRC is
made. The One’s Complement of the calculated
CRC is the value attached to the message for
transmission.
For checking of received messages the two CRC
bytes are often also included in the re-calculation,
for ease of use. In this case, given the expected
value for the generated CRC is the residue of
F0B8h
CRC Calculation Example
This example in C language illustrates one method
of calculating the CRC on a given set of bytes
comprising a message.
C-Example to calculate or check the CRC16 according to ISO/IEC 13239
#define POLYNOMIAL0x8408// x^16 + x^12 + x^5 + 1
#define PRESET_VALUE0xFFFF
#define CHECK_VALUE0xF0B8
#define NUMBER_OF_BYTES4// Example: 4 data bytes
#define CALC_CRC1
#define CHECK_CRC0
void main()
{
unsigned int current_crc_value;
unsigned char array_of_databytes[NUMBER_OF_BYTES + 2] = {1, 2, 3, 4, 0x91, 0x39};
int
number_of_databytes = NUMBER_OF_BYTES;
int
calculate_or_check_crc;
int
i, j;
calculate_or_check_crc = CALC_CRC;
// calculate_or_check_crc = CHECK_CRC;// This could be an other example
if (calculate_or_check_crc == CALC_CRC)
{
number_of_databytes = NUMBER_OF_BYTES;
}
else // check CRC
{
number_of_databytes = NUMBER_OF_BYTES + 2;
}
current_crc_value = PRESET_VALUE;
for (i = 0; i < number_of_databytes; i++)
{
current_crc_value = current_crc_value ^ ((unsigned int)array_of_databytes[i]);
for (j = 0; j < 8; j++)
{
if (current_crc_value & 0x0001)
{
41/54

Share Link: 

datasheetq.com  [ Privacy Policy ]Request Datasheet ] [ Contact Us ]