Introduction: The CAN Bus
The CAN bus is a broadcast type of bus. This means that all nodes can “hear” all transmissions. There is no way to send a message to just a specific node; all nodes will invariably pick up all traffic. The CAN hardware, however, provides local filtering so that each node may react only on the interesting messages.
The bus uses Non-Return To Zero (NRZ) with bit-stuffing. The modules are connected to the bus in a wired-and fashion: if just one node is driving the bus to a logical 0, then the whole bus is in that state regardless of the number of nodes transmitting a logical 1.
The CAN standard defines four different message types. The messages uses a clever scheme of bit-wise arbitration to control access to the bus, and each message is tagged with a priority.
The CAN standard also defines an elaborate scheme for error handling and confinement which is described in more detail in UNIT 8: CAN Error Handling.
Bit timing and clock synchronization are discussed in Section 7 of this material. We also provide a bit timing calculator that you can use to calculate the CAN bus parameters and register settings.
CAN may be implemented using different physical layers (see UNIT 4: CAN Physical Layer), some of which are described here, and there are a fair number of connector types in use (see UNIT 6: CAN Connectors). We also provide a number of oscilloscope pictures (see UNIT 5: Oscilloscope Pictures) for those interested in the details of a message.