
LIN (Local Interconnect Network) là giao thức truyền thông nối tiếp đơn giản, được sử dụng để kết nối các bộ phận trong hệ thống ô tô.
- Được tạo ra để thiểu giảm chi phí và đơn giản hóa việc giao tiếp giữa các bộ phận nhỏ, không cần kết nối vào mạng CAN (Controller Area Network) phức tạp của xe.
- Hoạt động dựa trên giao tiếp nối tiếp (serial), sử dụng mô hình Master-Slave (một thiết bị điều khiển chính và nhiều thiết bị phụ).
- Một số vi điều khiển có UART (Universal Asynchronous Receiver Transmitter) hỗ trợ thêm các tính năng của LIN, giúp xử lý giao tiếp dễ dàng hơn bằng phần cứng thay vì lập trình phần mềm.
Bài blog này sẽ cung cấp cái nhìn tổng quan về giao thức LIN và cách giao thức này hoạt động.
Các thuật ngữ trong giao thức LIN
Master (Thiết bị điều khiển chính):
- Là thiết bị điều khiển chính trên mạng LIN.
- Chịu trách nhiệm gửi lệnh và điều phối quá trình giao tiếp.
Slave (Thiết bị phụ):
- Là các thiết bị nhận lệnh từ master.
- Chỉ phản hồi khi được master yêu cầu.
Quá trình giao tiếp gồm 2 phần:
- Master Process (Quá trình của master): Master gửi Header (phần mở đầu).
- Slave Process (Quá trình của slave): Slave gửi Response (phản hồi).
Các thành phần chính:
- Header: Do master gửi, gồm các phần:
- Break: Tín hiệu bắt đầu giao tiếp.
- Delimiter: Ngăn cách Break và Sync.
- Sync (0x55): Đồng bộ tốc độ truyền.
- PID/Identifier: Xác định loại dữ liệu và thiết bị slave nào sẽ phản hồi.
- Response: Dữ liệu do slave gửi kèm theo checksum để kiểm tra lỗi.
Điện áp:
- VBAT: Điện áp ắc-quy xe, cấp nguồn cho hệ thống.
- VSUP: Điện áp chính của ECU và LIN transceiver (có thể khác VBAT do mạch bảo vệ).
LDF (LIN Description File)
- Một file chứa cấu hình của mạng LIN, gồm danh sách các thiết bị, tín hiệu và dữ liệu trao đổi.
Xem thêm: Giao thức UART là gì?
LIN Workflow

1. LIN không chỉ là giao tiếp dữ liệu, mà còn có quy trình triển khai chuẩn hóa
- Không chỉ đơn giản là việc truyền dữ liệu 0 và 1 giữa các thiết bị.
- Nó còn bao gồm LIN Workflow, tức là một quy trình triển khai tiêu chuẩn để đảm bảo các thiết bị trong mạng hoạt động đồng bộ và dễ sử dụng.
2. LIN Workflow giúp tổ chức mạng một cách rõ ràng bằng LIN Description File (LDF)
- LDF giúp phân biệt các cụm LIN khác nhau.
- Nó quy định:
- Số lượng thiết bị (Node Amount).
- Các khung tin nhắn (Message Frames) và mô tả nội dung của chúng.
- Tốc độ truyền tin nhắn (Message Rate).
- Vai trò của từng thiết bị trong mạng (Node Task).
- LDF giúp tự động tạo mã nguồn để thiết lập truyền thông và hỗ trợ các công cụ đo lường phân tích hệ thống LIN.
3. Cách LDF được tạo ra trong LIN Workflow
- LDF được viết theo chuẩn ngôn ngữ LIN Configuration Language Specification và được tạo bằng System Defining Tool.
- System Defining Tool sẽ tạo LDF dựa trên thông tin về hệ thống LIN, sau đó System Generator sử dụng LDF để tạo mã nguồn cho từng thiết bị.
- Ngoài ra, LIN Node Capability Language giúp mô tả các thiết bị LIN sẵn có (Off-the-Shelf Nodes), tức là các thiết bị chuẩn hóa có thể mua và sử dụng ngay trong các ứng dụng phổ biến.
4. Cách LIN Workflow được thể hiện trên sơ đồ
- System Defining Tool giúp định nghĩa cấu hình hệ thống.
- Node Capability Files (NCF) mô tả khả năng của từng node.
- System Generator tạo mã nguồn và tạo LIN Description File (LDF).
- LDF được sử dụng để kiểm tra và phân tích bus thông qua Bus Analyzer Emulator.
- Các thiết bị trong LIN Cluster (bao gồm Commander và Responder) hoạt động dựa trên cấu hình từ LDF.
Bus layout
1. LIN Cluster
Một LIN cluster là tập hợp các nodes được kết nối qua một dây cáp vật lý.
Trong một LIN cluster có một Commander node (Master) và tối đa 16 Responder nodes (Slaves).
Commander quản lý giao tiếp trên bus và điều khiển luồng dữ liệu giữa các Responder.

