2.8.7.5 Receive CRC Checker
The ATA8510/15 implements a highly configurable hardware CRC checker for the received data payload. The CRC checker can be activated independently for path A and path B of each service in the eepServices.RXBC1.RXCEx variables.
Address Service0 |
Name |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0x0125 |
RXBC1 |
RXMSBB |
RXCBLB[1:0] |
RXCEB |
RXMSBA |
RXCBLA[1:0] |
RXCEA |
If enabled, all bits that are received after the SOT event are transferred to the CRC checker with the option to skip up to 255 bits at the beginning.
The success of the CRC check is stored in the TESRA.CRCOA hardware register bit for path A
and TESRB.CRCOB for path B until the next receiver start-up or path restart. The bits can be
read with the “Read SRAM Register” SPI command from address 0x096 and 0x095 for path A and
path B, respectively. If CRCOx is ‘1
’, the CRC check was successful for the
corresponding path.
The usage of the receive CRC checker is bound to the following conditions:
- The CRC checker is available only in buffered receive mode and not in transparent receive mode.
- The data payload of the telegram must be concluded by a well-defined code violation to keep arbitrary bits at the end of the telegram from disturbing the checksum. Ideally, the telegram length EOT condition (see Telegram Length) is used to define the number of received data bits.
The CRC checker cannot be used if the “Stay in RX after EOT” option is set
(eepServices.rxSetPathx[1].RXTEHx = 1
) because the checksum is reset at every
receiver start-up phase and every path restart (compare Figure 2-24).
CRC Length
The CRC checker can be configured to a 4-bit, 8-bit or 16-bit polynomial. The CRC length can be set independently for path A and path B of each service in the eepServices.RXBC1.RXCBLx[1:0] variables.
Address Service0 |
Name |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0x0125 |
RXBC1 |
RXMSBB |
RXCBLB[1:0] |
RXCEB |
RXMSBA |
RXCBLA[1:0] |
RXCEA |
CRC Polynomial
The coefficients of the CRC polynomial can be independently configured for path A and path
B of each service in the eepServices.RXCPx[0].RXCPLx (low byte) and
eepServices.RXCPx[1].RXCPHx (high byte) variables. The LSB corresponds to the X0
coefficient and is always set to ‘1
’ by the hardware regardless of the
EEPROM setting.
Address Service0 |
Name |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0x0117 |
RXCPA[0] |
RXCPLA[7:0] | |||||||
0x0118 |
RXCPA[1] |
RXCPHA[7:0] | |||||||
0x011E |
RXCPB[0] |
RXCPLB[7:0] | |||||||
0x011F |
RXCPB[1] |
RXCPHB[7:0] |
If the CRC length is set to 4 or 8, only the corresponding number of LSBs are relevant.
CRC Init Value
The CRC checksum can be preloaded with an initialization value that can be independently configured for path A and path B of each service in the eepServices.RXCIx[0].RXCILx (low byte) and eepServices.RXCIx[1].RXCIHx (high byte) variables.
The orientation of the checksum is always MSB-first.
Address Service0 |
Name |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0x0119 |
RXCIA[0] |
RXCILA[7:0] | |||||||
0x011A |
RXCIA[1] |
RXCIHA[7:0] | |||||||
0x0120 |
RXCIB[0] |
RXCILB[7:0] | |||||||
0x0121 |
RXCIB[1] |
RXCIHB[7:0] |
If the CRC length is set to 4 or 8, only the corresponding number of LSBs is relevant.
CRC Skip Bits
Up to 255 bits at the beginning of the data payload can be omitted by the CRC checker. The number can be configured independently for path A and path B of each service in the eepServices.RXCSBx variables.
Address Service0 |
Name |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
---|---|---|---|---|---|---|---|---|---|
0x011B |
RXCSBA |
RXCSBA[7:0] | |||||||
0x0122 |
RXCSBB |
RXCSBB[7:0] |