It was designed specifically for automotive applications but is now also used in other areas.
CAN is also supported in the Linux Kernel since version 2.6.25.
Development of the CAN-bus started originally in 1983 at Robert Bosch GmbH. The protocol was officially released in 1986 at the SAE (Society of Automotive Engineers) congress in Detroit. The first CAN controller chips, produced by Intel and Philips, came on the market in 1987. Bosch published the CAN 2.0 specification in 1991.
A modern automobile may have as many as 50 electronic control units (ECU) for various subsystems. Typically the biggest processor is the engine control unit, which is also referred to as "ECU" in the context of automobiles; others are used for transmission, airbags, antilock braking, cruise control, audio systems, windows, mirror adjustment, etc. Some of these form independent subsystems, but communications among others are essential. A subsystem may need to control actuators or receive feedback from sensors. The CAN standard was devised to fill this need.
The CAN bus may be used in vehicles to connect engine control unit and transmission, or (on a different bus) to connect the door locks, climate control, seat control, etc. Today the CAN bus is also used as a fieldbus in general automation environments, primarily due to the low cost of some CAN Controllers and processors.
Bosch holds patents on the technology, and manufacturers of CAN-compatible microprocessors pay licence fees to Bosch, which are normally passed on to the customer in the price of the chip. Manufacturers of products with custom ASICs or FPGAs containing CAN-compatible modules, may need to pay a fee for the CAN Protocol License.
Unforeseen problems incorporated into CAN-based system are often attributed to the design methods used for the system and the individual component implementations. Scheduling methods which take into account the timing related to ECU software and hardware architecture, communication driver performance, and the network arbitration are required for minimizing the effort of testing required prior to manufacturing.
The development of distributed network-based systems often utilizes multiple suppliers for the prototyping of different modules and sub-systems. In order to best control the complexities incorporated from such a distributed developmental process, the Original Equipment Manufacturer usually requires a set of standard tests and procedures to be run on the prototypes prior to delivery.
These tests usually require the prototype ECU to be connected to a simulated system where performance measurements can be made for consideration of the physical layer, communication layer, and application layer. The standard tests are run repeatedly until the Device Under Test (DUT) passes all necessary tests. The requirements for testing vary depending on the Original Equipment Manufacturers focus and may include portions of the following sample test sequence:
Voltage Characteristic Protection Tests:
Communication Waveform Characteristics:
Software Recovery from Error Conditions:
Response Times:
Communication:
Network Management:
Diagnostics:
The supplier module level testing cleans up a majority of issues, however the greatest task of identifying and troubleshooting issues is often confronted during the integration testing phase. The integration testing phase requires that the “live” ECU’s be interconnected for the first time and the ultimate goal of this phase is to eliminate all causes of system behavior which may negatively impact the manufactured products reliability.
Time constraints require efficient use of test processes, available resources and tools to ensure the highest levels of product quality are delivered at the conclusion of the integration testing phase. Testing teams must possess a means for identification and isolation of faults, along with the experience needed for quickly assessing possible root causes. The time required for actually tracking down and solving the root failure mode can often be extremely difficult and not time effective in widely distributed processes.
Testing tools must be scalable, flexible, and integrate able to provide test coverage for all pertinent levels of the OSI model. The ideal test tools themselves must provide the knowledge and know-how of skilled engineers by identifying questionable conditions, and then using reasoning to guide the test engineer in solving the issue. The tool should also be easily configurable, comprehensive, include predefined test libraries, and provide extremely reliable measurements..
CAN is a broadcast, differential serial bus standard for connecting electronic control units (ECUs).
Each node is able to send and receive messages, but not simultaneously: a message (consisting primarily of an ID — usually chosen to identify the message-type/sender — and up to eight message bytes) is transmitted serially onto the bus, one bit after another — this signal-pattern codes the message (in NRZ) and is sensed by all nodes.
The devices that are connected by a CAN network are typically sensors, actuators and control devices. A CAN message never reaches these devices directly, but instead a host-processor and a CAN Controller is needed between these devices and the bus.
If the bus is free, any node may begin to transmit. If two or more nodes begin sending messages at the same time, the message with the more dominant ID (which has more dominant bits i.e. bit 0) will overwrite other nodes' less dominant IDs, so that eventually (after this arbitration on the ID) only the dominant message remains and is received by all nodes.
Each node requires
Bit rates up to 1 Mbit/s are possible at network lengths below 40 m. Decreasing the bit rate allows longer network distances (e.g. 125 kbit/s at 500 m).
The CAN data link layer protocol is standardized in ISO 11898-1 (2003). This standard describes mainly the data link layer — composed of the Logical Link Control (LLC) sublayer and the Media Access Control (MAC) sublayer — and some aspects of the physical layer of the OSI Reference Model. All the other protocol layers are left to the network designer's choice.
Certain microcontrollers, like some models of the PIC microcontroller family by Microchip Technology, some models of any Renesas family and Atmel AVR, many Freescale Semiconductor microcontrollers, as well as several ARM based microcontrollers have built-in CAN support.
CAN features an automatic 'arbitration free' transmission. A CAN message that is transmitted with highest priority will 'win' the arbitration, and the node transmitting the lower priority message will sense this and back off and wait.
This is achieved by CAN transmitting data through a binary model of "dominant" bits and "recessive" bits where dominant is a logical 0 and recessive is a logical 1. This means open collector, or 'wired or' physical implementation of the bus (but since dominant is 0 this is sometimes referred to as wired-AND). If one node transmits a dominant bit and another node transmits a recessive bit then the dominant bit "wins" (a logical AND between the two).
| Truth tables for dominant/recessive and logical AND | |||||||||||||||||||
|
| ||||||||||||||||||
So, if you are transmitting a recessive bit, and someone sends a dominant bit, you see a dominant bit, and you know there was a collision. (All other collisions are invisible.) The way this works is that a dominant bit is asserted by creating a voltage across the wires while a recessive bit is simply not asserted on the bus. If anyone sets a voltage difference, everyone sees it, hence, dominant. Thus there is no delay to the higher priority messages, and the node transmitting the lower priority message automatically attempts to re-transmit 6 bit clocks after the end of the dominant message.
When used with a differential bus, a Carrier Sense Multiple Access/Bitwise Arbitration (CSMA/BA) scheme is often implemented: if two or more devices start transmitting at the same time, there is a priority based arbitration scheme to decide which one will be granted permission to continue transmitting. The CAN solution to this is prioritised arbitration (and for the dominant message delay free), making CAN very suitable for real time prioritised communications systems.
During arbitration, each transmitting node monitors the bus state and compares the received bit with the transmitted bit. If a dominant bit is received when a recessive bit is transmitted then the node stops transmitting (i.e., it lost arbitration). Arbitration is performed during the transmission of the identifier field. Each node starting to transmit at the same time sends an ID with dominant as binary 0, starting from the high bit. As soon as their ID is a larger number (lower priority) they'll be sending 1 (recessive) and see 0 (dominant), so they back off. At the end of ID transmission, all nodes but one have backed off, and the highest priority message gets through unimpeded
CAN has four frame types:
The CAN standard requires the implementation must accept the base frame format and may accept the extended frame format, but must tolerate the extended frame format.
| Field name | Length (bits) | Purpose |
|---|---|---|
| Start-of-frame | 1 | Denotes the start of frame transmission |
| Identifier | 11 | A (unique) identifier for the data |
| Remote transmission request (RTR) | 1 | Must be dominant (0)Optional |
| Identifier extension bit (IDE) | 1 | Must be dominant (0)Optional |
| Reserved bit (r0) | 1 | Reserved bit (it must be set to dominant (0), but accepted as either dominant or recessive) |
| Data length code (DLC)* | 4 | Number of bytes of data (0-8 bytes) |
| Data field | 0-8 bytes | Data to be transmitted (length dictated by DLC field) |
| CRC | 15 | Cyclic redundancy check |
| CRC delimiter | 1 | Must be recessive (1) |
| ACK slot | 1 | Transmitter sends recessive (1) and any receiver can assert a dominant (0) |
| ACK delimiter | 1 | Must be recessive (1) |
| End-of-frame (EOF) | 7 | Must be recessive (1) |
One restriction placed on the identifier is that the first seven bits cannot be all recessive bits. (I.e., the 16 identifiers 1111111xxxx are invalid.)
| Field name | Length (bits) | Purpose |
|---|---|---|
| Start-of-frame | 1 | Denotes the start of frame transmission |
| Identifier A | 11 | First part of the (unique) identifier for the data |
| Substitute remote request (SRR) | 1 | Must be recessive (1)Optional |
| Identifier extension bit (IDE) | 1 | Must be recessive (1)Optional |
| Identifier B | 18 | Second part of the (unique) identifier for the data |
| Remote transmission request (RTR) | 1 | Must be dominant (0) |
| Reserved bits (r0, r1) | 2 | Reserved bits (it must be set dominant (0), but accepted as either dominant or recessive) |
| Data length code (DLC)* | 4 | Number of bytes of data (0-8 bytes) |
| Data field | 0-8 bytes | Data to be transmitted (length dictated by DLC field) |
| CRC | 15 | Cyclic redundancy check |
| CRC delimiter | 1 | Must be recessive (1) |
| ACK slot | 1 | Transmitter sends recessive (1) and any receiver can assert a dominant (0) |
| ACK delimiter | 1 | Must be recessive (1) |
| End-of-frame (EOF) | 7 | Must be recessive (1) |
The two identifier fields (A & B) combined form a 29-bit identifier.
* It is physically possible for a value between 9-15 to be transmitted in the 4-bit DLC, although the data is still limited to 8 bytes. Certain controllers allow the transmission and/or reception of a DLC greater than 8, but the actual data length is always limited to 8 bytes.
•There are 2 differences between a Data Frame and a Remote Frame. Firstly the RTR-bit is transmitted as a dominant bit in the Data Frame and secondly in the Remote Frame there is no Data Field.
i.e.
In the very unlikely event of a Data Frame and a Remote Frame with the same identifier being transmitted at the same time, the Data Frame wins arbitration due to the dominant RTR bit following the identifier. In this way, the node that transmitted the Remote Frame receives the desired data immediately.
The first field is given by the superposition of ERROR FLAGS contributed from different stations. The following second field is the ERROR DELIMITER.There are two types of error flags: Active Error Flag : Transmitted by a node detecting an error on the network that is in error state "error active". Passive Error Flag : Transmitted by a node detecting an active error frame on the network that is in error state "error passive".
The start of an overload frame due to case 1 is only allowed to be started at the first bit time of an expected intermission, whereas overload frames due to case 2 start one bit after detecting the dominant bit. Overload Flag consists of six dominant bits. The overall form corresponds to that of the active error flag. The overload flag’s form destroys the fixed form of the intermission field. As a consequence, all other stations also detect an overload condition and on their part start transmission of an overload flag. Overload Delimiter consists of eight recessive bits. The overload delimiter is of the same form as the error delimiter.
ISO 11898-2 uses a two-wire balanced signaling scheme. It is the most used physical layer in car powertrain applications and industrial control networks.
ISO 11898-4 standard defines the time-triggered communication on CAN (TTCAN). It is based on the CAN data link layer protocol providing a system clock for the scheduling of messages.
SAE J1939 standard uses a two-wire twisted pair, -11 has a shield around the pair while -15 does not. SAE 1939 is widely used in agricultural & construction equipment.
ISO 11783-2 uses four unshielded twisted wires; two for CAN and two for terminating bias circuit (TBC) power and ground. This bus is used on agricultural tractors. This bus is intended to provide interconnectivity with any implementation adhering to the standard.
An ARINC technical working group develops the ARINC 825 standard with special requirements for the aviation industry.