2. Cách thức hoạt động
Vi điều khiển (MCU) sẽ được lập trình với giao thức LIN và trực tiếp điều khiển bộ thu phát (transceiver) thông qua giao diện nối tiếp (SCI – Serial Communication Interface).
SCI thực chất giống UART, nhưng được tối ưu hơn cho LIN. Trong nhiều ứng dụng, SCI đã thay thế UART để đơn giản hóa quá trình lập trình và tích hợp, vì hầu hết các vi điều khiển đều có sẵn giao diện này.
3. LIN chỉ sử dụng 1 dây kết nối
LIN chỉ sử dụng một dây dữ liệu duy nhất, giúp giảm chi phí và tiết kiệm không gian trong hệ thống.
Tốc độ truyền thấp (~20 kbps) được lựa chọn để giảm nhiễu điện từ (radiated emissions), giúp đảm bảo tín hiệu ổn định.
Các thiết bị (nodes) được kết nối thụ động vào bus. Khi không có dữ liệu truyền, điện trở pull-up giữ mức điện áp ổn định, đảm bảo hệ thống hoạt động đúng.
Xem thêm: Tất tần tật về giao thức I2C
Nguyên tắc giao tiếp Nối tiếp trong LIN (SCI)
Trong giao tiếp LIN, SCI (Serial Communication Interface) là giao diện chính giữa vi điều khiển và bộ thu phát (transceiver).
1. Vì sao dùng SCI thay vì UART?
Ban đầu, LIN sử dụng UART để truyền dữ liệu.Tuy nhiên, UART không đảm bảo truyền dữ liệu không lỗi trên LIN Bus. Vì vậy, SCI được sử dụng thay thế, giúp giao tiếp ổn định hơn.
2. Cách thức truyền dữ liệu của SCI
- Vi điều khiển gửi dữ liệu theo từng bit frame.
- Mỗi frame bắt đầu bằng bit start (mức dominant) để đồng bộ hóa các thiết bị nhận.
- Tiếp theo là dữ liệu từ bit ít quan trọng nhất (LSB) đến bit quan trọng nhất (MSB).
- Cuối cùng là bit stop, đánh dấu kết thúc một frame.
SCI frame là một đơn vị truyền dữ liệu nhỏ nhất trong giao tiếp LIN.
LIN message (thông điệp LIN) là một tập hợp nhiều SCI frames ghép lại để tạo thành một gói dữ liệu hoàn chỉnh.
Giả sử bạn muốn gửi chữ “OK” qua LIN:
- Chữ ‘O’ được mã hóa thành một SCI frame.
- Chữ ‘K’ cũng được mã hóa thành một SCI frame.
- Hai SCI frames này được ghép lại thành một thông điệp LIN chứa từ “OK”.
Mỗi SCI frame chỉ chứa một phần nhỏ của thông tin, còn LIN message là tập hợp nhiều SCI frames để truyền tải dữ liệu đầy đủ.
Nguyên tắc Commander-Responder trong LIN
1. Vai trò của Commander và Responders
Mỗi hệ thống LIN (cluster) có một Commander và tối đa 16 Responders.
Commander điều khiển toàn bộ giao tiếp, thực hiện cả nhiệm vụ gửi lệnh (Commander task) và phản hồi lệnh (Responder task).
Responders chỉ có nhiệm vụ phản hồi khi được Commander yêu cầu. Chúng không thể tự liên lạc với nhau.
2. Cách giao tiếp giữa Commander và Responders
Commander gửi yêu cầu đến một Responder thông qua header (phần đầu của frame).
Responder phản hồi lại bằng response frame nếu được yêu cầu. Trong một số trường hợp, Commander có thể gửi cả header và response, Responder chỉ lắng nghe mà không phản hồi.
Vì chỉ Commander có quyền khởi tạo giao tiếp, nên không có tình trạng xung đột dữ liệu trên bus, giúp hệ thống hoạt động dự đoán trước được (predictable).
3. LIN hoạt động dựa trên lịch trình
LIN hoạt động theo lịch trình (schedule), nghĩa là mọi dữ liệu được truyền theo thời gian được xác định trước, tránh trường hợp các thiết bị tranh giành quyền gửi dữ liệu gây xung đột.
Commander sẽ gửi các token (yêu cầu gửi dữ liệu) theo thời gian định trước, và Responder có thể trả lời, bỏ qua, hoặc chỉ nhận dữ liệu theo yêu cầu.
Có tối đa 64 thông điệp (messages) trong một hệ thống LIN, giúp hệ thống có giới hạn rõ ràng về số lượng dữ liệu có thể trao đổi.
4. Nhược điểm của mô hình Commander-Responder
Hệ thống phụ thuộc hoàn toàn vào Commander. Nếu Commander gặp lỗi, cả mạng LIN sẽ ngừng hoạt động.
Không hỗ trợ giao tiếp theo sự kiện (event-driven communication). Responder chỉ có thể phản hồi khi được yêu cầu, không thể tự gửi dữ liệu khi có sự kiện xảy ra.
Vì những hạn chế trên, LIN không phù hợp cho các ứng dụng an toàn (safety-critical applications), ví dụ như hệ thống phanh ABS, túi khí,…
Xem thêm: Tổng quan về giao thức SPI
Message Frame Format
Mỗi tin nhắn trong giao thức LIN (Local Interconnect Network) đều có cấu trúc cụ thể, chia thành hai phần chính:
- Phần đầu (Header) – do nút điều khiển (Commander) gửi.
- Phần phản hồi (Response) – do nút phản hồi (Responder) gửi.
1. Phần đầu (Header)

