CAN/CANFD
CCP/UDS
Bootloader/OTA
ECU/VCU/FCU
Simulink/ECUCoder
Ethernet
Hardware
Download
上一篇
下一篇
LIN总线基础知识
一.LIN总线概述
-1.1.LIN总线规范
-1.2.LIN网络与节点
-1.3.LIN的主从节点与主从任务
-1.4.LIN网络的特点
二.LIN物理层
-2.1.LIN收发器
-2.2.时钟源与同步
-2.3.端接电阻
三.LIN协议层
-3.1.帧结构
-3.2.帧传输时间
-3.3.进度表
-3.4.帧时隙
-3.5.帧的类型
-3.6.状态机
-3.7.网络管理和状态管理
四.传输层
-4.1.PDU结构
-4.2.传输层通信
五.应用层
-5.1.信号处理功能
-5.2.配置功能与识别功能
-5.3.诊断功能
六.工作流
-6.1.LIN描述文件
-6.2.LDF Edit:LDF文件编辑软件
-6.3.使用控制器收发LIN报文
回到顶部
LIN总线基础知识
一.LIN总线概述
-1.1.LIN总线规范
-1.2.LIN网络与节点
-1.3.LIN的主从节点与主从任务
-1.4.LIN网络的特点
二.LIN物理层
-2.1.LIN收发器
-2.2.时钟源与同步
-2.3.端接电阻
三.LIN协议层
-3.1.帧结构
-3.2.帧传输时间
-3.3.进度表
-3.4.帧时隙
-3.5.帧的类型
-3.6.状态机
-3.7.网络管理和状态管理
四.传输层
-4.1.PDU结构
-4.2.传输层通信
五.应用层
-5.1.信号处理功能
-5.2.配置功能与识别功能
-5.3.诊断功能
六.工作流
-6.1.LIN描述文件
-6.2.LDF Edit:LDF文件编辑软件
-6.3.使用控制器收发LIN报文
回到顶部
# LIN总线基础知识 ## 一.LIN总线概述
LIN:Local Interconnect Network,是一种常用的车载总线。LIN总线往往与CAN总线一起使用构成完整的通信网络,此时ECU成为两种总线网络交互的网关,如图1-1所示。 ![](images/2022-12-29-14-48-08-CAN&LIN.png)
图1-1 CAN总线与LIN总线
LIN总线是针对汽车分布式电子系统而定义的一种低成本串行通信总线,是对CAN总线的一种补充,适用于对网络的带宽、性能或容错要求不高的总线应用。LIN总线是基于UART/SCI开发的协议,采用主从控制方式,单主机多从机的工作模式。 在不需要CAN总线的带宽和多功能的场合下,例如智能传感器和ECU之间的通信使用LIN 总线,可大幅节省成本。对线束布置空间的要求和重量也会随之降低,系统可以进行灵活的扩展,可以继续在总线上继续挂接传感器和执行器。 在汽车应用中,LIN总线主要用于车身系统,例如:后视镜调节、座椅调节、电动车窗、雨刮器控制、顶灯控制、空调系统等。 ### 1.1.LIN总线规范
在1998年10月德国Baden Baden召开的汽车电子会议上LIN 总线的设想首次被提出,1999 LIN 联盟正式成立,最初成员包括了不少知名的主机厂,例如:奥迪、宝马、克莱斯勒、摩托罗拉等。并且开始制定用于传感器和执行器全面、简单、低成本、标准化的通信网络,LIN规范就此诞生,并且不断更新,如表1.1-1所示。 | 时间 | 版本 | 备注 | | ------- | --------- | ---------------------------------------------- | | 1999.07 | LIN 1.0 | | | 2000.03 | LIN 1.1 | 包括LIN协议规范,API规范和配置语言规范 | | 2000.11 | LIN 1.2 | | | 2002.12 | LIN 1.3 | 更新了物理层规范 ,提高了节点之间的兼容性 | | 2003.09 | LIN 2.0 | 更新了诊断规范,规定了节点性能文件。
SAE J2602 是基于LIN 2.0的变形. | | 2006.11 | LIN 2.1 | 更新了传输层规范和节点配置规范。 | | 2010.12 | LIN 2.2A | | | 2016 | ISO 17987 | LIN的国际标准 |
表1.1-1 LIN协议版本
### 1.2.LIN网络与节点
LIN总线由1个主节点与多个从节点组成,所用的通信都是由主机任务发起,一般情况下LIN网络不会在汽车网络中单独存在,经常与上层网络(CAN/CAN FD/Ethernet)互联,LIN网络一般作为下层子网使用。单个ECU也可以提供多个LIN接口接入不同的LIN通信网络中,如图1.2-1所示。 ![](images/2023-01-30-09-48-03.png)
图1.2-1 LIN网络与节点
### 1.3.LIN的主从节点与主从任务
LIN总线采用单主机多从机的通信方式,主节点(Master Node)包括主机任务(Master Task)与从机任务(Slave Task),从节点(Slave Node)只包括从机任务,由于物理层的限制,LIN网络最多只能连接16个节点,如图1.2-1所示。 ![](images/2023-01-30-10-01-39.png) 主机任务: 1. 调度总线上帧的传输次序; 2. 监控数据,处理错误; 3. 作为标准时钟参考; 4. 接收从节点发出的唤醒总线命令。 从机任务,对接收到的帧头进行判断,执行以下3中任务中的一种: 1. 发送应答; 2. 接收应答; 3. 既不接收也不发送应答。 ### 1.4.LIN网络的特点
1. LIN网络采用主从控制方式,网络由单个主节点和多个(或者单个)从节点构成。 2. LIN规范免费开放,低成本硬件接口和LIN协议标准化API接口可以缩短软件开发周期,大幅度削减通信成本。 3. 信号传输可靠、可以提前计算出传播时间。 4. LIN具有可预测性,LIN采用工作流(Work Flow)和现成节点(Off-the-shelf Node)的概念,将网络装配标准化,并且可以通过LIN传输层进行配置。 5. LIN提供了信号处理、配置、识别、诊断四项功能。 ## 二.LIN物理层
1. LIN相对于CAN是一种低成本的通信总线,只需要一根线即可完成通信,并且可以不需要通信控制器,单线/总线电压为12V。 2. 基于通用UART/SCI的低成本硬件接口。 3. LIN网络的典型速率为2.4~19.6kb/s,最高可达20kb/s。 4. 一条总线最多可以连接16个节点。 5. 从节点设备不需要配备高精度时钟源,EMI低相对可控。 ### 2.1.LIN收发器
总线上存在显性(0)和隐性(1)两种逻辑,总线实行线与逻辑,当总线上有大于等于1个节点发送显性电平时,总线呈显性电平即逻辑0。 LIN总线的电平参考点是总线收发器的电源参考点。由于电源的波动,参考点会产生不同程度的偏移,LIN规范要求总线收发器要能承受±11.5%的电源波动和参考点电平波动,并且能承受电源和参考点之间8%的电位差波动,收发器的电平鉴别阈值如表2.1-1所示。 按照LIN规范要求,LIN节点掉电或工作异常时,不能影响总线上其他节点工作,收发器还附带了总线阻抗匹配、压摆率(Slew-rate)控制等功能。 | 节点 | 显性 | 隐性 | 备注 | | ---- | ------- | ------- | ------------------------------------------ | | 发布节点 | 0.2Vsup | 0.8Vsup | 对于发送节点而言,
<20%Vsup为显性电平,>80%Vsup为隐性电平。 | | 收听节点 | 0.4Vsup | 0.6Vsup | 对于收听节点而言,
<40%Vsup为显性电平,>60%Vsup为隐性电平 |
表2.1-1 总线电平信号
### 2.2.时钟源与同步
LIN网络中的主节点必须设置较高精度的时钟,作为LIN网络的时间基准,而从节点则不需要,发送节点和接收节点需要同步来保证数据传输的准确性。 所有通信均由主节点发起,向总线发送帧头Header,在帧头的同步段中,从节点获取主节点的位速率,完成与主节点的同步。只要所有从节点都能在LIN通信时与主节点采用同样的位速率,网络就能正常工作,主从节点的位速率允许误差如表2.2-1所示。 虽然这种做法会降低传输效率,但是减少了高精度时钟的数据也降低了总线网络的成本。同时LIN网络中的报文都是按照固定的顺序一次发送的,也不需要总线仲裁,降低了软硬件设计的复杂度。 | 参数名称 | 允许误差 | 备注 | | --------------- | ----- | ---------------------------- | | Ftol_res_master | ±0.5% | 主节点位速率相对于额定位速率的最大偏差。 | | Ftol_res_slave | ±1.5% | 附带高精度时钟的从节点与额定位速率的最大偏差。 | | Ftol_unsync | ±14% | 不带高精度时钟的从节点在同步之前与额定位速率的最大偏差。 | | Ftol_sync | ±2% | 同步后,主节点和从节点位速率的最大偏差。 | | Ftol_sl_to_sl | ±2% | 收发应答期间,互相通信的两个从节点位速率的最大偏差。 |
表2.2-1 主节点和从节点的允许误差
在同步之前主从节点的位速率与额定位速率的误差应符合Ftol_res_master和Ftol_res_slave/Ftol_unsync的要求。同步之后,从PID段到校验和段,通信双方的位速率误差不大于±2%,即符合Ftol_sync和Ftol_sl_to_sl的要求。 如果是主从节点之间的通信,不论从节点是否利用同步段进行位速率修正,其位速率与额定位速率的误差不能大于(Ftol_sync - Ftol_res_master),即±1.5%。如果是从节点之间通信,各个从节点的位速率误差的要求将高于±1.5%。 在LIN总线中存在初始同步和重同步两种方式。 初始同步:LIN总线的主从节点在每次报文传输开始时需要建立同步,为了降低成本,LIN总线没有时钟线,使用RC振荡器,并且允许14%的最大偏差,当总线处于空闲状态时,总线状态为逻辑1,即隐性状态。数据开始传输时,由主节点实现初始同步,主节点会向总线发送同步间隔段和同步段,如图2.2-1所示。 - 同步间隔段:至少有13个显性位和至少1个隐性位的界定符组成。 - 同步段:包含1个起始位,8个数据位,1个停止位。 ![](images/2023-01-30-14-58-54.png)
图2.2-1 同步间隔段与同步段
**初始同步** 当从节点接收到主节点发送的同步场数据后,从节点计算同步场数据的第1个和最后一个下降沿的时间,并将此时间除以8,由此计算出主节点的位时间,同时根据计算的结果调整自身的位速率,从而使从节点和主节点的位速率一致 初始同步实现了所有从节点和主节点的时钟同步,但是在实际应用中,各节点之间的时钟精度是存在差异的,可能会导致位传输过程中产生偏差。 **重同步** 发送节点和接收节点可以利用起始位的下降沿进行同步,为了避免各节点时钟精度而产生的偏差,这个阶段的同步称为重同步。 ### 2.3.端接电阻
LIN规范规定了主节点和从节点的端接电阻,如表2.3-1所示。 | 节点 | 最小值 | 典型值 | 最大值 | 单位 | | --- | --- | ---- | ---- | --- | | 主节点 | 900 | 1000 | 1100 | Ω | | 从节点 | 20 | 30 | 60 | kΩ |
表2.3-1 端接电阻
## 三.LIN协议层
LIN总线包括帧报文、调度表、主/从节点状态转换、LIN网络休眠、唤醒和状态管理等功能。 ### 3.1.帧结构
LIN帧报文包括帧头(Header)和应答(Response)两部分。 主机任务负责发送帧头,从机任务接收到帧头后,对帧头进行解析,判断需要发送应答、接收应答、还是不作响应,一个帧头对应一个发送应答,如图3.1-1所示。 ![](images/2023-01-30-16-11-31.png)
图3.1-1 LIN报文传输
**帧头(Header)** 帧头由同步间隔段(Sync break field)、同步段(Sync field)和PID(Protected Identifier)组成。 - 同步间隔段:由至少13个持续的显性位和至少1个隐性位的界定符组成,由于总线空闲时处于隐性位,并且除同步间隔场外的任何其他字段都不会发出大于9个位的显性位,所以同步间隔可以表示一帧报文的起始。 - 同步段:用于初始同步,固定格式,长度10位,由起始位0,数据0x55,停止位1组成的字节域。 - PID:由6位ID和两位奇偶校验位组成,长度10位,ID范围0x00-0x3F,0x3C-0x3D为诊断报文,0x3E-0x3F保留。 LIN总线ID与PID对应关系是固定的,可以查阅本站《[LIN总线ID与PID对应关系查找表](./linpid.html)》。 **应答(Response)** 应答包含数据段(Data Field)与校验和段(Checksum)。 - 数据段:1~8字节。 - 校验和段:校验和保护传输内容。 在LIN总线中有两种校验模型,分别是经典校验和增强校验,经典校验仅校验数据场内容,增强校验则是校验PID和数据场内容。在LIN 1.3及以前的版本中没有增强校验。注意,在所有版本的LIN规范中,对于0x3C和0x3D诊断报文,均使用经典校验。 LIN帧报文结构如图3.1-1所示。 ![](images/2023-01-30-16-31-16.png)
图3.1-1 LIN帧报文结构
注:1个起始位(0)+8位数据位+1位停止位(1)表示为一个字节域,属于标准的标准UART数据编码方式,除了同步间隔段外,其余各段都是通过字节域的格式进行传输。在LIN帧报文中,数据传输都是先发送LSB(Least Significant Bit,最低有效位),最后发送MSB(Most Significant Bit,最高有效位)。 **1.同步间隔段** 同步间隔段(Break Field)由同步间隔(Break)和同步间隔段界定符(Break Delimiter)组成。同步间隔是至少持续13位的显性电平,由于帧中的所有间隔或者总线空闲时都应保持隐性电平,并且帧中的任何其它字段都不会发出大于9位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的间隔符为至少持续1位的隐性电平。 **2.同步段** 同步段(Sync Byte Field)用作各节点的同步,LIN同步以下降沿为判断标志,数据位固定为0x55,即0b 0101 0101,由于LIN的传输格式先发送LSB,经过转换后,总线上的同步数据为0b 1010 1010,同步段的字节域如图3.1-2所示。 从节点若不采用精度高的时钟,则需要通过同步段进行调整,以主节点的时钟为基准,使从节点的位速率与主节点一致。从节点通过接收主节点发出的同步段,计算出主节点位速率,根据计算结果对自身的位速率重新作调整。 计算公式如下:额定位时间=(MSB第7位的下降沿时刻)-(起始位的下降沿时刻)/8 ![](images/2023-02-06-13-06-53.png)
图3.1-2 同步段字节域
**3.受保护ID段** 受保护ID段(Protected Identifier Field)为6位帧ID+2位奇偶校验,受保护ID段的字节域如图3.1-3所示。 ![](images/2023-02-06-13-25-05.png)
图3.1-3 同步段字节域
帧ID的范围在0x00~0x3F之间,共64个。表达了不同的帧类别和目的地,从机任务根据帧ID做出相应的动作(接收/发送/忽略应答部分),帧ID分类如表3.1-1所示。 如果帧ID传输错误,将会导致信号无法正确到达目的地,通过奇偶校验位,判断帧ID是否异常。校验公式如下,其中“⊕”代表“异或”运算,“¬”代表“非”运算。 P0=ID0⊕D1⊕ID2⊕ID4 P1=¬(ID1⊕D3⊕ID4⊕1D5) 如果从节点收到的奇偶校验位为“0xFF”或“0x00”,则为传输错误。 | 帧类型 | 作用 | 帧ID | | ----- | ---------------------- | ------------- | | 信号携带帧 | 无条件帧
事件触发帧
偶发帧 | 0x00~0x3B | | 诊断帧 | 主机请求帧
从机应答帧 | 0x3C
0x3D | | 保留帧 | 保留 | 0x3E,0x3F |
表3.1-1 帧类型
注意:诊断帧中主机请求帧和从机应答帧分别是两帧完整的报文,这里的从机应答帧并不是指帧结构中的“应答”部分。 **4.数据段** 数据段(Data Field)用于存放节点发送的有效数据,包含1到8个字节,按照字节编号依次发送。 数据段的字节域如图3.1-4所示。 ![](images/2023-02-06-14-14-03.png)
图3.1-4 数据段字节域
数据段包含了两种数据类型,信号(Signal)和诊断消息(Diagnostic messages)。 - 信号 一个帧ID对应的数据段中可能包含1个或多个信号,通常由固定的节点发出,该节点应保证信号的完整性,称为发布节点(Publisher),其余接收该信号的节点称为收听节点(Subscriber)。 - 诊断信息 对消息内容的解析由数据自身和节点状态决定。 注意: 1. 协议中没有规定如何表示数据段数据长度的信息,需要根据实际应用商定。 2. 数据是以广播形式发送到总线上的,任何节点均能接收,但是各个节点应根据实际情况接收对自己有用的信息。 3. 由应用层规定各节点的发布与收听。一般情况下,同一时刻总线上只会存在一个发布节点,否则就会出现错误。事件触发帧例外。 **5.校验和段** 校验和段(Checksum Field)用于对帧中所传输的内容进行校验,校验和段字节域如图3.1-5所示。 ![](images/2023-02-06-15-07-03.png)
图3.1-5 校验和段字节域
校验和分为标准型校验和(Classic Checksum)以及增强型校验和(Enhanced Checksum),,如表3.1-2所示。 | 校验和类型 | 校验对象 | 适用场合 | | ------ | ------------- | ----------------------------- | | 标准型校验和 | 数据段各字节 | 诊断帧,与LIN 1.x从节点通信。 | | 增强型校验和 | 数据段各字节以及受保护ID | 与LIN 2.x从节点通信(诊断帧必须使用标准型校验和)。 |
表3.1-2 校验和类型
采用标准型校验和还是增强型校验和由主节点管理,发布节点和收听节点根据帧ID来判断采用哪种校验和。 - 发送方 根据校验和类型,将需要检验的各字节进行带位2进制加法(当结果大于255时,减去255)得出和,再将和作取反,以该结果作为发送的校验和。 - 接收方 根据校验和类型,对需要检验的各字节进行带位2进制加法,得出和,与接收到的校验和作加法,若结果为0xFF,则校验正确,否则校验错误。这种校验方法能够在一定程度上保证数据传输的正确性。 例如:采用标准型校验和,Data1=0xAA,Data2=0xBB,Data3=0xCC,Data4=0xDD,计算步骤如下: 0xAA+0xBB=0x165;(0x165>0xFF) 0x165-0xFF+0xCC=0x132;(0x132>0xFF) 0x132-0xFF+0xDD=0x110;(0x110>0xFF) 0x110-0xFF=0x11; ¬(0x11)=0xEE;(接收方不需要进行“非运算”,¬为布尔代数中的非运算,即按位取反) 发送方将发送的校验和为0xEE。 接收方将对需要检验的各字节进行带位2进制加法,得出和0x11,与0xEE相加为0xFF,则校验正确。 ### 3.2.帧传输时间
帧在总线上传输的时间计算如表3.2-1所示。 - T
Frame_Maximum
:表示一帧LIN报文在总线上传输的最大时间。 - T
Header_Maximum
:表示帧头在总线上传输的最大时间。 - T
Header_Nominal
:表示帧头额定传输时间,帧头额定传输时间=同步间隔段的最小传输时间+同步段传输时间+受保护ID段传输时间。 - T
Header_Rest
:表示帧头的余量,包含字节间间隔,规定值为0.4*T
Header_Nominal
。 - T
Response_Maximum
:表示应答在总线上传输的最大时间。 - T
Response_Nominal
:表示应答额定传输时间;应答额定传输时间=数据段传输时间+校验和段传输时间; - T
Response_Rest
:表示应答的余量,包含应答间隔以及字节间间隔,规定值为0.4*T
Response_Nominal
。 ![](images/2023-07-11-15-32-00.png)
表3.2-1 帧的传输时间
### 3.3.进度表
进度表(Schedule)是帧的调度表,规定总线上帧的传输次序以及各帧在总线上的传输时间。进度表位于主节点,主机任务根据应用层需要进行调度,进度表可以有多个,顺序循环执行,若发生冲突,则中断进度表,执行冲突解决进度表,示例如图3.3-1所示。 ![](images/2023-02-07-13-07-32.png)
图3.3-1 进度表
如上图所示: 1. 执行某个进度表时,从该进度表规定的入口处开始顺序执行,直到进度表的最后一个帧,如果仅存在一个进度表,则返回到当前的进度表第一个帧循环执行。 2. 若存在多个进度表则顺序执行,直到执行完最后一张进度表的最后一帧,返回第一章张进度表,循环执行。 3. 若在执行某个进度表时发生了冲突,则会中断该进度表,进入对应的冲突解决进度表,执行完成后,返回中断的进度表,继续向下执行。 ### 3.4.帧时隙
进度表除规定了帧ID的传输次序外,还规定了帧时隙(Frame Slot)的大小,其规定了一个帧的帧头起始点与下一个的帧的帧头起始点之间的时间。每个帧的帧时隙都可以不同,一个帧时隙对应了进度表的一个入口,如图3.4-1所示。 ![](images/2023-02-07-14-00-52.png)
图3.4-1 帧时隙
抖动(Jitter)为帧的同步间隔段的下降沿与帧时隙起始时刻相差的时间。 时基(Time Base)为LIN子网的最小计时单位,通常设定为5ms或10ms。 帧时隙必须为时基的整数倍,并且起始于时基的开始时刻,称为时基的节拍(Tick),等待当前帧时隙结束后,才能切换到另外一个进度表。 ### 3.5.帧的类型
以下将对表3.1-1中的帧类型解释说明。 **1.无条件帧** 无条件帧(Unconditional Frame)具有单一发布节点,无论信号是否发生变化,帧头都会被设定好的节点被无条件应答。 无条件帧在主机任务分配给它的固定的帧时隙中传输。总线上一旦有帧头发送出去,必须有从机任务做出应答,示例如图3.5-1所示。 ![](images/2023-02-07-10-03-40.png)
图3.5-1 无条件帧
如上图所示: - 当帧头ID=0x10时,从节点1为应答发布节点,主节点为收听节点,表示从机向主机汇报自身信号状态的典型应用。 - 当帧头ID=0x11时,主节点为应答发布节点,从节点1与从节点2为收听节点,表示主机向从机发布信息的典型应用。 - 当帧头ID=0x12时,从节点2为应答发布节点,从节点1为收听节点,表示从节点之间彼此通信的典型应用。 **2.事件触发帧** 事件触发帧(Event Triggered Frame)是主节点在一个帧时隙中,查询从节点信号是否发生改变,信号发生改变的节点将成为发布节点,当存在多个发布节点时,通过冲突解决进度表来解决冲突,示例如图3.5-2所示。 当从节点信号发生变化的频率较低时,主机任务一次次地轮询各个信号会占用一定的带宽,为了减小带宽的占用,引入了事件触发帧的概念。 事件触发帧的典型应用就是轮巡四个车门的开关状况,若其中一个车门打开,则该节点做出应答,可以减小带宽。 与无条件帧不同,事件触发帧会出现两种特殊情况: 1. 没有车门被打开,帧头无节点应答,事件触发帧允许一帧中只有帧头。 2. 同时开启了两扇及以上的门,两个节点同时应答,事件触发帧不会视为错误,而是调用“冲突解决进度表”,对各节点单独轮巡。 当发生冲突时,主节点重新作轮询会增加一些响应时间,但由于事件触发帧本身就用于处理低概率事件,总的来说还是节省了带宽。 原先用作轮询的无条件帧,称为与该事件触发帧关联的无条件帧,即事件触发帧的应答部分由其关联的无条件帧提供。当发生冲突时,应立刻中断当前的进度表,启动冲突解决进度表,重新调用这些关联的无条件帧。 ![](images/2023-02-07-10-19-22.png)
图3.5-2 事件触发帧
如上图所示: - 第1帧,事件触发帧帧头ID0x20发出后,对应节点信号均未发生改变,不做应答。 - 第2帧,从节点1信号发生改变,应答。 - 第3帧,从节点1和从节点2信号均发生改变,同时应答,产生冲突,需要调用冲突解决进度表。 - 第4帧,解决冲突,发送对应无条件帧帧头ID0x21,从节点1应答。 - 第5帧,解决冲突,发送对应无条件帧帧头ID0x22,从节点2应答。 **3.偶发帧** 偶发帧(Sporadic Frame)是主节点在同一帧时隙(参照3.3节)中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过事先设定的优先级来仲裁,示例如图3.5-3所示。 ![](images/2023-02-07-10-34-19.png)
图3.5-3 偶发帧
与事件触发帧相同,偶发帧的应答也关联了一组无条件帧,偶发帧只能由主节点作为发布节点。 偶发帧的传输可能出现三种状况: 1. 当关联的无条件帧没有信号发生变化时,该帧时隙保持沉默,如上图所示,一个帧时隙主节点连帧头都不需要发送。 2. 当其中一个关联的无条件帧包含的信号发生了变化,则发送该关联的无条件帧的应答部分。 3. 如果主节点信号发生的改变涉及到有两个及以上的无条件帧,则按照事先规定好的优先级,发送优先级较高的无条件帧,优先级较低的无条件帧需要跟随下一个偶发帧的帧头再发送应答。 由于主节点是唯一的发布节点,所以主节点事先就知道各个关联信号的优先级别,这样在传输时就不会产生冲突。 **4.诊断帧** 诊断帧(Diagnostic Frame)包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。 - 主机请求帧(Master Request Frame,MRF),帧ID=0x3C,应答部分的发布节点为主节点。 - 从机应答帧(Slave Response Frame,SRF),帧ID=0x3D,应答部分的发布节点为从节点。 数据段规定为8个字节,一律采用标准型校验和。 **5.保留帧** 保留帧(Reserved Frame)的帧ID为0x3E和0x3F,为将来扩展准备。 ### 3.6.状态机
主机任务的状态机:当进度表启动后,主机任务依次发送同步间隔段、同步段和受保护ID段。 从机任务负责发布或者接听帧的应答。包括两个状态机: 1. 同步间隔段和同步段检查器; 2. 帧处理器。 从机任务状态机如表3.6-1所示。 | 从机任务状态机 | 作用说明 | | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 同步间隔段和同步段检查器 | 要求节点处于任何状态下都能识别出该序列,包括已经检测到序列或进入帧处理的状态。 | | 帧处理器 | 该状态机分为五种子状态:接收并分析PID 、接收数据 、接收校验和 、发送数据 、发送校验和操作。
对接收到的受保护ID进行分析,按照事先的设计执行:
1.接收应答部分;2.发送应答部分;3.不接收也不发送。
在这五个子状态中,如果收到同步间隔段/同步段序列,将重新跳到“接收并分析PID”的子状态,通信不停止,根据需要置位相应的错误标志。 |
表3.6-1 从机任务状态机
### 3.7.网络管理和状态管理
LIN的网络管理主要指网络的休眠和唤醒管理,如图3.7-1所示。 ![](images/2023-02-07-14-43-31.png)
图3.7-1 LIN网络管理
**唤醒** 当总线处于休眠状态时,主/从节点都可以向总线上发送唤醒信号,唤醒信号持续250μs~5s。除发送唤醒信号外的其余节点以大于150μs为阈值判定总线上是否出现了唤醒信号。 每个从节点必须在唤醒信号显性脉冲的结束处开始,100ms以内准备接收来自主机的命令(帧头)。主节点也必须被唤醒,100ms之内主节点发送帧头开始通信。 主节点的同步间隔段可以充当唤醒信号,由于从节点需要作初始化处理,因此主节点所发的这一帧可能无法被正常接收。 如果节点发送出唤醒信号后,在150ms~250ms之内没有接收到总线上的任何命令(帧头),可以重新发送一次唤醒信号,唤醒信号最多可以发送3次,3次之后,必须等待至少1.5s后才可以再次发送唤醒信号。 **休眠** 总线可以在两种情况下进入休眠: 1. 利用诊断帧中的主机请求帧0x3C作休眠命令,要求数据段的第一个字节为0x00,其余字节为0xFF。休眠命令由主节点发出,总线上的从节点只判断数据段的第一个字节,其余字节忽略。从节点在接收到休眠命令后,不一定要进入低功耗模式,根据应用层需要设置。 2. 当总线静默4s~10s时,节点自动进入休眠状态。 状态管理是为了检测运行中的错误。一旦检测到错误,可以替换错误节点,也可以是错误节点进入安全模式(Limp Home Mode)。 LIN协议强制规定,每个从节点都要在它发布的某个无条件帧中包含一个长度为一位的标量信号response error,向主节点报告自身状态。主节点负责接收这个信号并且执行分析,如表3.7-1所示。事件触发帧由于允许总线冲突,需特殊处理。 | response error | 主节点对信号的解释 | | -------------- | ---------------- | | FALSE | 从节点操作正确。 | | TRUE | 从节点有偶发错误。 | | 从节点无应答 | 从节点、总线或主机存在严重错误。 |
表3.7-1 主节点 response error
LIN协议并没有标准化错误类型,用户可根据需要自行制定,如表3.7-2所示,仅供参考。 | 错误类型 | 解释说明 | | ------- | ------------------------------------------------------------------ | | 位错误 | 数据,当发送节点发送电平与回读电平不一致时,视为位错误(事件触发帧除外)。 | | 同步段错误 | 根据接收的同步段重新计算的位速率超出了规定的容限认为是同步段错误。 | | PID错误 | 接收节点对帧ID(PID的前六位)按照校验规则重新计算校验位(P0和P1),若与接收到的校验位不符,则接收节点认为是PID传输错误。 | | 无应答错误 | 发送完帧头后,如果总线上没有节点应答,视为无应答错误(事件触发帧除外)。 | | 应答不完整错误 | 收听节点接收的数据段不完整或没有接收到校验和段。 | | 校验和错误 | 收听节点接收到的校验和与重新计算的校验和(不取反)相加不等于0xFF。 | | 帧错误 | 字节域的停止位上出现了显性电平。 | | 物理总线错误 | 总线短路或直接连到电源上导致总线无法通信,该错误由主节点负责检测。 |
表3.7-2 错误类型举例
节点自身需要设定两个状态位:Error in response和Successful_transfer。当发送或接收应答的时候发现错误,将置位Error_in_response;成功传输则置位Successful_transfer。节点需要将这两个状态位报告给应用层。 ## 四.传输层
传输层的任务是把来自诊断服务的消息“翻译”成协议层可以处理的PDU(Packet Data Unit,分组数据单元),或者将协议层收到的PDU“翻译”成诊断服务需要的消息。 消息到PDU的转换过程称为拆分(Packing),PDU到消息的转换过程称为重组(Unpacking)。PDU对应着帧结构的数据段,并通过诊断帧发送或接收。 #### 4.1.PDU结构
为满足汽车行业的要求,LIN传输层的PDU的格式与ISO制定的基于CAN网络的诊断标准非常相似。减少了CAN和LIN之间转换数据格式的工作量。 发送格式可分为:单帧(Single Frame,SF)、首帧(First Frame,FF)和连续帧(Consecutive Frames,CF)三种。 发送方分为:主机发送请求PDU,从机发送应答PDU。 PDU格式包括:节点地址(NAD),协议控制信息(PCD),消息长度低8位(LEN),服务(SID),应答服务D(RSID),消息字节段(D1~D6)。 主机任务请求如下所示: | 类型 | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | | 单帧 | NAD | PCI | SID | D1 | D2 | D3 | D4 | D5 | | 首帧 | NAD | PCI | LEN | SID | D1 | D2 | D3 | D4 | | 连续帧 | NAD | PCI | D1 | D2 | D3 | D4 | D5 | D6 | 从机任务应答如下所示: | 类型 | Byte0 | Byte1 | Byte2 | Byte3 | Byte4 | Byte5 | Byte6 | Byte7 | | --- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | | 单帧 | NAD | PCI | RSID | D1 | D2 | D3 | D4 | D5 | | 首帧 | NAD | PCI | LEN | RSID | D1 | D2 | D3 | D4 | | 连续帧 | NAD | PCI | SID | D1 | D2 | D3 | D4 | D5 | **NAD** PDU单元的第一个字节是NAD(node address),用于区分不同从节点的地址。范围如下所示。 | NAD | 作用 | | --------- | ------------- | | 0x00 | 用于休眠命令 | | 0x01~0x7D | 从节点地址,即NAD | | 0x7E | 功能节点地址(功能NAD) | | 0x7F | 广播节点地址(广播NAD) | | 0x80~0xFF | 用户自定义 | **PCI** PDU单元的第二个字节是PCI(Protocol Control Information)信息,包含了PDU单元类型和消息字节长度的信息。如下所示: | 数据位 | SF(单帧) | FF(首帧) | CF(连续帧) | | ----- | ------- | -------- | ------- | | B7~B6 | 0b 0000 | 0b 0001 | 0b 0010 | | B3~B0 | Lenth | Lenth高四位 | 帧计数器 | 单帧中,附加信息Length表示消息字节数加1。 首帧中,附加信息只表示Length的高4位,低8位在LEN中表示。因此在消息长度为12位数据,最大长度为4095(0xFFF)。 连续帧中,附加信息表示首帧后,跟随的连续帧编号,第一个连续帧编号为1,之后每一帧+1。如果连续帧数大于15,计数器归零,重新计数。 **SID与RSID** SID(Service Identifier)表示从节点应完成的服务请求。节点配置服务的SID区间为0xB0~0xB7,诊断服务的SID区间为0x00~0xAF,0xB8~0xFE。 RSID(Response Service Identifier)表示从节点应答的内容,它的值是SID+0x40。 **消息字节段** 消息字节段的内容取决于服务的种类。 - 单帧中,消息字段最多6个字节。 - 首帧和连续帧中,所有PDU的消息字段,经过“重组”后得到一个完成的消息。 ### 4.2.传输层通信
1. 如果应用层发出的消息长度不超过单帧的容量,传输层会按单帧的格式交给协议层发送。传输层收到的单帧也会直接作为消息送往应用层。 2. 如果应用层发出的消息长度超过单帧的容量,传输层需要将消息拆分成首帧和连续帧,安排发送次序,再交给协议层依次发送。若协议层收到的首帧和连续帧,传输层按照接收次序将其重组为消息,再交给应用层处理。 LIN传输层只能按顺序接收续帧。LIN传输层具备出错重传功能。 ## 五.应用层
LIN应用层提供信号处理、配置、识别和诊断四项功能。配置、识别和诊断功能又包含若干项目,称为服务(Service)。为了区别,每项服务都有固定、唯一的服务代号(Service ID,SID)。 1. 信号通过信号携带帧进行传输。 2. 单帧通信的情况,配置服务与识别服务,基于信号的诊断服务,不需要经过传输层转换。 3. 配置、识别和诊断,通过传输层通信,需要使用复数帧进行通信。 LIN网络中存在着逻辑节点(Logical Node)的概念,每一个服务请求作出响应的功能就是一个逻辑节点,能够对来自主节点以及诊断设备的服务请求作出响应。 LIN应用层的配置、识别和诊断都是针对逻辑节点(Logical Node)的,并且为不同的逻辑节点定义了NAD(Node Address for Diagnose,诊断地址)。 物理节点则对应了帧收发的软件和硬件接口,故一个物理节点可以包含多个逻辑节点。 ### 5.1.信号处理功能
信号处理功能是指应用层可以不经过传输层,直接从协议层获取或修改网络中的信号。这些信号由NCF(Node Capability File,节点性能文件)定义,其中包含了传感器信号和状态(例如温度、气压值、继电器开关状态)以及状态标志(例如信号发送正常,信号接收错误)等。 信号携带帧用于LIN网络各节点之间的信号传递,每个节点既可以是信号的发布者,也可以是信号的收听者。 ### 5.2.配置功能与识别功能
LIN规范规定,每个逻辑节点都应该有节点地址(NAD)。在网络运行期间,不能存在NAD相同的逻辑节点,否则会发生冲突。 此外,每个逻辑节点都要能处理带有某些PID的帧。NAD和PID分别与逻辑节点建立了一种映射关系,LIN规范把NAD和PID的这样一种组合称为逻辑节点的配置项(Configuration)。 一个逻辑节点可以有一个以上的配置项,但在网络运行期间,每个逻辑节点只能有一个配置项有效。 配置功能是指LIN的主节点能自动地给所有逻辑节点选择配置项,消除NAD和PID分配中存在的冲突,使网络正常工作。配置功能可以确保各节点协调运作,包含分配NAD、PID等服务。 主节点向从节点发出服务请求,从节点执行相应操作后,返回应答。 配置功能包括节点配置服务,从节点NAD配置,从节点PID配置等功能。 识别功能是指主节点能够获取逻辑节点的信息,例如产品代号等。借助识别功能,主节点和逻辑节点可以实现一些自定义的操作。 ### 5.3.诊断功能
诊断功能是指LIN网络之外的诊断设备直接连接LIN的主节点,或者通过外部的其它网络(例如CAN网络)连接主节点,通过诊断协议与LIN的逻辑节点通信。与配置功能相比,诊断功能是LIN网络作为一个整体对外允许访问配置的状态。主节点则扮演了一个“网关”的角色,在诊断设备和LIN网络之间传递服务请求和应答。 **1.诊断方式** LIN网络有三种方式来实现诊断功能,如表5.4-1所示。 | | 方法A | 方法B | 方法C | | ---- | ----- | ----------- | ------------- | | 传输层 | —— | 支持 SF/FF/CF | 自定义 | | 协议层 | 信号携带帧 | 诊断帧 | 诊断帧(使用自定义NAD) | | 计算量 | 最小 | 较大 | —— | | 可移植性 | 易 | 易 | 难 |
表5.4-1 诊断功能的实现方式
**2.诊断类型** 逻辑节点功能越复杂,支持的服务越多,对逻辑节点的计算能力要求就越高。 依据诊断服务的数量,LIN规范划分出三种不同的诊断类型适用于不同条件的逻辑节点。I类最低,Ⅲ类最高,较高类型完全包含较低类型的功能。 - Ⅰ类 所有诊断类型的公共部分,提供信号处理、识别、配置功能,诊断功能采用表5.4-1中的方法A,是每个逻辑节点必备的服务。 - Ⅱ类 增加了UDS定义的“UDS识别”服务,诊断方式一般采用表5.4-1中的方法B。 - Ⅲ类 相比Ⅱ类节点,额外增加了UDS定义的部分其它服务,此外,还增加了通过LIN总线在线升级的功能。 ## 六.工作流
为了实现从节点入网“即插即用”,LIN规范标准化了LIN网络从设计到生成的工作流程,如图6-1所示。 ![](images/2023-02-10-13-37-40.png)
图6-1 工作流
其中节点性能文件(NCF)定义了节点名称和节点的属性值,包括产品代号、位速率、帧的定义等信息。 LIN子网设计工具收集到节点性能文件的信息,自动生成LIN描述文件(LDF)。LDF包含了整个子网的信息,包括所有的信号和帧的声明,以及进度表等信息。LDF文件还可以作为调试时总线分析仪和仿真器的输入。LIN子网生成工具根据LDF生成各种通信驱动,可以建立起通信子网,也可以将具备节点性能文件的现成节点加入到已经建立好的通信子网中,并在网络进入运行前排除掉可能产生的冲突。 ### 6.1.LIN描述文件
LIN描述文件对整个LIN网络进行了描述,也包含了要监测LIN网络所必需的信息,包含LIN网络内所有节点、帧和信号的信息以及进度表等内容,如表6.1-1所示。 ![](images/2023-07-14-10-35-44.png)
图6.1-1 LIN描述文件
注意: 1.
蓝色
笔标出的部分为可选项,
红色
笔标出的部分为选择其中的一项或几项。 2. “节点组合定义”表示当一个主机ECU与多个LIN通信子网相连时,会包含多个LDF文件,为了避免命名冲突,规定LDF文件中的所有对象必须使用通道后缀名称。 3. “节点组合定义”表示当存在从机物理节点对应多个逻辑节点时,可以让主节点用同一软件无需作任何改变就可处理多个从节点的配置。 4. “信号组”只应用于依据LIN1.3版本设计的节点。 ### 6.2.LDF Edit:LDF文件编辑软件
LDF Edit是LINWorks免费提供的LDF文件编辑软件,可以查看、编辑、新建LIN总线LDF文件,支持各种版本的LIN规范。 关于LDF Edit的使用说明,可以查看[LINWorks软件使用手册](https://wenku.baidu.com/view/aff38f1cb62acfc789eb172ded630b1c59ee9b01.html?_wkts_=1688871630553&bdQuery=LINWorks)。 例如,假设总线上挂接了一个主节点与一个从节点,根据以下要求,新建LDF文件。 - 总线波特率为19200bps. - 主节点发送报文,ID为0x05,目标转速信号(范围0~32100rpm),双字节,Intel格式,分辨率0.5rpm/位,发送周期50ms。 - 主节点接收报文,ID为0x06,实际转速信号(范围0~32100rpm),双字节,Intel格式,分辨率0.5rpm/位,发送周期50ms。 **1.设置LIN协议版本号(可向下兼容)与波特率19200bps。** ![](images/2023-07-12-14-17-53-image.png) **2.设置时基5ms,抖动0.1ms。** ![](images/2023-07-12-14-15-38-image.png) **3.设定各节点需要发送的信号,长度16位。** ![](images/2023-07-12-14-24-05.png) **4.设定无条件帧,数据长度2字节。** ![](images/2023-07-12-14-27-20-Frame.png) **5.设定调度表,两帧报文周期设定为10个时基,即50ms。LDF文件设置完成。** ![](images/2023-07-12-14-30-54-image.png) ### 6.3.使用控制器收发LIN报文
按照“6.2.LDF Edit:LDF文件编辑软件”所述要求,使用RapidECU-U34L控制器(其它型号控制器类似)作为主节点,在Simulink/ECUCoder中搭建模型收发LIN报文。 **1.双击RapidECUSetting模块,设置LIN0波特率,默认值为19200,若设定总线波特率为19200bps,则不需要修改。** ![](images/2023-07-12-14-38-45-image.png) 如波特率为其它数值,则需要修改LIN Baudrate 的值(在RapidECUSetting模块中可设置各个LIN通道的波特率),可供设定的范围为:19200、9600、2400,对应19200bps、9600bps、2400bps,如果填写其它数值,控制器则自动设定为9600bps。 **2.添加50ms调度周期,用于发送和接收LIN报文。** ![](images/2023-07-12-14-41-06-image.png) **3.主节点发送报文,ID为0x05,数据长度为2个字节,分辨率为0.5rpm/位,Intel格式。** ![](images/2023-07-12-14-44-48-image.png) **4.主节点接收报文,ID为0x06,数据长度为2个字节,分辨率为0.5rpm/位,Intel格式。** ![](images/2023-07-12-15-07-59.png) **5.使用控制器搭建LIN网络,其中从节点使用USB转LIN通信卡** ![](images/2023-07-14-13-54-10-RapidECU-U34.png) **6.烧入程序,并查看通信状况,主机设定发送目标转速3000,从机设定发送实际转速2000。** ![](images/2023-07-14-13-41-03-image.png)