ADUCM331开发笔记(二)LIN基础知识

ADUCM331开发笔记(二)LIN的基础知识

ADUCM331开发笔记,记录每天的进展。

1 LIN基础知识

1.1 前言

LIN 是 Local Interconnect Network 的缩写,是基于 UART/SCI(Universal Asynchronous Receiver-Transmitter / Serial Communication Interface),通用异步收发器/串行通信接口)的低成本串行通信协议。相较于CAN、FlexRay及Ethernet等其他车载网络,LIN是一种低成本的串行通信总线,它主要用于车内传感器和执行器的通信场合,例如车内门锁控制、座椅调节、灯光照明,车窗控制等。
LIN协议的应用
随着现代汽车逐渐向电动化、网联化、智能化和共享化方向发展,对于部分LIN控制器,也开始被要求支持刷写,以实现在线刷写或者远程更新,满足全车OTA的要求。LIN2.1开始将传输层和诊断部分独立成章,进行了清晰全面规定,将该传输协议用于诊断、节点配置和识别。
LIN协议发展史

1.2 LIN节点与网络

作为一种通信协议,LIN协议参考了OSI分层模型。
OSI四层、五层和七层模型
在OSI分层模型中,数据链路层是一种协议层,它有很多协议。数据链路层用于跨物理层在网段节点之间传输数据,通常指以太网、无线局域网等通信手段。数据链路层提供了在网络的两个实体之间传输数据的功能,并且提供了差错检测用于纠正物理层中发生的错误。
OSI分层模型
应用层——消息
传输层——数据段/报文段(segment) (注:TCP叫TCP报文段,UDP叫UDP数据报,也有人叫UDP段)
网络层——分组、数据包(packet)
链路层——帧(frame)
物理层——P-PDU(bit)
其实,segment,datagram,packet,frame是存在于同条记录中的,是基于所在协议层不同而取了不同的名字。我们可以用一个形象的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中通常只有一个数据包。

1.2.1 LIN节点

LIN协议不仅定义了物理层和数据链路层,应用层和LIN网络的API也有规定。2.0后的版本对传输层(TP)和诊断也进行了定义。
LIN协议与OSI模型的比较

在LIN2.x协议中,上述LIN节点的构成可以抽象如下图所示。
LIN节点的构成
节点应用层向下层传输信号和消息。信号和消息位于帧中的数据段(详见下文LIN报文结构),是节点向其他节点传达的实质信息。
信号和消息的区别在于信号封装于信号携带帧 ( ID 范围在 0x00~0x3B 之间)中,用于在运行状态传递上层发生的事件,如温度传感器的测量结果等。
消息封装于诊断帧( ID 为 0x3C 或 0x3D)中,是有固定格式、最大长度不超过 4095 字节的信息。

目标功能通信配置、识别、诊断
传输内容信号消息
协议层信号携带帧诊断帧
API信号处理传输层

总而言之,应用程序通过信号处理实现信号的传递,实现信号处理功能;通过传输层实现消息的传递,实现配置、识别和诊断三项功能。

1.2.2 LIN的硬件

LIN节点由芯片和LIN收发器构成,一般通过多数芯片都搭载的UART功能来实现。
LIN的构成
LIN采用UART功能进行传输时,需要传送包括1位起始位和1位停止位、共10位数据。传送按照LSB方式从最低位开始传输。
起始位和停止位用于判断报文的开始与结束。起始位的逻辑值为“0”,电压为GND,停止位的逻辑值为“1”,电压为电源电压。逻辑值“1”为隐性值,“0”被称为显性值。
LIN报文的构成
LIN收发器按照ISO 9141标准,使用单线通信。LIN收发器控制着输入电压、信号振幅、以及节点的睡眠与唤醒。
最后对于通信速率,LIN因为EMC和时钟同期等原因,规定最大传输速率为20kbit/sec。一般常使用的传输速率为2.4kbit/sec、 9.6kbit/sec、 19.2kbit/sec。
和CAN比起来不需要CAN Controller,节约了硬件的成本,同时配线也从2根变成了1根,也能够降低费用。

1.2.3 LIN网络拓扑

LIN总线采用的是单线传输形式。总线电平为12V,传输位速率(Bitrate)最高为20kbps。一个LIN网络通常由一个主节点和多个从节点组成,LIN网段经常作为子网与上层网络(CAN、FlexRay、Ethernet)相连,此时主节点通常用来充当网关。下图为典型的车载LIN网络,由于物理层的限制,一个LIN网络最多可以连接16个节点。

LIN网络拓扑结构
在LIN网络中,主机节点包含主机任务和从机任务,从机节点只包含从机任务。主机任务主要负责:

  1. 调度总线上帧的传输次序(发送调度表)
  2. 检测数据以及处理总线上的错误
  3. 作为标准时钟参考
  4. 接收从机节点发出的总线唤醒命令