Phần này giúp đồng bộ các thiết bị trên mạng LIN. Bao gồm:
- Sync Break (ngắt đồng bộ).
- Sync Field (trường đồng bộ).
- Protected Identifier (PID) (định danh bảo vệ).
a. Sync Break (Ngắt đồng bộ)
Một chuỗi ít nhất 13 bit mức thấp giúp các nút phụ (Slave) nhận ra rằng một thông điệp mới sắp bắt đầu.
Delimiter (Khoảng dừng):
- 1 bit mức cao ngay sau Sync Break.
- Giúp tách biệt Sync Break với Sync Field, tránh xung đột tín hiệu.

b. Sync Field (Trường đồng bộ)
Gồm 10 bit, giúp tất cả các nút trên bus LIN đồng bộ với thời gian của Master mà không cần thạch anh hay bộ dao động riêng.
Cấu trúc:
- 1 bit Start
- 8 bit dữ liệu (luôn là 0x55 – 01010101, giúp Slave đo tốc độ baudrate)
- 1 bit Stop

c. Protected Identifier (PID) (Định danh bảo vệ)

Gồm 10 bit, giúp xác định nút Slave nào sẽ nhận hoặc phản hồi dữ liệu.
Cấu trúc:
- 1 bit Start
- 6 bit Identifier (ID) (xác định loại dữ liệu trong message)
- 2 bit Parity (bit chẵn lẻ) (dùng để kiểm tra lỗi)
- 1 bit Stop
Xem thêm: Ngắt là gì? Nguyên lý hoạt động của ngắt
6 Bit Identifier (ID):
Ý nghĩa của bit ID4 và ID5: 2 bit quan trọng nhất (ID4 và ID5) được dùng để xác định độ dài dữ liệu trong khung.
ID5 | ID4 | Data length (Bytes) |
0 | 0 | 2 |
0 | 1 | 2 |
1 | 0 | 4 |
1 | 1 | 8 |
ID Range (Khoảng ID) | Giá trị Hex | Độ dài dữ liệu (bytes) |
0 → 31 | 0x00 – 0x1F | 2 bytes |
32 → 47 | 0x20 – 0x2F | 4 bytes |
48 → 63 | 0x30 – 0x3F | 8 bytes |
Frame ID được chia thành 3 nhóm chính, mỗi nhóm có một chức năng khác nhau:
Decimal Value (Giá trị thập phân) | Hex Value (Giá trị Hex) | Mô tả (Description) |
0 → 59 | 0x00 – 0x3B | Dùng cho khung tín hiệu (signal carrying frames), tức là chứa dữ liệu cảm biến, trạng thái hệ thống, v.v. |
60 → 61 | 0x3C – 0x3D | Dùng để truyền dữ liệu chẩn đoán và cấu hình hệ thống (diagnostic & configuration data). |
62 → 63 | 0x3E – 0x3F | Dự trữ cho các tính năng mở rộng trong tương lai (reserved for future enhancements). |
2 bit Parity:
- Bit chẵn lẻ là gì?
- Là các bit được thêm vào để giúp phát hiện lỗi khi truyền dữ liệu.
- Trong LIN, có hai bit chẵn lẻ: P0 và P1.
- Cách tính P0 và P1:
- P0 được tính bằng phép XOR của các bit ID:
- P0=ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
- P1 là phủ định (NOT) của phép XOR các bit khác:
- P1=¬(ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
- P0 được tính bằng phép XOR của các bit ID:
- Tại sao cần tính P0 và P1?
- Các thiết bị slave trong mạng LIN luôn kiểm tra ID mà chúng nhận được.
- Nếu bit chẵn lẻ đúng, chúng sẽ quyết định có nhận dữ liệu, gửi phản hồi hay không làm gì cả.
Ví dụ: Master truyền 0x26 → 10 0110
- P0 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
- P1 = ¬ (1 ⊕ 0 ⊕ 0 ⊕ 1) = 1
Ta được kết quả:

2. Phần phản hồi (Response)

Sau khi Header được Master gửi đi, Response (phản hồi dữ liệu) sẽ được gửi bởi Slave hoặc Master, tùy theo PID (Protected Identifier) quyết định.
Response gồm hai phần chính:
- Data Bytes (Dữ liệu – tối đa 8 byte)
- Checksum (Mã kiểm tra lỗi)
a. Data Bytes (Dữ liệu)

Tối đa 8 byte dữ liệu, mỗi byte gồm 10 bit:
- 1 bit Start (luôn mức thấp)
- 8 bit dữ liệu
- 1 bit Stop (luôn mức cao)
b. Checksum (Mã kiểm tra lỗi)
Checksum giúp phát hiện lỗi trong quá trình truyền dữ liệu trong mạng LIN.
Khi Master gửi dữ liệu, nó tính checksum và gửi kèm theo. Khi Slave nhận dữ liệu, nó tự tính lại checksum từ các byte dữ liệu nhận được. Nếu checksum do slave tính ra không khớp với checksum nhận được Master thì dữ liệu đã bị lỗi → bỏ qua hoặc yêu cầu gửi lại.
Sử dụng 60 → 61 (Theo bảng Frame ID đã nhắc ở trên) để yêu cầu checksum.
Cấu trúc:
- Gồm 10 bit để kiểm tra tính toàn vẹn của dữ liệu:
- 1 bit Start (mức thấp)
- 8 bit Checksum (giá trị tính toán từ Data Bytes)
- 1 bit Stop (mức cao)
Có 2 kiểu checksum:
- Classic checksum:
- Định nghĩa: là cách kiểm tra lỗi bằng cách cộng tất cả các byte dữ liệu trong frame và lấy phần bù (inverse).
- Cách tính checksum:
- Bước 1: Cộng tất cả các byte dữ liệu.
- Bước 2: Nếu tổng ≥ 256, trừ đi 255 (giữ giá trị trong phạm vi 8-bit).
- Bước 3: Lấy phần bù (inverse) của kết quả.
- Ví dụ: dữ liệu có 4 bytes lần lượt là: 0x10 (0001 0000), 0x20 (0010 0000), 0x30 (0011 0000), 0x40 (0100 0000)
- 0x10 + 0x20 = 0x30
- 0x30 (từ kết quả vừa tính) + 0x30 = 0x60
- 0x60 (từ kết quả vừa tính) + 0x40 = 0xA0 (1010 0000)
- ¬ (1010 0000) = 0101 1111 (0x5F)
- Nếu Master và Slave đều tính ra kết quả là 0x5F thì dữ liệu được gửi và nhận hợp lệ.
- Khi nào dùng Classic checksum:
- Dùng trong LIN 1.x
- Dùng với master request frame & slave response frame
- Enhanced checksum:
- Enhanced Checksum là một phương pháp tính tổng kiểm tra trong giao thức LIN 2.x.
- Cách tính enhanced checksum:
- Cộng các byte dữ liệu với nhau, nhưng khác với kiểu classic checksum, nó bao gồm cả PID (Protected Identifier Byte).
- Nếu có bit nhớ (carry bit) (tổng lớn hơn 8-bit), nó sẽ được cộng dồn vào phần còn lại.
- Kết quả cuối cùng sẽ được nghịch đảo bit (bitwise inverse) để tạo giá trị checksum.
- Ví dụ: PID: 0xF Data Feild: 0x10, 0x20, 0x30, 0x40

Xem thêm: Tổng quan về Kiến trúc ARM Cortex-M3
LIN Schedule Table
Mạng LIN (Local Interconnect Network) là một hệ thống truyền thông master-slave, có nghĩa là một thiết bị (master) điều khiển nhiều thiết bị khác (slave).
1. Tại sao lại sử dụng LIN schedule Table
Vấn đề:
- Trong mạng có nhiều thiết bị, nếu tất cả truyền dữ liệu cùng lúc sẽ bị xung đột (collision).
- Cần có một cách tổ chức để xác định ai được gửi và nhận dữ liệu vào thời điểm nào.
Giải pháp:
- Master sử dụng bảng lập lịch (Schedule Table) để quy định thời gian và trình tự truyền dữ liệu.
- Mỗi thiết bị chỉ được phép truyền dữ liệu vào đúng thời điểm được chỉ định.
- Bảng lập lịch (Schedule Table) được cấu hình sẵn trong LDF.
2. Cách hoạt động của LIN schedule Table
a. Khái niệm:
Trong kiến trúc master-slave của LIN Cluster, nút master điều khiển giao tiếp qua cơ chế gọi là truy cập token được ủy quyền (delegated token bus access).
- Master quyết định khi nào các slave được phép gửi hoặc nhận dữ liệu.
- Nó thực hiện điều này dựa trên LIN schedule Table.
- Nhờ có lịch trình cố định này, việc giao tiếp trong mạng LIN có thể dự đoán trước, không bị ngẫu nhiên.

LIN schedule Table được chia thành các phần:
Tại thời điểm T1:
- Ở Master task:
- Cột đầu tiên: Xác định thời điểm truyền dữ liệu (T1).
- Cột thứ hai: Chứa thông tin về Frame slot 1, nơi các gói tin được gửi đi.
- Ở slave tasks:
- Slave nhận Loại frame: Unconditional (không có điều kiện đặc biệt, dữ liệu sẽ được truyền theo lịch trình cố định).
- ID frame: 0x10.
- Các task:
- Master nhận dữ liệu (Receiver).
- Slave A gửi dữ liệu (Sender).
- Slave B cũng nhận dữ liệu (Receiver).
Tại thời điểm T2:
- Ở Master task:
- Cột đầu tiên: Xác định thời điểm truyền dữ liệu (T2).
- Cột thứ hai: Chứa thông tin về Frame slot 2, nơi các gói tin được gửi đi.
- Ở slave tasks:
- Slave nhận Loại frame: Unconditional (không có điều kiện đặc biệt, dữ liệu sẽ được truyền theo lịch trình cố định).
- ID frame: 0x12.
- Các task:
- Master gửi dữ liệu (Sender).
- Slave A nhận dữ liệu (Receiver).
- Slave B không tham gia (—).
b. Mini-slot và Time base:
Mini-slot là khoảng thời gian nhỏ nhất dành cho một khung dữ liệu (frame) trong mạng LIN. Nó giúp đảm bảo rằng mỗi frame có đủ thời gian để truyền và tránh xung đột dữ liệu.
Tbase là đơn vị thời gian cơ bản trong hệ thống LIN, thường được dùng làm tham chiếu để tính toán thời gian của các mini-slot.
Time base thường được định nghĩa trong nút Master, và mini-slot được thực thi trong LDF.
Ví dụ về Mini-slot và Time base trong LDF:
LIN_description_file;
Protocol_version = "2.2";
LIN_speed = 19200; # Tốc độ truyền dữ liệu 19.2 kbps
Nodes {
Master: MasterNode, 10ms, 0.1ms; # Tbase = 10ms, jitter = 0.1ms
Slaves: SlaveNodeA, SlaveNodeB;
}
Schedule_tables {
Main {
SlaveNodeA_Command delay 20ms; # 2 mini-slots (20ms / 10ms)
SlaveNodeA_Response delay 30ms; # 3 mini-slots (30ms / 10ms)
SlaveNodeB_Command delay 50ms; # 5 mini-slots (50ms / 10ms)
SlaveNodeB_Response delay 10ms; # 1 mini-slot (10ms / 10ms)
}
}
Xem thêm: Tổng quan về GPIO
Đặc tính của Bus LIN
1. Nguyên lý tín hiệu trên bus LIN
LIN sử dụng truyền thông đơn cực (single-ended), tức là không dựa trên chênh lệch điện áp giữa hai dây như CAN mà chỉ dùng một dây. Các mức điện áp trên bus LIN dựa trên tỷ lệ phần trăm so với điện áp ắc quy (battery voltage), vì không có mức điện áp cố định như trong các hệ thống vi điều khiển chuẩn logic 3.3V hay 5V. Hai trạng thái chính:
- Recessive (cao – High): Khi bus không bị tác động, điện áp trên bus sẽ gần bằng điện áp ắc quy nhờ điện trở pull-up.
- Dominant (thấp – Low): Khi một thiết bị truyền tín hiệu, nó sẽ kéo bus xuống gần mức 0V.
Hệ thống LIN có thể hiểu như một mạch open-drain, cần điện trở pull-up để giữ mức cao khi không có thiết bị nào đang truyền.
2. Giá trị điện trở pull-up
Commander (master):
- Cần điện trở pull-up ngoài nối với điốt bảo vệ để chống đảo cực.
- Giá trị điển hình: 1 kΩ (có thể thay đổi từ 500 Ω đến 600 Ω).
- Điện trở này kết nối với nguồn ắc quy (battery voltage).
Responder (slave):
- Dùng điện trở pull-up bên trong vi mạch (không cần thêm điện trở ngoài).
- Giá trị điển hình: 30 kΩ.

3. Ngưỡng điện áp (Threshold Voltage)
Mức điện áp để nhận biết tín hiệu 0 (Dominant) và 1 (Recessive) giữa thiết bị gửi (sender) và thiết bị nhận (receiver) có một độ chênh nhất định do sụt áp trên dây, thay đổi điện áp nguồn, hoặc do thành phần lọc trên bus.


Giao thức LIN cung cấp một giải pháp truyền thông đơn giản, tiết kiệm chi phí cho các hệ thống nhúng trong ô tô. Với mô hình Master-Slave và khả năng sử dụng một dây duy nhất, LIN phù hợp cho các ứng dụng không yêu cầu tốc độ cao hay độ tin cậy nghiêm ngặt như mạng CAN. Việc sử dụng LIN Description File (LDF) giúp chuẩn hóa quá trình thiết kế và triển khai hệ thống, đảm bảo tính tương thích giữa các thiết bị. Tuy còn hạn chế về mặt hiệu suất và khả năng mở rộng, LIN vẫn là lựa chọn tối ưu cho các hệ thống điều khiển đơn giản trong ngành công nghiệp ô tô.
Xem thêm: I3C: Sự kết hợp hoàn hảo giữa I2C và SPI