Why does CAN use differential signaling, and how does the bus physically work?
CAN uses a two-wire differential bus — CAN_H and CAN_L — where information is encoded in the voltage difference between the two wires rather than the absolute voltage on either wire. This is the primary reason CAN is so noise-resistant.
In the recessive state (logic 1), both CAN_H and CAN_L are driven to approximately 2.5V, so the differential voltage (CAN_H - CAN_L) is approximately 0V. In the dominant state (logic 0), CAN_H is driven to approximately 3.5V and CAN_L to approximately 1.5V, creating a differential voltage of approximately 2V. The CAN transceiver's receiver compares the two lines and interprets a differential voltage above about 0.9V as dominant and below about 0.5V as recessive.
The noise rejection works because electromagnetic interference from nearby motors, ignition coils, or switching regulators affects both wires equally (common-mode noise). When the receiver subtracts CAN_L from CAN_H, the common-mode component cancels out, and only the intended signal remains. A single-ended protocol (like UART at TTL levels) would interpret this common-mode noise as valid data transitions.
This is why CAN wiring should be twisted pair — twisting the two wires ensures they have equal exposure to external electromagnetic fields, maximizing common-mode rejection. The twist rate should be at least 1 turn per inch (40 turns per meter) for good rejection at automotive frequencies.
Source: CAN Q&A