从机任务不能够主动发送数据,需要接收主机发送的帧头,根据帧头所包含的信息(帧ID)判断做出以下哪种反应:

  1. 发送应答(帧中除帧头外剩下的部分)
  2. 接收应答
  3. 既不接收也不发送应答
    LIN网络机制

1.2.4 LIN通信的特征

总体而言,LIN 具有以下特点:

  • (1) 网络由一个主机节点和多个从机节点构成。
  • (2) 使用LIN 可以大幅度的削减成本,表现在以下方面:
    • 开放型规范:规范可以免费从官方网站获得。
    • 硬件成本削减:基于普通UART/SCI 接口的低成本硬件实现,无需单独的硬件模块支持;从机节点无需高精度时钟就可以完成自同步;总线为一根单线电缆。
    • 装配成本削减:LIN 采用了工作流(Work Flow)和现成节点(Off-the-shelf Node)的概念,将网络装配标准化,并可通过LIN 传输层进行再配置。
    • 缩短软件开发周期:LIN 协议将API(Application Programming Interface,应用编程接口)标准化。
  • (3) 信号传输具有确定性,传播时间可以提前计算出。
  • (4) LIN 具有可预测的EMC(ElectroMagnetic Compatibility,电磁兼容性)性能。为了限制EMI(ElectroMagnetic Interference,电磁干扰)强度,LIN 协议规定最大位速率为20kbps。
  • (5) LIN 提供信号处理、配置、识别和诊断四项功能。

1.3 LIN协议层

LIN通信的帧结构、进度表、主/从机的状态机实现、LIN 网络的休眠(Sleep)/唤醒(Wakeup)和状态管理等,对应着 LIN 规范的以下部分:

  • LIN Protocol Specification

1.3.1 帧结构

LIN网络传输中数据帧包含了两个部分,帧头(header)和应答(Response)两部分。
帧头由主节点发送,从节点接收帧头并对帧头所包含的信息进行解析判断是否需要发送应答。
LIN的帧头包含同步间隔场、同步场、PID(受保护ID)场;响应部分包含数据场和校验场,具体结构如下图所示。
LIN报文结构en
图中值“0”为显性电平(Dominant),值“1”为隐性电平(Recessive),总线上实行“线-与”:当总线上有大于等于一个节点发送显性电平时,总线呈显性电平;所有的节点都发送隐性电平或不发送信息(不发送任何信息时总线默认呈隐性电平)时,总线才呈现隐性电平,即显性电平起主导作用。
图中帧间隔为帧之间的间隔;应答间隔为帧头和应答之间的间隔;字节间间隔包括同步段和受保护ID段之间的间隔、数据段各字节间之间的间隔以及数据段最后一个字节和校验和段之间的间隔。
LIN报文结构cn

1.3.1.1 Break field同步间隔场

Break场不同与其他场,它有意的造成UART通信中的FramingError(从起始位到第10位没有检出停止位时的错误)来提示LIN总线中的所有从节点之后要开始进行LIN报文的传输了。
Break场又可以分为“Break”,“Break-delimiter”,“Break”为13位以上的显性位,“Break-delimiter”为1位的隐形位,“Break-delimiter”是“Break”结束的标志。
同步间隔场

1.3.1.2 Synch field同步场

同步场是为了修正各个节点间时钟的误差,固定发送0x55(0B0101 0101)的UART数据(包含起始位/停止位)。从节点根据最初和最终的下降沿除以8来算出1位的时间,并以此作为基准来调整自己的时钟误差(图 2)。
如果从节点使用的是高精度时钟的话(允许误差±1.5%),则不需要调整时钟的误差。如果在从机节点上不采用高精度的时钟,由此带来的偏差,需要通过同步段来进行调整。
同步场

1.3.1.3 PID field受保护ID段

受保护的ID一共有8位,前6位叫做帧的ID,加上两个奇偶效验码后称作受保护的ID。帧ID的取值范围为0x00~0x3F总共64个,帧ID标识了帧的类别和目的地。从机任务会根据帧头ID作出反应(接收/发送/忽略应答)。
PID场
LIN报文的ID范围为0x0-0x3F,其中0x0-0x3B用来携带信号,0x3C和0x3D作为诊断和配置帧,0x3E和0x3F作为保留帧以便未来扩展。
LIN通信帧的类型
注意:从机应答帧是一个完整的帧,与帧结构中的“应答”不同!
信号携带帧的报文ID是0x00~0x3B,根据上述规则,可以计算出报文ID对应的PID场。
报文ID和PID字段的对应表
报文ID和PID字段的对应表

1.3.1.4 数据场

