4. LIN帧结构与协议规范
LIN(Local Interconnect Network)是一种低成本、单主多从的串行通信总线,广泛用于车身电子中的车窗、雨刮、座椅、空调风门等子系统。理解LIN帧结构,是从节点开发与调试的第一道门槛。一个完整的LIN帧并不是简单地把数据打包发送,而是由帧头(Header)和响应(Response)两大部分组成,帧头由主机节点发出,响应可由主机或从机发出。帧头包含同步间隔场、同步场和标识符场;响应包含数据场和校验和场。只有把每个场的时序、位模式和校验规则都弄清楚,才能在调试中快速定位“帧错误”“校验和错误”“从机不响应”等问题。
一、LIN帧的五个场:从同步到校验
LIN帧按时间顺序依次为:同步间隔场(Break Field)、同步场(Sync Field)、标识符场(Identifier Field)、数据场(Data Field)、校验和场(Checksum Field)。前三个场构成帧头,后两个场构成响应。下面逐一说明。
- 同步间隔场:至少13个显性位(逻辑0)的间隔,随后是间隔定界符。它的作用是让所有从机检测到帧起始,并重新同步其位采样时钟。从机通常通过下降沿和持续时间判断Break,若Break太短,从机会忽略整帧。
- 同步场:固定字节0x55,即二进制01010101。从机通过测量该字节中相邻下降沿之间的时间,计算主机波特率,从而校准自身位时间。0x55的位模式保证有足够的边沿供从机锁相。
- 标识符场:1字节,低6位为帧ID(0x00~0x3F),高2位为奇偶校验位P0、P1。ID决定帧的类型、方向、数据长度以及由哪个节点发布响应。从机收到ID后,先校验奇偶位,再决定是否参与响应。
- 数据场:1~8字节,具体长度由ID对应的帧属性决定。数据按小端序(低字节先发)传输,每个字节先发LSB。数据场内容由发布节点填充,订阅节点接收。
- 校验和场:1字节,分为经典校验和与增强校验和。经典校验和只对数据字节求和取反;增强校验和还要把ID字节纳入计算。LIN 2.x规范推荐使用增强校验和,诊断帧必须使用增强校验和。
关键点:帧头由主机发出,响应由主机或从机发出。主机发送帧头后,若ID指向的发布节点是从机,则主机进入接收状态;若发布节点是主机自身,则主机继续发送响应。从机只有在ID匹配且奇偶校验通过时才发送或接收响应。
二、标识符场的奇偶校验与ID分配
标识符场是LIN帧的“身份证”。它的8位中,ID0~ID5是帧标识,ID6是奇偶校验位P0,ID7是奇偶校验位P1。P0和P1的计算规则如下:
P0 = ID0 ⊕ ID1 ⊕ ID2 ⊕ ID4
P1 = ¬(ID1 ⊕ ID3 ⊕ ID4 ⊕ ID5)
从机收到标识符后,必须重新计算P0和P1,并与接收到的位比较。若不一致,从机应忽略该帧,不发送响应,也不产生错误帧。这一机制能有效过滤总线上的噪声和错误ID。ID 0x3C和0x3D是保留的诊断帧ID:0x3C用于主机请求帧(Master Request),0x3D用于从机响应帧(Slave Response)。诊断帧的数据场通常为8字节,第一字节为NAD(节点地址),后续为PCI和SID等诊断数据。
三、校验和:经典与增强的选择
校验和场是LIN帧的最后一道防线。经典校验和(Classic Checksum)只对数据场字节求和,公式为:校验和 = 0xFF - (数据字节之和的低8位)。增强校验和(Enhanced Checksum)则把标识符字节也纳入求和,公式为:校验和 = 0xFF - (ID + 数据字节之和的低8位)。
| 校验类型 | 参与计算的字节 | 适用帧 | 典型ID |
|---|---|---|---|
| 经典校验和 | 仅数据场字节 | LIN 1.x遗留帧、部分非诊断帧 | 0x00~0x3B中部分 |
| 增强校验和 | ID + 数据场字节 | LIN 2.x推荐、诊断帧、事件触发帧 | 0x3C、0x3D及多数应用帧 |
常见误区:很多初学者在调试时发现“从机不响应”,第一反应是硬件接线问题,但实际上更常见的原因是ID奇偶校验错误或校验和类型配置不一致。例如,主机用增强校验和发送,从机却按经典校验和验证,就会导致校验和错误,从机丢弃数据。建议在LDF(LIN Description File)中明确每个帧的校验和类型,并在代码中保持一致。
四、帧类型:无条件、事件触发、偶发与诊断
LIN协议定义了四种帧类型,它们决定了帧的调度方式和响应行为。
- 无条件帧(Unconditional Frame):最基础的帧类型。主机发送帧头后,由ID指定的发布节点(主机或从机)发送响应。每个无条件帧的ID唯一对应一个发布节点,数据长度固定。它通常按调度表周期发送,适用于车窗位置、温度值等周期性数据。
- 事件触发帧(Event Triggered Frame):多个从机共享同一个ID。主机发送帧头后,如果只有一个从机有数据要发布,该从机发送响应,帧正常完成;如果有多个从机同时响应,总线发生冲突,主机检测到冲突后,会切换到偶发帧,依次查询每个从机。事件触发帧能显著降低总线负载,适用于车门开关、座椅占用等低频事件。
- 偶发帧(Sporadic Frame):由主机或从机按需发布,不按固定周期发送。主机在调度表中为偶发帧预留时隙,但只有当发布节点有更新数据时才发送响应。偶发帧常用于状态变化通知,避免周期性发送无变化的数据。
- 诊断帧(Diagnostic Frame):ID固定为0x3C和0x3D,数据场为8字节,必须使用增强校验和。0x3C是主机请求帧,主机向从机发送诊断请求;0x3D是从机响应帧,从机向主机返回诊断响应。诊断帧是LIN节点刷写、故障读取和节点配置的核心通道。
五、调试案例:从机不响应的排查流程
假设你正在调试一个车窗从节点,主机发送ID 0x21的帧头后,从机始终不响应。可以按以下顺序排查:
- 检查同步间隔场:用示波器测量Break宽度,确认≥13位显性。若Break太短,从机不会进入帧接收状态。
- 检查同步场:确认同步场为0x55,且从机测量的波特率与主机一致。若波特率偏差超过±2%,从机可能采样错误。
- 检查标识符场:确认ID为0x21,并重新计算P0、P1。若奇偶校验错误,从机会静默丢弃。
- 检查数据长度和校验和类型:确认LDF中该帧的数据长度为2字节还是8字节,校验和是经典还是增强。长度不匹配会导致从机提前或延后结束接收。
- 检查从机配置:确认从机的NAD、帧ID映射和发布/订阅角色与LDF一致。若从机被配置为订阅节点,它不会发送响应。
调试建议:使用LIN分析仪时,先抓取完整帧的原始字节,再逐场比对。重点关注Break宽度、0x55同步场、ID奇偶校验和校验和计算结果。很多“不响应”问题其实不是从机坏了,而是帧头某个场不符合规范,导致从机根本没有进入响应流程。
掌握LIN帧的五个场和四种帧类型,是从节点开发的基本功。在实际项目中,建议把每个帧的ID、长度、校验和类型、发布节点、调度周期整理成表格,与LDF文件逐项核对。只有这样,才能在调试时快速定位问题,而不是盲目更换硬件或反复烧录程序。