In the extended CAN data frame, shown in Figure 2-2,
the SOF bit is followed by the arbitration field, which
consists of 32 bits. The first 11 bits are the Most
Significant bits (MSb) (Base-lD) of the 29-bit identifier.
These 11 bits are followed by the Substitute Remote
Request (SRR) bit, which is defined to be recessive.
The SRR bit is followed by the lDE bit, which is
recessive to denote an extended CAN frame.
It should be noted that if arbitration remains unresolved
after transmission of the first 11 bits of the identifier,
and one of the nodes involved in the arbitration is
sending a standard CAN frame (11-bit identifier), the
standard CAN frame will win arbitration due to the
assertion of a dominant lDE bit. Also, the SRR bit in an
extended CAN frame must be recessive to allow the
assertion of a dominant RTR bit by a node that is
sending a standard CAN remote frame.
The SRR and lDE bits are followed by the remaining
18 bits of the identifier (Extended lD) and the remote
transmission request bit.
To enable standard and extended frames to be sent
across a shared network, the 29-bit extended message
identifier is split into 11-bit (most significant) and 18-bit
(least significant) sections. This split ensures that the
lDE bit can remain at the same bit position in both the
standard and extended frames.
Following the arbitration field is the six-bit control field.
The first two bits of this field are reserved and must be
dominant. The remaining four bits of the control field
are the DLC, which specifies the number of data bytes
contained in the message.
The remaining portion of the frame (data field, CRC
field, acknowledge field, end-of-frame and intermission)
is constructed in the same way as a standard data
frame
http://ww1.microchip.com/downloads/en/DeviceDoc/21801d.pdf
Standard Data Frame
The CAN standard data frame is shown in Figure 2-1.
As with all other frames, the frame begins with a Start-
Of-Frame (SOF) bit, which is of the dominant state and
allows hard synchronization of all nodes.
The SOF is followed by the arbitration field, consisting
of 12 bits: the 11-bit identifier and the Remote
Transmission Request (RTR) bit. The RTR bit is used
to distinguish a data frame (RTR bit dominant) from a
remote frame (RTR bit recessive).
Following the arbitration field is the control field,
consisting of six bits. The first bit of this field is the
Identifier Extension (IDE) bit, which must be dominant
to specify a standard frame. The following bit, Reserved
Bit Zero (RB0), is reserved and is defined as a dominant
bit by the CAN protocol. The remaining four bits of the
control field are the Data Length Code (DLC), which
specifies the number of bytes of data (0 – 8 bytes)
contained in the message.
After the control field is the data field, which contains
any data bytes that are being sent, and is of the length
defined by the DLC (0 – 8 bytes).
The Cyclic Redundancy Check (CRC) field follows the
data field and is used to detect transmission errors. The
CRC field consists of a 15-bit CRC sequence, followed
by the recessive CRC Delimiter bit.
The final field is the two-bit Acknowledge (ACK) field.
During the ACK Slot bit, the transmitting node sends
out a recessive bit. Any node that has received an
error-free frame acknowledges the correct reception of
the frame by sending back a dominant bit (regardless
of whether the node is configured to accept that
specific message or not). The recessive acknowledge
delimiter completes the acknowledge field and may not
be overwritten by a dominant bit.
http://ww1.microchip.com/downloads/en/DeviceDoc/21801d.pdf
Correct transmission of the frame is assured by means of the CRC-16 cyclical redundancy check.
Both CRC-16 characters are generated as follows, based upon all of the characters included in the
frame (slave address to last data byte):
1 Presetting of a 16 bit register (CRC-16 register) with FFFFh
2 Exclusive OR linking of the low bytes in the CRC-16 register to the frame’s character,
results to CRC-16 register
3 Shift the CRC-16 register one bit to the right,
A “0“ is added and the displaced, least significant bit (LSB) is saved
4 Where LSB = 0, continue as of step 5.
Where LSB = 1, establish exclusive OR linking of the CRC-16 registers to A001h.
5 Repeat steps 3 and 4 until a total of 8 shifts to the right have occurred.
At this point, one of the frame’s characters has been processed.
6 Execute steps 2 through 5 for each of the frame’s remaining characters.
7 The content of the CRC-16 register, preceded by the low byte, is added to the frame
after all of the frame’s characters have been processed.
programming in C
unsigned int crc_16 (unsigned char *buffer, unsigned int length) {
unsigned int i, j, lsb, tmp, crc = 0xFFFF;
for ( i = 0; i < tmp =" (unsigned" j =" 0;" lsb =" crc">>= 1;
if ( lsb != 0 ) crc ^= 0xA001;
}
}
return (crc);
}