节点发送的数据位于数据段,数据段可以包含1-8个字节,先发送编号最低的字节 DATA1,编号依次增加。注意,协议中并没有规定哪一部分显示数据长度码的信息(这点与CAN总线不同),数据的内容与长度均是由系统设计者根据帧ID事先约定好的。
数据段
数据段其中包含有两种数据类型,信号(singal)和诊断消息(diagnostic messages)
信号
信号(Signal)由信号携带帧传递,一个帧 ID 对应的数据段可能包含一个或多个信号。信号更新时要保证其完整性,不能只更新一部分。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher);其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。
需要注意的是,收听节点接收帧的应答是因为该节点的应用层会使用这些信号,而对于其余节点,由于用不到这些信号,所以没有必要作接收处理,将忽略帧的应答部分。发布和收听由哪个节点进行完全根据应用层的需要由软件或配置工具实现。一般情况下,对于一个帧中的应答,总线上只存在一个发布节点,否则就会出现错误。事件触发帧例外,可能存在零个、一个或多个发布节点。
诊断消息
诊断消息(Diagnostic message)由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。

1.3.1.5 和校验场

和校验即我们通常说的Checksum,用来确认接收的数据是否正常。和校验场的具体值为各个数据场的和的反数,如果有溢出的话,则需要取余运算(mod256)。和校验有“标准和校验(Classic Checksum)”和“扩张和校验(Enhanced Checksum)”两种形式:
校验和类型
标准和校验:
计算对象为所有数据场
LIN1.x为所有报文都使用
LIN2.x为诊断报文(ID60~61)使用
扩张和校验:
计算对象为PID场和数据场
LIN2.x为报文ID0~59使用

1.3.1.6 帧传输的时间规定

LIN报文的传输是根据LIN的时间表执行的。按照LIN的硬件结构,报文的传输时间可以分为“Response时间”和“间隔时间”,设计时间表时需要考虑两者的误差。
LIN时间规定
LIN报文的传输时间可以用下式求出。“标称时间”是不包括“Response时间”和“间隔时间”,基于Break场计算的位时间。
LIN报文标称时间
“Response时间”和“间隔时间”的允许时间最大占LIN报文的40%。因此,LIN报文的最大时间可以通过下式求出。
LIN报文最大时间
LIN时间表的单位时间被称为“基准时间(Time_Base)”,表示LIN时间表的最小处理时间。一般常用的有5ms和10ms等。
另外,一个LIN报文传输所需的基准时间合计被称作“报文槽(Frame Slot)”。

1.3.1.7 帧在总线上的传输波形

在LIN协议中,各个报文在LIN总线上传输。通过Header调整时钟误差,确认报文信息,进行数据的接收和发送,并且有奇偶校验与和校验来确保数据的正确性。
LIN总线的通讯方式
在LIN总线的通讯中,无论什么时候帧头总是由主机节点发布,当主机节点想发布数据时,整个帧全部由主机节点发送。当从机节点想发布数据时,帧头部分由主机节点发布,应答部分由从机节点发布,这样其余节点都能收到一个完整的报文帧。可以很直接的观察到,LIN总线的通讯都是由主机节点发起的,只要合理的规定要每个节点的配置,这样就不会存在总线冲突的情况(事件触发帧冲突时采用采用冲突解决进度表)。

1.3.2 帧类型

LIN的报文种类有“普通报文(Unconditional)”、“事件触发报文(Event triggered)”、“零星报文(Sporadic)”和“诊断报文(Diagnostic)”四种。
有时候翻译不同,又称为无条件帧、事件触发帧、偶发帧、诊断帧、保留帧,本文比较认同这一套翻译。 因为帧才是协议层的概念,报文是应用层的概念,应该区分清楚。
LIN通信帧的类型
注意:从机应答帧是一个完整的帧,与帧结构中的“应答”不同!

1.3.2.1 无条件帧

无条件帧(ID:0x0~0x3B)是具有单一发布节点的,无论信号是否发生变化,帧头均会被无条件应答的帧。
无条件帧报文传送
上图中帧ID=0x30应答部分的发布节点为从机节点1,收听节点为主机节点,该类无条件帧应用在从机节点向主机节点报告自身状态;
上图中帧ID=0x31应答部分为主机节点,收听部分为从机节点,该类无条件帧应用在主机节点向从机节点发送消息;
上图中帧ID=0x32应答部分的发送节点为从机节点2,收听节点为从机节点1,该类无条件帧应用与从机节点之间的通信。

1.3.2.2 事件触发帧

事件触发帧(ID:0x0~0x3B,LIN2.0追加)是主机节点在一个帧间隙中查询各从机节点的信号是否发生变化时使用的帧。当存在多个发布节点时,通过冲突解决进度表来解决冲突。
当从机节点信号发生变化的频率较低的时候,主机任务一次次地查询各个节点信息会占用一定的带宽。为了减小带宽的占用,引入了事件触发帧的概念。
其主要原理就是:对于从节点上发生频度较低的事件,1个Header可以对应多个Response,Header按照时间表发送,Response只有在需要的时候才会发送。为了判断是某个节点发送的Response,数据的第一位会发送自己的PID。
当从机节点信息状态没有发生变化的时候,从机节点可以不应答主机发出的帧头;当有多个节点信息同时发生变化的时候,同时应答事件触发帧头会造成总线的冲突。当主机节点检测到冲突时,主节点需要根据冲突发送对每一个从节点发送无条件帧的Header(无条件帧只有能1个节点应答)。LIN2.1中追加了事件触发报文冲突发生时使用“冲突解决时间表”的内容。来确定从机节点的信息状态。
事件触发帧报文传送
与事件触发帧关联的多个无条件帧需要满足以下5个条件:

  • 1.数据段所包含的数据字节数等长
  • 2.使用相同的效验与类型
  • 3.数据段的第一个字节为该无条件帧的受保护ID,这样才能够知道应答是哪个关联的无条件帧发送出来的
  • 4.由不同的从机节点发布
  • 5.不能与时间触发帧处于同一个进度表中

