Controller Area Network · Flexible Data Rate
CAN / CAN FD Messages share a bus
Use CAN when several embedded nodes exchange control and status messages, such as a motor drive, sensor and supervisor. Each node has a controller and a transceiver. They share a bus, and the message identifier decides priority when transmission starts together. CAN FD keeps this arbitration model while allowing more data per frame.

CAN / CAN FD wiring, timing and transaction
Controllers need transceivers
The controller builds frames. The transceiver connects its logic signals to the shared CAN_H / CAN_L pair.
Reference and power are omitted. Choose grounding or isolation to keep every transceiver within its common-mode limits. A CAN controller pin cannot connect directly to the cable.
Who gets the next frame?
Follow one frame, let two identifiers compete, or remove the receiver that supplies ACK.
- 1Queue
- 2SOF
- 3Identifier
- 4Data + CRC
- 5ACK
- 6End
The transmitter sends recessive; a valid receiver can overwrite it with dominant.
Queue a frame. Queuing reserves a controller transmit buffer; it does not mean the frame has reached the bus.
Timing and model details
Logical frame phases, not an analog voltage trace. Only standard 11-bit data frames are compared; stuffed bits, CRC bits and error recovery timing are omitted.
What CAN FD adds
Arbitration stays at the nominal rate. CAN FD changes the frame format and can switch to a faster data phase.
One configured bit rate
BRS controls the switch
FD lengths above 8 are 12, 16, 20, 24, 32, 48 and 64. A larger buffer is not proof that a chosen DLC sends that many bytes. Check the controller’s encoding.
Messages or a byte stream?
Several nodes publish short control messages. Define priorities, allowed senders and deadlines.
RX ← TXDevice B
A direct byte stream suits a console or module command channel. Add message framing and responses in software.
CAN already frames and checks messages. It still needs an application contract for units, sequence numbers, stale data and command acknowledgment.
UART here means the logic-level, point-to-point link in this guide. Transceivers can adapt UART signaling to other electrical networks.
Compare UART framing →Follow a transaction
Advance here or in the transfer above. The highlighted operation and wire state stay on the same step.
frame = make_frame(0x120, [0x2A, 0x07])
queue(frame); wait_for_bus_idle()
controller.send_start_and_identifier()
controller.send_data_and_crc()
if controller.sees_ack_error():
return report_failed_attempt()
controller.check_end_of_frame()
return TX_COMPLETE- Who drives
- No transmitter yet; bus is idle
- Sent so far
- 0x120 · payload 2A 07 queued
- Response so far
- No bus acknowledgment yet
Queued · not delivered
Why this step mattersStep 1 of 6, Queue a frame. Queuing reserves a controller transmit buffer; it does not mean the frame has reached the bus.
Implementation notes
Conceptual CAN controller operations; firmware queues a frame instead of bit-banging arbitration. The fixture uses standard 11-bit data frames on a correctly terminated high-speed CAN bus. Stuffing, CRC calculation, bit timing, error counters and recovery are not simulated. The no-ACK case is one observed attempt; controller retry policy and a software deadline must be configured. Losing arbitration is normal contention, not a transmission error. An ACK does not identify its sender or prove application consumption.
Common mistakes
Confusing ACK with application delivery
Any active receiver that validates the frame can acknowledge it, even if software does not use that identifier. A command may need an explicit application response.
Terminating every node
This high-speed linear bus uses 120 Ω at each physical end, not at each transceiver. Keep stubs short and validate the selected physical-layer design.
Treating arbitration loss as a fault
The lower-priority sender becomes a receiver and waits for another opportunity. Persistent higher-priority load can delay it, so budget deadlines and retries.
Enabling FD on a Classical-only network
Check every controller, transceiver and timing configuration. Classical-only nodes may signal errors when an FD frame arrives.
Inspect identifier, payload, ACK and error status. Trigger simultaneous frames with different IDs, then remove the acknowledging receiver. Check both physical terminations, differential signaling, bit timing, retry limits and transmit completion status.
Further details and primary sources
- Arbitration belongs to the controller
- At a bus opportunity, multiple controllers may start together. Each compares its transmitted bit with the bus. During arbitration, sending 1 and observing 0 means losing access. The winner continues intact; this is not a damaged frame.
- A message ID is not a node address
- The network defines the meaning and priority of identifiers. Receivers use acceptance filters to select messages for software. Assign identifiers and transmitter ownership deliberately; equal IDs with different data are not resolved by identifier arbitration.
- CAN FD changes frame capacity
- Classical CAN carries up to 8 data bytes. CAN FD supports lengths through 64 bytes using a different DLC mapping and can switch rate within a frame. Controllers and transceivers must support the chosen network; ordinary Classical-only nodes can disrupt FD traffic.
Example scope
Standard 11-bit data frames on a high-speed CAN bus. Arbitration is shown without stuffed bits. The 500 kbit/s nominal and 2 Mbit/s FD data rates are fixtures, not guarantees for a cable length or transceiver. Extended IDs, remote frames, CRC calculation, detailed error confinement, bus-off recovery and higher-layer protocols are outside the simulation.
Primary sources
Updated
