What Is LIN Bus (Local Interconnect Network)?
Last updated 8 July 2026 · 7 min read
Direct Answer
LIN (Local Interconnect Network) is a single-wire, single-master/multiple-slave serial bus protocol designed as a low-cost complement to CAN bus, not a competitor to it. Where CAN uses a differential two-wire bus with multi-master bit-level arbitration, LIN uses one signal wire, one master node that polls each slave in turn according to a fixed schedule table, and a UART-compatible frame format — trading CAN's higher speed, deterministic priority arbitration, and noise immunity for significantly lower per-node cost and wiring complexity. In practice, LIN and CAN are typically used together in the same product: CAN carries the high-speed backbone traffic between major ECUs, while LIN handles low-speed peripheral nodes — window switches, seat position motors, mirror actuators, HVAC blend-door actuators, and similar simple sensor/actuator nodes — that don't need CAN's bandwidth or arbitration but do need a shared, addressable bus instead of dedicated point-to-point wiring.
Detailed Explanation
Everywhere CAN bus is discussed on this site so far, it's been in the context of a bus carrying meaningful data volume between capable ECUs — engine control, motion control, industrial servo networks. LIN exists for the other half of a typical vehicle or industrial control system: the large number of simple nodes that just need to report a switch state or drive a small actuator, where CAN's cost and complexity per node isn't justified.
Single-Master, Multiple-Slave Architecture
Unlike CAN's multi-master bit-level arbitration (where any node can transmit and conflicts resolve by message-ID priority), LIN has exactly one master node per bus. The master owns the entire communication schedule and initiates every single frame; slave nodes only ever respond when the master addresses them, and never initiate communication on their own. This architectural simplification is what allows LIN slave nodes to use much simpler, lower-cost hardware than a CAN node needs — a slave node has no arbitration logic to implement at all.
The Schedule Table
Rather than event-driven arbitration, a LIN master works from a schedule table: a fixed, pre-defined sequence of which identifier gets polled when. The master cycles through this table continuously, sending a header for each scheduled identifier and either reading the corresponding slave's response or writing data to it, depending on that identifier's defined direction. This makes LIN bus timing fully deterministic and predictable by design — every node's update rate is fixed by its position and frequency in the schedule table, rather than depending on message priority and bus contention the way CAN's arbitration does.
Physical Layer: Single Wire
A LIN bus uses one signal wire (plus a shared ground reference), typically driven to a nominal 12 V bus level through a LIN transceiver IC, with no differential pair and no termination network required — a direct contrast to CAN's differential CAN_H/CAN_L pair and mandatory 120 Ω termination at both bus ends. This single-wire approach is inherently less noise-immune than CAN's differential signalling, which is one of the direct trade-offs for LIN's lower cost — consistent with its role on lower-criticality nodes rather than safety- or powertrain-critical signals.
Frame Structure: Built on UART
A LIN frame is transmitted using the same asynchronous start-bit/8-data-bit/stop-bit framing as UART — in fact, many MCUs implement LIN using a standard UART peripheral with LIN-specific hardware support (break-field generation/detection) rather than a dedicated LIN controller. A LIN frame consists of:
- Break field — a deliberately extended low period (longer than a normal UART start bit) that signals the start of a new frame to every node on the bus.
- Sync byte — a fixed 0x55 pattern that lets every slave node's clock synchronise to the master's bit rate, which matters because LIN slave nodes commonly use a lower-cost, less precise internal RC oscillator rather than a crystal.
- Protected identifier (PID) — a 6-bit identifier plus 2 parity bits, identifying which slave node this frame addresses and, implicitly, the direction of the following data (master-to-slave or slave-to-master).
- Data field — 1 to 8 bytes, the actual payload.
- Checksum — validates the data field against transmission errors.
Practical Examples
A vehicle door module is a canonical LIN application: a single LIN-connected body control node polls a schedule table covering the window-switch position, the door-lock actuator state, the mirror-adjustment motor position, and a puddle-lamp control — none of these individually need more than a few updates per second, and running each over its own dedicated CAN node would be significant unnecessary cost multiplied across every door in the vehicle. The body control module itself, in turn, is a node on the vehicle's CAN backbone, bridging the low-speed LIN peripheral data up to the rest of the vehicle network.
An HVAC system similarly uses LIN to control blend-door actuators and read cabin temperature sensors — again, low-bandwidth, cost-sensitive nodes that benefit from LIN's simplicity, coordinated by a master node that itself communicates upstream over CAN.
Comparison: LIN vs CAN
| LIN | CAN | |
|---|---|---|
| Topology | Single-master, multiple-slave | Multi-master, all nodes equal |
| Physical layer | Single wire, ~12 V | Differential CAN_H/CAN_L pair |
| Termination | None required | 120 Ω at both bus ends |
| Typical speed | Up to ~19.2 kbit/s | 125 kbit/s – 1 Mbit/s (CAN FD data phase higher) |
| Access method | Fixed master schedule table | Bit-level priority arbitration |
| Error handling | Basic checksum | CRC, bit monitoring, bit stuffing, fault confinement state machine |
| Typical node cost | Low — simple transceiver, often UART-based | Higher — dedicated CAN controller and transceiver |
| Typical use | Low-speed peripheral nodes (switches, small actuators, simple sensors) | High-speed backbone, safety- and timing-critical nodes |
Design Considerations
- Design LIN and CAN as complementary layers, not competing choices. As covered in the FAQ above, the common real-world architecture uses CAN for the vehicle or system backbone and LIN for the peripheral nodes hanging off a gateway/master node — treat the choice as "which bus does this specific node's bandwidth and criticality justify," not a single sitewide protocol decision.
- Budget for the master node's schedule table design early. Every LIN slave's effective update rate is fixed by how often the master polls its identifier — a schedule table that's too conservative under-services a node that needs faster updates, and this is a system-level design decision made once, not something a slave node can request at runtime.
- Confirm the LIN transceiver and any level-shifting matches the MCU's logic level, the same consideration covered for CAN transceivers in 3.3V/5V logic level shifting — a LIN transceiver's bus-side signalling is not compatible with a raw 3.3 V or 5 V logic-level connection without the transceiver IC in between.
- Don't rely on the slave's internal oscillator accuracy without checking the specific part. The sync byte allows slave-side clock synchronisation specifically because many low-cost LIN slave MCUs use an internal RC oscillator rather than a crystal — confirm the specific MCU's oscillator tolerance is within what the LIN specification and the master's tolerance budget for that node actually allow.
Zeus Design's embedded firmware team designs CAN and LIN bus networks — protocol stack integration, schedule table design, and node firmware — for automotive and industrial products, as part of complete embedded firmware development.
Common Mistakes
- Choosing LIN for a node that actually needs CAN's determinism or bandwidth. LIN's fixed schedule table and low speed are the right fit for simple, low-bandwidth peripheral nodes, not for anything approaching real-time control loop feedback or high data-rate traffic — a node with those requirements needs CAN (or CAN FD), not LIN.
- Assuming LIN slave nodes can initiate communication. As covered in the FAQ above, this is a strict architectural rule, not just a common pattern — a design that assumes any kind of unsolicited slave-initiated message is designing against the protocol.
- Underestimating the importance of the sync byte on cost-optimised slave nodes. Slave nodes built around a crystal-free MCU depend entirely on the sync byte to align their bit timing to the master; a slave implementation that doesn't correctly resynchronise on every frame's sync byte accumulates timing drift and produces intermittent, hard-to-reproduce frame errors.
- Treating LIN as electrically as robust as CAN. LIN's single-wire, non-differential physical layer has meaningfully less noise immunity than CAN's differential signalling — a design that routes a LIN bus through the same electrically noisy environment a CAN bus would tolerate without issue may see corrupted frames that a CAN implementation in the same location would not.
Frequently Asked Questions
- Why not just use CAN for everything and skip LIN entirely?
- Cost and complexity, multiplied across a large number of simple nodes. A CAN node needs a CAN controller (built into or alongside the MCU), a dedicated CAN transceiver IC, a differential twisted-pair or matched-impedance PCB trace, and bus termination — meaningful cost and design effort for a node that only needs to report a switch position or drive a small motor. A LIN node needs only a single wire, a low-cost LIN transceiver IC (or, on some MCUs, a LIN-capable UART peripheral with minimal external circuitry), and no termination network at all. In a vehicle with dozens of simple body-electronics nodes, using LIN for those nodes and reserving CAN for the smaller number of higher-speed, higher-priority nodes (engine, transmission, ABS, infotainment backbone) meaningfully reduces total wiring harness cost and complexity — this is precisely why the two protocols coexist in the same vehicle rather than one displacing the other.
- Can a LIN slave node talk directly to another LIN slave node?
- No. LIN is strictly single-master: the master node initiates every frame by sending a header (break field, sync byte, and a protected identifier, or PID) on the fixed schedule table, and only the one slave node assigned to that identifier responds with the data. Slave nodes never initiate communication and never talk to each other directly — any coordination between two slave nodes' data has to happen through the master, which is a deliberate simplicity trade-off consistent with LIN's role as a low-cost peripheral bus rather than a general-purpose multi-node network.
- What baud rate does LIN run at, and why is it so much slower than CAN?
- LIN typically runs up to 19.2 kbit/s (some implementations use lower rates such as 9.6 or 10.4 kbit/s), compared to CAN's typical 125 kbit/s to 1 Mbit/s range (and higher in the CAN FD data phase). This isn't a limitation so much as a deliberate design point: LIN's single-wire physical layer and low-cost transceivers aren't designed for CAN's speed, and the low-cost, low-bandwidth peripheral nodes LIN targets — a window switch, a seat motor position — genuinely don't need more than a few messages per second. Matching bus speed to the actual bandwidth requirement is exactly what keeps LIN nodes cheap; over-specifying speed for these applications would only add cost without a corresponding benefit.
References
Related Questions
What Is CAN Bus?
CAN bus is a differential, multi-master serial bus where nodes arbitrate by message ID priority. Learn how frames, error confinement, and CAN FD work.
What Is UART (Universal Asynchronous Receiver-Transmitter)?
UART sends serial data asynchronously over TX and RX with no shared clock. Learn how framing, baud rate, RS-232 voltage levels, and common UART pitfalls work.
What Is RS-485?
RS-485 is a differential multi-drop bus for up to 32 nodes over ~1200 m cable runs. Learn how half-duplex wiring, termination, and Modbus RTU work.
What Is Modbus?
Modbus RTU uses a master/slave model over RS-485. Learn the register model, function codes, frame structure, and how to implement Modbus in embedded firmware.
How Do You Shift Logic Levels Between 3.3V and 5V, and When Do You Need a Level Shifter?
How to shift logic levels between 3.3V and 5V: when a direct connection is safe, resistor dividers, and bidirectional vs unidirectional level shifter ICs.
How Do You Design Power over Ethernet (PoE) into an Embedded Product?
Design Power over Ethernet (PoE) into an embedded product: PD controller ICs, IEEE 802.3af/at/bt classification, isolation, and the DC-DC stage that follows.
Related Forum Discussions
I2C bus completely dead after unplugging a sensor live — SDA stuck low, no NACK, nothing
We've got a shared I2C bus with four sensors on it (temperature, humidity, an IMU, and a current sense IC), all on the same bus off one MCU.
STM32F401 UART printing garbage after switching to 84 MHz PLL — same 115200 baud in CubeMX and PuTTY
Got a WeAct Black Pill (STM32F401CCU6) project that's been running happily on the default HSI clock at 16 MHz. Using USART1 on PA9/PA10 thro
SPI reads all returning 0xFF — logic analyser shows MISO activity, W25Q32 not responding to commands
Been staring at this one for a day and a half. I'm trying to read the JEDEC ID from a W25Q32JV SPI flash chip on a custom STM32L432 board. T
I2C bus scan finding nothing — NACK on every address despite pull-ups
Working through my first proper I2C project — hooking up a BME280 temp/humidity sensor to an ESP32 devkit. Wired SDA to GPIO21 and SCL to GP