事件触发帧的常用使用场景是车身控制器监视4个车门的状态。如果利用事件触发报文可以在一个Slot里处理4个门的状态监视,但是,4个门中有多个门同时开启关闭这样的事情也是偶尔会发生的。如果发生冲突,就对4个门要求轮流发送数据,避免状态丢失。

1.3.2.3 偶发帧

偶发帧是主机节点在同一帧时隙中当自身信号发生变化时向总线启动发送的帧。当存在多个关联的应答信号变化时,通过预先设定的的优先级来仲裁。与事件触发帧类似,偶发帧也定义了一组无条件帧。规定偶发帧只有由主机节点发布。
偶发帧的传输可能出现三种情况:

  • 1)当关联的无条件帧没有信号发生变化,这是主机连帧头也不需要发送。
  • 2)当关联的一个无条件帧信号发生变化则发送该帧。
  • 3)当有多个无条件帧发生信号变化时,则按照事先规定要的优先级依次发送。

偶发帧ID:0x0~0x3B,LIN2.0追加。
对于主节点上特定信号更新的时候使用此报文。1个零星报文的Header可以对应多个Response,当有多个零星报文需要发送时,按照优先级进行发送。信号没有更新时,零星报文的Header也可以不用发送。
偶发帧报文传送

1.3.2.4 诊断帧

诊断帧ID:0x3C~0x3D,诊断帧包括主机请求帧和从机应答帧,主要用于配置、识别和诊断。
主机请求帧(Master Request Frame,MRF),帧 ID = 0x3C,应答部分的发布节点为主机节点;从机应答帧(Slave Response Frame,SRF),帧 ID = 0x3D,应答部分的发布节点为从机节点。数据段规定为 8 个字节,一律采用标准型校验和。

1.3.2.5 保留帧

保留帧的ID=0x3E与0x3F,为将来扩张需求用。,LIN2.x还未使用。

1.3.3 进度表

进度表是帧的调度表,规定了总线上帧的传输次序以及传输时间。进度表位于主机节点,主机任务根据应用程需要进行调度。进度表可以有多个,一般情况下,轮到某个进度表执行的时候,从该进度表的入口处开始执行,到进度表的最后一个帧时,如果没有新的进度表启动则返回到当前进度表的第一个帧开始执行;也有可能在执行到某个进度表时发生中断,跳到另一个进度表后再返回,如事件触发帧就是一个典型的例子。
LIN通讯进度表
进度表除规定了帧 ID 的传输次序外,还规定了帧时隙(Frame Slot)的大小。帧时隙是进度表规定的一个帧的帧头起始到下一个的帧的帧头起始的时间。每个帧的帧时隙都可以不同,一个帧时隙对应了进度表的一个入口,如下图所示,其中 i = 1~8。
帧时隙
其中TFrame_Maximum为帧在总线上传输的最大时间,参照 3.1.6 节的表 3.4。抖动(Jitter)为帧的同步间隔段的下降沿与帧时隙起始时刻相差的时间。时基(Time Base)为LIN子网的最小计时单位,通常设定为 5ms或 10ms。帧时隙必须为时基的整数倍,并且起始于时基的开始时刻(称为时基的节拍(Tick)),切换到另外一个进度表时一定要等到当前帧时隙的结束。

1.3.4 状态机的实现

1.3.4.1 主状态机

当进度表启动后,主机任务依次发送同步间隔段、同步段和受保护 ID 段。
主状态机

1.3.4.2 从状态机

从机任务负责发布或者接听帧的应答状态,包括连两个状态机:

  • 1.同步间隔段与同步段检查器
  • 2.帧处理器。
    从状态机分类
    帧处理的状态机

1.3.5 LIN网络管理

LIN主要用于车内舒适性系统,根据车辆状态会有不需要通信的场景。比如,车门在无钥匙系统中处于上锁状态时,接收远程钥匙上锁的接受传感器单元在解锁前不需要进行LIN通信。当这个不需要通信的状态发生时,可以切换到省电模式(唤醒/休眠),从而控制LIN节点的消费电能,负责切换这种省电模式的就是网络管理。
网络管理主要指的是网络的休眠和唤醒管理。
LIN网络管理

1.3.5.1 休眠(Go-to-Sleep Command)

