LIN 总线:单线主从、同步场、校验和与汽车子网络
更新时间:2026-09-19。前置:UART 波特率与 FIFO、CAN 总线。LIN(Local Interconnect Network)用于成本比速率更重要的车身子网络,常作为 CAN 下挂的支线,经 CAN-LIN 网关连接。
本文要回答的问题
- LIN 只有一根线、没有独立时钟,多个从节点怎么对齐波特率?
- 一帧 LIN 报文由哪些场组成,主从如何分工?
- 经典与增强校验和差在哪?睡眠/唤醒怎么做?
- 控制器/UART 实现有哪些位定时和电平坑?
一、物理与拓扑
- 单线 + 地,开漏/上拉(主节点有较强制动的上拉),逻辑电平通常 12V 系统电池电压(经收发器,不是直接 TTL)。
- 单主多从(典型 ≤16 节点),速率 1–20 kbps(常用 19.2k),总线长度/节点数受上拉和 EMI 约束。
- 无仲裁、无多主:一切传输由唯一主节点按调度表发起,因此没有冲突。
二、帧结构(13 位 + 数据)
一帧由**帧头(header,主发)和响应(response,主或某从发)**组成:
bash
帧头(主机发):
Break(间隔, ≥13 位显性) Sync(0x55) PID(受保护ID)
响应:
DATA0..DATA7 (1/2/4/8 字节) Checksum(校验和)
帧间有帧间隙(inter-frame space)- Break/Sync delimiter:先一段 ≥13 位时间的显性(低)打破普通 UART 帧,再一个分隔位(高),告诉所有从机「帧开始」。
- 同步场 0x55:二进制
01010101,产生连续 8 个交替跳变。从机用本地高频时钟测这些边沿,自动算出主机位时间,校准自己的波特率(类似 UART 自动波特率,见 UART 自动波特率)。这正是单线无独立时钟还能多节点同步的关键。 - PID(Protected ID):低 6 位是帧 ID(0–59 信号帧,60/61 诊断,保留等),高 2 位是由低 6 位算来的奇偶校验位。从机根据 ID 判断自己是否发布/订阅该帧。
- 数据场:标准 2/4/8 字节。
- 校验和:
- 经典校验和(classic,v1.x):只对数据字节求和取反。
- 增强校验和(enhanced,v2.x):把 PID 也算进去。诊断帧 0x3C/0x3D 等用经典校验,避免新旧节点混乱。
三、调度表(schedule table)
主节点不被请求驱动,而是按一张时间触发的调度表周期性发帧头:在每个时隙发某个 PID,由对应从机(或主机自己)填响应。这保证确定性、无冲突,并可预测总线负载。诊断、配置(通过 0x3C 主请求/0x3D 从响应帧走 UDS 风格服务)也占专用时隙。
四、睡眠与唤醒
- 睡眠命令:主机发 ID=0x3C 含 go-to-sleep 字节,或总线静默 ≥4s,节点进入睡眠(收发器静默、电流低)。
- 唤醒:任一节点拉显性约 250μs–5ms 的 wake-up pulse,主机检测到后重新发起 Break/Sync 建帧;为防多节点同时唤醒冲突,有随机化/重发规则。
五、实现要点
- 多数 LIN 节点用普通 UART + 软件处理 Break/校验/PID,或专用 LIN 外设/UART 带 break 检测。
- Break 需要发送/检测「13 位以上低电平」,超出标准 UART 的帧格式,靠 BREAK 字符 + 软件或 LIN 模式支持。
- 波特率容差:从机靠 0x55 校准后还要在整个响应内维持精度,RC 振荡器温漂要在容差内。
- 收发器(如 TJA1021)负责 12V 电平、INH 抑制脚唤醒、TXD/RXD 到 UART。
六、常见的坑
- 同步场当成普通数据:忽略 0x55 校准,RC 振荡器有误差时位采样漂到出错。
- Break 长度不足:<13 位显性,部分从机不认帧头。
- 校验和版本用错:普通帧用经典、增强帧带 PID、诊断帧固定经典,混用导致校验失败。
- PID 奇偶位算错:高 2 位不是固定值,要按 ID 计算,从机拒收。
- 多从响应同一 ID:调度/配置错误导致两个节点同时驱动单线。
- 上拉强度/总线电容错:主节点串联上拉与从机电容不匹配,低速沿坍塌。
- 唤醒脉冲过长/过短:不合 250μs–5ms 或不防冲突,唤醒不可靠。
- 12V 直连 MCU 脚:未用 LIN 收发器,损坏 UART。
- 帧间隙不规范:时隙过长被当空闲、过短违反 inter-byte 时间。
- 诊断帧按普通帧处理:0x3C/0x3D 的校验和/长度规则不同。
- 时钟精度超容差:廉价 RC 在温度范围漂出 ±1.5%~2%,即使有同步也会在响应段累积误差。
相关与延伸
车载主干见 CAN 总线、CAN FD;位时间测量原理见 UART 自动波特率;开漏线见 I2C 主机。
总结
LIN 是单主多从、单线开漏、1–20kbps 的低成本汽车总线,没有仲裁也没有独立时钟:主机按时间触发的调度表发「≥13 位显性 Break + 0x55 同步场 + PID」帧头,从机用 0x55 的连续跳变自动校准波特率,再由对应从机回数据和校验和;普通帧用增强校验(含 PID)、诊断帧用经典校验,睡眠由总线静默或命令进入、任一方可拉显性脉冲唤醒——Break 长度、0x55 校准、校验和版本和 RC 时钟精度是四大坑。