# What is CAN bus?

**Controller Area Network (CAN)** is a serial communication protocol that lets microcontrollers and devices talk to each other without a central host computer. Developed by Bosch in the 1980s, it is now the standard in automotive and heavy vehicle electronics.

### Why buses use it

In a **MAN Lion's City**, dozens of ECUs (Electronic Control Units) share data in real time: the engine tells the instrument cluster the RPM, the EBS reports brake air pressure, the tachograph transmits vehicle speed — all over **two wires** (CAN\_H and CAN\_L).

### The J1939 standard

Heavy vehicles (buses, trucks) use **SAE J1939**, an application layer built on top of CAN. It defines:

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-element-description-"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">Element</th><th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">Description</th></tr></thead><tbody><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">**29-bit ID**</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Extended identifier (vs 11-bit basic CAN)</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">**PGN**</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Parameter Group Number — identifies the data type</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">**SA**</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Source Address — address of the sending ECU (0x00–0xFE)</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">**SPN**</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Suspect Parameter Number — each signal within a PGN</td></tr></tbody></table>

</div>### Implementation parameters

<div class="overflow-x-auto w-full px-2 mb-6" id="bkmrk-parameter-value-bus-"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">Parameter</th><th class="text-text-100 border-b-0.5 border-border-300/60 py-2 pr-4 align-top font-bold" scope="col">Value</th></tr></thead><tbody><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Bus speed</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">250 kbps</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">ID type</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Extended (29-bit)</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Send cycle</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">20 ms (50 Hz)</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">Transceiver</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">MCP2515 + TJA1050</td></tr><tr><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">MCP2515 oscillator</td><td class="border-b-0.5 border-border-300/30 py-2 pr-4 align-top">8 MHz</td></tr></tbody></table>

</div>### Note

`0xFF` bytes in unused positions are the J1939 default for "parameter not available" (SNA — Specific Not Available).