总线可以在两种情况下进入休眠:
(1)主节点要求从节点进入休眠模式。主节点发送主请求帧(报文ID 60,0x3C),数据第1字节为0x00,2~8字节为0xFF(在LIN 1.x中,没有规定2~8字节固定0xFF)。检测到该帧的从节点停止通信(转移到休眠模式)。
休眠帧
(2) 当总线静默(没有显性和隐性电平之间的切换)4s~10s 时,节点自动进入休眠状态。

1.3.5.2 唤醒

当总线处于休眠状态时,主/从机节点都可以向总线上发送唤醒信号。唤醒信号是总线短显性(注意,1是隐形,0是显性),持续250us~5ms(即0xF0,在LIN 1.x中为0x80)。其余节点(除发送唤醒信号以外的节点)以大于 150μs 为阈值判定唤醒信号。每个从机节点必须在唤醒信号显性脉冲的结束处算起 100ms 以内准备接收来自主机的命令(帧头);主机节点也必须被唤醒,100ms 之内主机节点发送帧
头开始通信。
对于主节点,其发送的同步间隔段也可以充当唤醒信号,由于从机节点需要作初始化处理,因此主机节点所发的这个帧有可能不会被正常接收。
如果节点发送出唤醒信号后,在 150ms~250ms 之内没有接收到总线上的任何命令(帧头),则可以重复发送唤醒请求。唤醒信号的间隔(复位状态)是150~250ms(在LIN 1.x中最多128 bit)。如果发送3次唤醒信号也没有开始调度,则在1.5秒(在LIN 1.x中为1万5000比特)以上的暂停状态之后,可以发送第4次唤醒信号。
唤醒

1.3.5.3 网络管理的时间参数

上述网络管理的时间参数因LIN协议版本而异。每个LIN协议版本的时间参数汇总如下。
LIN网络管理时间参数
在LIN 1.x中,时间参数由位时间(TBit)定义。也就是说,在LIN 1.x中,时间参数根据通信速度而不同 。

1.3.6 LIN状态管理

在LIN2.0中,追加了在各从节点检测到错误时向主节点报告的状态管理。这样一来,主节点可以确定发生错误或导致节点错误的原因,可以进行更适当的恢复控制和处理。
状态管理是为了检测运行中的错误。错误一旦被发现,根据设计需要采取不同的措施进行排除,一种方法是简单替换掉错误节点,另一种方法是让发生问题的节点进入到自我保护/安全模式(Limp Home Mode)。

1.3.6.1 网络报告

协议强制规定,每个从机节点都要在它发布的某个无条件帧中包含一个长度为一位的标量信号response_error,向主机节点报告自身状态。此信号应该由从节点的驱动层在检测到应答中有错误时自动设定。当状态管理信息发送完成的时候,应该自动的清除状态。主机节点负责接收这个信号并且执行分析。
事件触发帧由于允许总线冲突,需特殊处理。
主节点对Response_error的解释
LIN 协议并没有标准化错误类型,用户可根据需要自行制定,通过应用程序来定义。在LIN1.3的规格书中,举例了以下错误:

  • Bit Error
  • Checksum Error
  • Identifier Parity Error
  • Slave Not Responding Error
  • Inconsistent Synch Field Error
  • Physical Bus Error
    错误类型举例
1.3.6.2 节点内部报告

节点自身需要设定两个状态位:Error_in_response 和 Successful_transfer。当发送或接收应答的时候发现错误,将置位 Error_in_response;成功传输则置位 Successful_transfer。节点需要将这两个状态位报告给应用层。

1.4 帧收发的硬件实现

帧收发的硬件实现对应着 LIN 规范的以下部分:

  • LIN Protocol Specification(部分内容)
  • LIN Physical Layer Specification

收发 LIN 帧需要的硬件包括协议控制器(Protocol Controller)、总线收发器(Bus Transceiver)和 LIN 总线三部分。
帧收发的相关硬件
LIN 规范并未限定传输介质的类型和连接器的规格。目前 LIN 网络主要使用铜线作为传输介质,针对铜线的总线收发器也是市场主流,因此本文如无特殊说明,均是针对铜线介质展开。
LIN 的硬件特点:

  • 单线通信
  • 从机节点无需高精度时钟源
  • EMI 低而且可控
  • 最高通信速率 20kbps

1.4.1 协议控制器

协议控制器主体是一个基于UART/SCI的通信控制器,工作方式是半双工。协议控制器既可以使用专用模块实现,也可以用“UART/SCI+定时器”实现。
发送时,协议控制器把二进制并行数据转变成高-低电平信号,并按照规定的串行格式(8数据位,1停止位,无校验位)送往总线收发器;接收时,协议控制器把来自总线收发器的高-低电平信号按照同样的串行格式储存下来,然后再将储存结果转换成二进制并行数据。
协议控制器要能产生和识别帧的同步间隔段。同步间隔段包含一个低电平脉冲,长度至少为 13位。发出和识别同步间隔段虽然增加了硬件设计的复杂度,但是从接收方的角度看,这样做能把同步间隔段与普通的数据字节区别开,确保了同步信息的特殊性。
协议控制器要能执行本地唤醒(Local Wakeup)。需要唤醒总线时,协议控制器通过总线收发器向 LIN 总线送出唤醒信号。
协议控制器要能识别总线唤醒(Bus Wakeup)。当收到来自 LIN 总线的唤醒信号时,协议控制器能够正确动作,进入规定的通信状态。
依据硬件资源不同,协议控制器实现方案可以分为 3 类,分别面向对成本和性能有不同侧重的应用:

  • UART/SCI+定时器+外部中断
  • 硬件 LIN(Hardware LIN)
  • LIN 模块(LIN Module)

