Check out my first novel, midnight's simulacra!
CAN bus: Difference between revisions
(→Frames) |
|||
Line 32: | Line 32: | ||
* 11-bit base identifier, common to CAN-2.0A and B. | * 11-bit base identifier, common to CAN-2.0A and B. | ||
** All transmitting ECUs must be listening during this field, and MUST cease transmitting if preempted by a dominant signal | ** All transmitting ECUs must be listening during this field, and MUST cease transmitting if preempted by a dominant signal | ||
* RTR bit. Remote Transmission Requests (recessive) expect a response. | * RTR bit. Remote Transmission Requests (recessive) expect a response. | ||
** Much more common are Data Frames (dominant), which carry payloads and expect no response | ** Much more common are Data Frames (dominant), which carry payloads and expect no response | ||
** Note that Data Frames will win arbitration against Remote Frames having the same ID | |||
** If the subsequent Identifier Extension Bit is recessive, indicating 29-bit identifiers, this bit MUST be recessive, and the true RTR follows the extended identifier | |||
** In this case, this bit is known as the "Substitute Remote Request" (SRR) bit | |||
* IDE bit. Identifier Extension. Recessive if and only if an 18-bit extended identifier is to be provided, in which case: | |||
** 18-bit extended identifier, combining to make a 29-bit arbitrating ID | |||
** Real RTR bit | |||
** A dominant reserved bit (must accept but not transmit recessive) | |||
After the identifier (whether 11-bit or 29-bit) has been transmitted, it is only possible for one ECU to be transmitting in a compliant network (i.e., where all ECUs have distinct IDs). After this point, the two frame formats are unified: | |||
* A dominant reserved bit | |||
* 4-bit DLC. Data Length Code, specifying a number of data bytes 0--8. | |||
** Larger values (9--15) can appear, but are not used in ISO CAN. | |||
* 0--8 byte Data Field (Data Frames only) | |||
* 15-bit CRC | |||
* A recessive reserved bit (CRC delimiter) | |||
* 1-bit ACK slot | |||
* A recessive reserved bit (ACK delimiter) | |||
* 7 recessive reserved bits (Frame delimiter) |
Revision as of 04:16, 17 May 2019
The Controller Area Networks bus standards describe a two-wire, serial, multi-master, synchronized (but clockless), broadcast-only system designed for vehicles. CAN is one of the mandated transports for ODB-II on-board diagnostics, and is required in all US vehicles since 2008. CAN distance decreases with bit rate, but at low rates can run to the kilometers.
Standards
- CAN-1 (1986): Original Bosch protocol
- CAN-2.0 (1991): Bosch update, later standardized by ISO 11519 (1993)
- CAN-2.0A (ISO 11898-3, 2006): 11-bit identifiers, up to 125Kbit/s (CAN-Lo, "Basic CAN", "Reliable CAN"). Star/linear bus.
- CAN-2.0B (ISO 11898-2, 2003, 2016): 29-bit identifiers, up to 1Mbit/s (CAN-High, "Full CAN"). Linear bus, 120Ω at each end.
- ISO 11898-1: Data link layer common to CAN-2.0A and B
- CAN-FD (2012): Bosch extension to CAN-2.0 for up to 64B messages + better CRC
- ISO 15765-2 (2016): "Road vehicles: Diagnostic communication over CAN" ISO-TP L3/L4 for larger (up to 4095B) packets, 15Mbit/s
- ISO 11783 (2017): "ISOBUS" at 250Kbit/s, 4-wire terminating plug-and-play bias circuits (power, ground, CAN)
- more...
The mechanical connector is not mandated by any CAN standard, and proprietary ones are regularly used. External interfaces will often provide e.g. DE-9 (female on the bus, male on the ECU).
Participants
The various nodes of a CAN are known as ECUs (Electronic Control Units). Each can be assumed to include a microprocessor, a (possibly integrated) ISO 11898-1 CAN controller, and a ISO 11898-2/3 transceiver ("medium access unit"). Each ECU must have its own ID unique among the nodes. Depending on the flavor of CAN, IDs are either 11 or 29 bits.
CAN IDs
Lower IDs have priority over higher IDs, and form the 11-bit "Arbitration Field" in a CAN frame (there are 2 such fields in an Extended Frame, one of 11 and one of 18 bits, separated by two bits). While transmitting a message, each ECU must also listen. If it sees a 0 while sending a 1, it must cease to transmit until the current message ends. Logical 0 is the "dominant" signal:
- If multiple ECUs are transmitting at the same cycle, all must transmit recessive, or everyone will see dominant
- Transition to dominant is slower than transition from dominant
- Synchronization begins on the first recessive to dominant transition after an "interframe space" (3 consecutive recessive bits)
- This dominant signal is considered the "start bit" of frame
- Resynchronization occurs on each subsequent recessive to dominant transition
Frames
A frame begins with a transition from recessive to dominant, the "start bit". It is followed by:
- 11-bit base identifier, common to CAN-2.0A and B.
- All transmitting ECUs must be listening during this field, and MUST cease transmitting if preempted by a dominant signal
- RTR bit. Remote Transmission Requests (recessive) expect a response.
- Much more common are Data Frames (dominant), which carry payloads and expect no response
- Note that Data Frames will win arbitration against Remote Frames having the same ID
- If the subsequent Identifier Extension Bit is recessive, indicating 29-bit identifiers, this bit MUST be recessive, and the true RTR follows the extended identifier
- In this case, this bit is known as the "Substitute Remote Request" (SRR) bit
- IDE bit. Identifier Extension. Recessive if and only if an 18-bit extended identifier is to be provided, in which case:
- 18-bit extended identifier, combining to make a 29-bit arbitrating ID
- Real RTR bit
- A dominant reserved bit (must accept but not transmit recessive)
After the identifier (whether 11-bit or 29-bit) has been transmitted, it is only possible for one ECU to be transmitting in a compliant network (i.e., where all ECUs have distinct IDs). After this point, the two frame formats are unified:
- A dominant reserved bit
- 4-bit DLC. Data Length Code, specifying a number of data bytes 0--8.
- Larger values (9--15) can appear, but are not used in ISO CAN.
- 0--8 byte Data Field (Data Frames only)
- 15-bit CRC
- A recessive reserved bit (CRC delimiter)
- 1-bit ACK slot
- A recessive reserved bit (ACK delimiter)
- 7 recessive reserved bits (Frame delimiter)