1.4.2 总线收发器

总线收发器的主体是一个双向工作的电平转换器,完成协议控制器的高-低电平与LIN总线的隐性-显性电平之间的转换。LIN总线电平定义如下表所示。
LIN总线电平定义
LIN规范规定:LIN总线的电平参考点是总线收发器的电源参考点。为了克服电源波动和参考点漂移的影响,LIN规范要求总线收发器要能承受±11.5%的电源波动和参考点电平波动,并且能承受电源和参考点之间8%的电位差波动。收发双方的电平鉴别门限也设置了较大的冗余度。
总线收发器还包括一些附加的功能,例如总线阻抗匹配、压摆率(Slew-rate)控制等。
此外,LIN规范要求总线收发器具备这样一种特性:本地节点掉电或工作异常时,不能影响总线上其他节点工作。

1.4.3 LIN 总线

LIN 总线是衔接所有 LIN 节点的通信介质。
LIN 总线的特征阻抗——尤其是容抗——会影响信号的波形,在设计产品时应予以重视。
为汽车电子产品增加 LIN 功能所花费的成本与获得的灵活性相比,往往后者更为显著。汽车上大多数传感器、执行器除至少要接 1 根电源线和 1 根地线外,此外还有一些模拟/数字信号线,这些接口往往存在兼容性的问题。如果采用 LIN 规范,仅用 3 根线(电源、地和 LIN)就可以实现标准化的数字接口。传感器、执行器通过总线连接,汽车结构设计可以更加灵活,线束的数量(重量)不但不会增加,还可能减少。

1.5 信号处理、配置、识别和诊断

LIN的信号处理、配置、识别(Identification)和诊断的概念、功能和用途,对应于 LIN 规范的以下部分:

  • LIN Transport Layer Specification
  • LIN Node configuration and Identification Specification
  • LIN Diagnostic Specification

从使用的角度来看,LIN 提供四项功能——信号处理、配置、识别和诊断,这四项功能共同构成了 LIN 的应用层。
应用程序通过信号处理实现信号的传递,实现信号处理功能;通过传输层实现消息的传递,实现配置、识别和诊断三项功能。
LIN Architecture

目标功能通信配置、识别、诊断
传输内容信号消息
协议层信号携带帧诊断帧
API信号处理传输层

1.5.1 传输层

传输层是配置、识别和诊断这三项功能的通信载体,实现应用层消息与帧之间的格式转换和传输。为了规范使用,LIN 还为应用层和传输层定义了 API 接口。
传输协议,基于OSI参照模型网络层的通信程序,在LIN中分割超过8字节的数据进行收发时使用。LIN的传输协议基本上与CAN使用的“ISO 15765-2”相同,在数据内放入一部分特别的信息并发送。在LIN 2.x中,将该传输协议用于诊断、节点配置和识别。
在使用传输协议的通信中,使用诊断帧(ID:0x3C、0x3D)。主节点向作为对象的从节点发送“主请求帧(ID:0x3C)”,进行诊断请求(Request)和设定变更等。然后,接收到诊断请求的从节点使用“从响应帧(ID:0x3D)”,将诊断响应(Response)和设定变更的结果发送到主节点。要识别从节点,需使用每个从节点分配的节点地址(NAD)。
传输层的任务单一,就是充当一个“翻译官”,把来自诊断服务的消息(Message)“翻译”成协议层可以处理的PDU (Packet Data Unit,分组数据单元),或者反过来,把协议层收到的 PDU“翻译”成诊断服务需要的消息。消息到 PDU 的转换过程称为拆分(Packing),PDU 到消息的转换过程称为重组(Unpacking)。PDU 对应着帧结构的数据段,并通过诊断帧发送或接收。

1.5.1.1 PDU结构

为满足汽车行业的要求,LIN 传输层 PDU 的格式与 ISO 制定的基于 CAN 网络的诊断标准非常相似(是 ISO 标准的子集)。这种兼容性大大减少了在 CAN 和 LIN 之间转换数据格式的工作量,降低了对节点计算能力的要求。
从发送格式上,PDU 单元可分为单帧(Single Frame,SF)、首帧(First Frame,FF)和续帧(Consecutive Frames,CF)三种。从发送源上,主机发送请求 PDU,从机发送应答 PDU。

  • 单帧(SF,Single Frame):只用一个PDU就完成所有数据传输的报文;
  • 首帧(FF, First Frame):多帧传输时,被发送的首个PDU;
  • 连续帧(CF,Consecutive Frame):多帧传输时,在首PDU发送后,紧接着发送的PDU。
    LIN传输层PDU结构
    使用传输协议的时候,PDU中包括节点地址(NAD),协议控制信息(PCI),LEN,服务 ID(SID),应答服务 ID(RSID),消息字节段(D1~D6)。首字节 NAD 首先发送,末字节 D4,D5,D6 最后发送。
    传输协议数据
    传输协议报文的传输方式有以下两种:
  • 单帧传输(非分割传输Single Frame)
  • 多帧传输(分割传输Multi Frame)
1.5.1.2 非分割传输 Single Frame

用一条报文传输数据,PCI的值为“0x01~0x06”(数据长度为1字节到6字节)。
单帧传输
接收到请求的从节点无法处理时(接收到的服务(SID)不支持等),发送否定应答。
否定应答与服务无关,PCI为“0x03(数据长度为3字节的单帧),RSID为表示否定应答的0x7F(正常应答的RSID为SID+0x40),D1为SID,D2为错误代码,D3~D5不使用(为0xFF)。
否定应答

1.5.1.3 分割传输 Multi Frame

发送的数据过多,无法通过单帧发送时使用多帧。多帧分为第一帧“First Frame(FF)”和第二帧以后的帧“Conceutive Frame(CF)”两种。
分割传输
另外,在LIN2.1中,增加了一个主请求帧对所有从节点进行诊断请求的“功能寻址”的规格。如果用功能寻址发送请求的话,节点地址里为“功能寻址地址(0x7E)”。

1.5.1.4 NAD

NAD用于表示诊断请求中LIN从节点的地址(Node Address),位于PDU的第一个字节。NAD的值在1-127的范围内,其中0和128到255保留用于其他目的。下表给出了不同NAD值的用途。
NAD值及其用途

1.5.1.5 PCI

PCI即协议控制信息(Protocol Control Information),PCI包含PDU的类型、编号和报文的有效数据长度等信息。根据PDU的不同,PCI不同,具体如下:
PCI字节信息
在单帧中,PCI中的附加信息Length等于SID加上数据字节(D1-…)的长度,SID长度是1个字节,所以实际上是数字字节长度加1。单帧(SF)最多包含五个数据字节,因此单帧的PCI的值为“0x01~0x06”(数据长度为1字节到6字节:SID+D1~D5)。
单帧传输的示例如下图所示。下图中NAD是0x53,PCI是0x03,二进制0B0000 0011,可以看出是一个SF,长度Length是3(SID是0x22占一个字节,消息字段D1和D2分别是0x02和0x22,占两个字节)。
单帧SF示例
在多帧传输中,首帧(FF)用于表示多帧PDU的开始,PCI的附加信息表示多帧PDU的长度的高4位,PDU长度的低8位在LEN中表示,因此,多帧PDU能表示的最大报文长度为4095(0xFFF)。
续帧中的PCI附加信息用来表示续帧的编号,第一个续帧的编号为1,之后每个续帧加1,如果续帧编号大于15,那么下一个续帧的编号置0,重新计数。
多帧传输的示例如下图所示。下图中NAD是0x53,首帧PCI是0x18,二进制0B0001 1000,LEN是0x02,SID是0x22。因此lenth是0x802。第一个续帧PCI是0x21,二进制0B0010 0001。后面从0x22到0x2F循环计数。
FF与CF示例

1.5.1.6 SID与RSID

SID(Service Identifier)表示诊断请求服务ID。RSID(Response Service Identifier)表示诊断响应服务ID。RSID=SID+0x40。

1.5.1.7 消息字节段D1-D6

消息字节段的内容取决于服务的种类。在单帧中,消息字段最多 6 个字节。 如果PDU未完全填充(仅适用于CF和SF PDU),则未使用的字节使用0xFF填充。
在首帧和续帧中,所有 PDU 的消息字段,经过“重组”组成一个完成的消息。

1.5.1.8 传输层通信

应用层发出的消息如果长度不超过单帧的容量,传输层会按单帧的格式交给协议层发送。传输层收到的单帧也会直接作为消息送往应用层;如果消息长度超过单帧的容量,传输层先要把消息拆分成首帧和续帧并排好次序,然后再交给协议层依次发送。反过来,协议层收到的首帧和续帧,传输层先要按照接收次序将其重组为消息,最后交给应用层处理。

  • LIN 传输层只能按顺序接收续帧。
  • LIN 传输层具备出错重传功能。
  • 传输层由传输层 API 完成,下表列出了传输层与 API 的对应关系。
    传输层与API的关联

1.5.2 LIN应用层

LIN 应用层提供信号处理、配置、识别和诊断四项功能。配置、识别和诊断功能又包含若干项目,称为服务(Service)。为了区别,每项服务都有固定、唯一的服务代号(Service ID,SID)。下图描述了 LIN 应用层及其关联。
LIN应用层及其关联
上图中,LIN应用层及其关联有以下路径:

  • ① 信号通过信号携带帧通信
  • ② 配置服务通过传输层,以单帧的形式通信
  • ③ 识别服务通过传输层,以单帧的形式通信
  • ④ 基于信号的诊断服务
  • ⑤ 诊断传输层,通过传输层通信,需要使用复帧的形式通信
  • ⑥ 用户自定义的诊断

LIN 应用层的配置、识别和诊断都是针对逻辑节点(Logical Node)的。逻辑节点是能够对来自主机节点和/或诊断设备的服务请求作出响应的功能实体。为了区别不同的逻辑节点,LIN 定义了 NAD(Node Address for Diagnose,诊断地址)。
对于一个物理节点来说,从机任务和接口对应着实现帧收发的软件和硬件实体,而逻辑节点则代表了配置、识别和诊断方面的能力。物理节点、从机任务以及接口是一一对应的,但是物理节点可以包括 1 个或者多个逻辑节点。
为了规范地使用应用层的功能,LIN 规范定义了一套 API。

1.5.2.1 信号处理功能

信号处理功能是指应用层可以不经过传输层,直接从协议层获取或修改网络中的信号。这些信号由NCF(Node Capability File,节点性能文件)定义,既可以是工作参数(例如温度、压力的测量值、继电器的开合状态等),也可以是状态标志(例如某信号携带帧的收发状态)。
信号携带帧在 LIN 网络的节点之间传递,每个节点既可以是信号的发布者,也可以是信号的收听者。
信号处理模型
信号处理功能由核心 API 完成。
信号处理功能与API的关联

1.5.2.2 节点配置和识别服务

因为节点机能文件是对单个从节点的定义,所以节点地址和报文ID有可能与其他从节点重复。
为解决从节点之间设置重复等问题,LIN规格追加了节点配置和识别服务。
节点配置和识别服务使用传输协议的单帧来设置。节点配置和识别定义的服务(SID)从“0xB0”到“0xB7”。
Assign NAD(SID:0xB0)option
根据供应商ID、功能ID和变更ID重新设定NAD,解决节点地址重复的问题。
Assign Frame ID(SID:0xB1) mustLIN2.0
根据节点机能文件中的报文ID,对报文进行PID的再设定,解决报文ID重复的问题。LIN2.1使用Assign Frame ID Range(SID: 0XB7)。
Read by Identifier(SID:0xB2)must
从节点产品识别号等的读取。
Conditional Change NAD(SID:0xB3)option
检出LIN网络中的错误节点,变更NAD。
Data Dump(SID:0xB4)option
用于开发时任意的数据诊断,仅限开发时有效。
Assign NAD via SNPD(SID:0xB5)
SNPD(Slave Node Position Detection),预留服务。
Save Configuration(SID:0xB6)option
从节点有断电记忆媒体的场合使用,用于将设定的NAD、PID等保存在记忆媒体中。
Assign Frame ID Range(SID:0xB7)mustLIN2.1
对于1条报文最多可以设定4个ID,从而避免ID重复。比起LIN2.0的“Assign Frame ID(SID:0xB1)”设定时间更短。

1.5.2.3 诊断功能

诊断功能是指 LIN 网络之外的诊断设备可以直接连接 LIN 的主机节点,或者通过外部的其它网络(例如ISO11898 定义的 CAN 网络,参照参考资料[8])连接主机节点,连接后,诊断设备可以按规定的诊断协议(例如ISO15765 规范,参照参考资料[9])与 LIN 的逻辑节点通讯。与配置功能相比,诊断功能是 LIN 网络作为一个整体对外呈现的可配置、可访问的属性。
为了适应汽车行业的需要,LIN 规范定义诊断服务时,参照了 ISO 制定的 UDS 标准和OBD 标准。LIN 诊断功能是以上两个标准的子集,相同服务的 SID 也相同。
诊断功能的工作模型如下图所示,它是配置功能工作模型的扩展。主机节点在此扮演了一个“网关”的角色,在诊断设备和 LIN 网络之间传递服务请求和应答。
诊断模型
LIN 网络有三种方式来实现诊断功能,它们的差别在于传输层的复杂度,因为拆分/重组需要一定的计算量。
诊断功能的实现方式
逻辑节点功能越复杂,支持的服务越多,对逻辑节点的计算能力要求就越高。
依据诊断服务的数量,LIN 规范划分出三种不同的诊断类型——I 类、II 类和 III 类,适用于不同条件的逻辑节点。I 类最低,III 类最高,较高类型完全包含较低类型的功能。
I 类是所有诊断类型的公共部分,提供信号处理、识别、配置功能,诊断功能采用表 中的方式 A,这也是每个逻辑节点必备的服务。II 类节点增加了 UDS 定义的识别服务(注 1),诊断方式一般采用表中的方式 B。III 类节点相比 II 类节点,又增加了 UDS 定义的部分其它服务,此外,还增加了通过 LIN 总线在线升级的功能。
诊断类型

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值