局域互联网(lin)是一种低成本的嵌入式网络标准,用于连接智能设备。lin最常见于汽车工业。
1. lin概述
局域互联网(lin)总线是为汽车网络开发的一种低成本、低端多路复用通信标准。虽然控制器局域网(can)总线满足了高带宽、高级错误处理网络的需求,但是实现can的软硬件花费使得低性能设备(如电动车窗和座椅控制器)无法采用该总线。若应用程序无需can的带宽及多用性,可采用lin这种高性价比的通信方式。用户可在最先进的低价位8位微控制器中嵌入标准串行通用异步收发器(uart),以相对廉价的方式实现lin。
现代汽车网络包含各类总线。例如,在主体电子设备的低成本应用程序中使用lin,在主流动力系统和车身通信中使用can,而在先进系统(如主动悬挂)中的高速同步数据通信中使用新兴的flexray总线。
lin总线采用主/从方法,包含一个lin主方和一个或多个lin从方。
图1. lin消息帧
消息标题包含一个中断(用于标记帧的开始)和一个同步字段(供从节点同步时钟)。标识符(id)包含一个6位消息id和一个2位校验字段。id表示特定的消息地址,而非目标。接收并解码id后,从方开始消息响应,该消息响应包含1至8字节的数据以及一个8位校验和。
主方控制消息帧的排序,该排序在调度中是固定的。用户可按需改变该调度。
lin标准更新过多个版本。1.3版本最终确定了字节层通信。2.0和2.1版本新增了更多消息规范和服务,但仍与lin 1.3版本的字节层兼容。
功能
ni usb lin是否支持
lin 1.3
支持
lin 2.0
支持1
增强的校验和
支持
现成的从节点概念
支持1
ncf格式
支持1
诊断及从节点配置
支持1
字节数组
支持
lin 2.1
支持1
新从节点配置服务
支持1
从方诊断(i-iii类)
支持1
功能寻址
支持1
解析表
支持1
api对该功能不提供原生支持,但用户依然可实现该功能。
表1. lin 1.3、2.0及2.1版本对比
2. lin帧格式
lin总线是一种轮询总线,带有一个主设备和一个或多个从设备。主设备同时包含一个主任务和一个从任务。每个从设备仅包含一个从任务。lin总线上的通信完全由主设备上的主任务控制。lin总线上传输的基本单位是帧,每帧又分为标题和响应。标题总是通过主节点传输,包含3个不同的字段:中断、同步(sync)及标识符(id)。响应通过从任务传输,可位于主节点或从节点中,包含一个数据载荷及一个校验和。
通常,主任务通过传输标题,在循环中轮询每个从任务。该标题包含一个中断-同步-id序列。启动lin之前,每个从任务被配置为根据接收到的标题id向总线发布数据或从总线订阅数据。一旦收到标题,每个从任务将验证id校验,并检查id,以决定选择发布或订阅。若从任务需要发布响应,将向总线传输1至8数据字节,后接1个校验和字节。若从任务需要订阅,将从总线读取数据载荷和校验和字节,并采取适当的内部动作。
对于标准从至主通信,主方广播标识符至网络,仅有一个从方响应数据载荷。
主至从通信伴随着一个主节点中的独立从任务。该任务自我接收发布至总线的全部数据,并以独立从节点的方式响应。为了传输数据字节,主方必须首先根据需要传输的数据值,升级其内部从任务的响应。接着,主方将发布合适的帧标题,内部从任务传输其数据载荷至总线。
图2. lin消息帧
1. 中断
每个lin帧都以中断作为开始,包含13个显性位(额定),后接一个1位(额定)隐性中断分隔符。中断的作用是将帧的开始通知给总线上的所有节点。
2. 同步
同步字段是主任务在标题中传输的第二个字段。同步被定义为字符x55。同步字段允许进行自动波特率检测的从设备测量波特率周期,并调节其内部波特率,与总线进行同步。
3. id
id字段是主任务在标题中传输的最后一个字段。该字段识别网络上的每条消息,并最终决定由网络中的哪些节点接收或响应每个传输。所有从任务连续监听id字段、验证其校验,并决定其是否是该特定标识符的发布者或订阅者。lin总线一共能提供64个id。id 0~59用于信号携带(数据)帧,60和61用于携带诊断数据,62预留给用户自定义扩展,63预留给未来协议升级。id作为一个受保护的id字节通过总线传输,低6位包含原始id,高2位包含校验。
受保护的id(7:6)
受保护的
id(5:0)
p(1)
p(0)
id(5:0)
id(1) ^ id(3) ^ id(4) ^ id(5)
id(0) ^ id(1) ^ id(2) ^ id(4)
0–63
表2. 校验计算方法
4. 数据字节
从任务在响应中传输数据字节字段。该字段包含1至8字节的载荷数据字节。
5. 校验和
从任务在响应中传输校验和字段。lin总线采用2个校验和算法之一,以计算8位校验和字段中的值。经典校验和的计算方法是单独累加数据字节,而增强校验和的计算方法则是累加数据字节及受保护的id。
lin 2.0规范将校验和的计算过程定义为:累加所有值,且当总和大于等于256时减去255(与modulo-255或modulo-256不同)。根据lin 2.0标准,经典校验和用于lin 1.3从节点,而增强校验和用于lin 2.0从节点。该规范进一步规定,id 60~63应该总是使用经典校验和。ni lin接口允许设置校验和类型为经典或增强。默认设置为经典。根据lin 2.0规范,无论如何设置校验和属性,id 60~63总是使用经典校验和。
图3显示了主任务标题和从任务响应如何组合成一个完整的lin帧。
图3. 创建lin帧
3. lin总线定时
由于lin总线是轮询总线,处理每帧分配的额定时间槽如下:
theader_nominal = 34 * tbit
tresponse_nominal = 10 * (ndata + 1) * tbit
tframe_nominal = theader_nominal + tresponse_nominal
处理每帧分配的最大时间槽如下:
theader_maximum = 14 * theader_nominal
tresponse_maximum = 1.4 * tresponse_nominal
tframe_maximum = theader_maximum + tresponse_maximum
4. lin拓扑结构及行为
lin总线连接一个主设备(节点)和一个或多个从设备(节点),成为一个lin簇。对应的功能文件描述了该节点的行为。节点功能文件输入系统定义工具,生成lin描述文件(ldf),描述整个簇的行为。系统生成器解析ldf,自动生成目标节点中的特定行为。此时,按照ldf中指定的方式,主节点主任务开始在总线上传输标题,簇中的所有从任务(包括主节点自己的从任务)开始响应。
总体来说,ldf用于配置及创建lin簇的调度行为。例如,ldf定义了波特率、主任务传输标题时的顺序及时间延迟,以及响应时每个从任务的行为。ni lin硬件及用于lin的ni-can帧api无法为ldf提供原生的完整支持,即用户无法下载调度行为至硬件。但是,硬件提供了访问总线的底层支持(写入标题及发布或订阅作为响应),用户可在应用程序层创建调度行为。正如在ni lin响应输入帧类型的描述中所说,ni lin硬件采用响应队列存储从任务响应。响应队列保留64个响应,与每个为lin指定的(最多64个)id一一对应。这将确保lin接口的从任务可在lin规范规定的响应时间内响应标题。
用于lin的ni-can帧api可通过一种稳健的方式完成与lin总线的底层交互。终端用户可使用基本功能,开发复杂应用程序,包括分析及原型化lin网络。用于lin的ni-can帧api无法为lin诊断或配置、ldf或调度表提供原生支持。但是,用户可在采用用于lin的ni-can帧api的应用程序中实现这些任务。
5. lin错误检测及限制
lin 2.0规范声明,应当由从任务处理错误检测,且主任务的错误监控不是必需的。lin 2.0规范不要求在一个lin帧中处理多个错误,也不要求使用错误计数器。一旦在帧内遇到第一个错误,从任务将中止帧处理,直到检测到下一个中断-同步序列(在主任务传输的下一个标题中)。若记录总线错误属性设置为true,那么总线错误帧将记录至读取队列。若记录总线错误属性设置为false,ncwritenet或ncwritenetmult将返回错误。
lin还可向网络提供错误报告。lin 2.0规范定义了一个response_error状态位,其中,从设备需在其传输的一帧中向主设备报告。当从节点接收或传输的帧的响应字段中包含错误,该位设置完毕。通过从任务的已发布响应中传输后,该状态位就被清空。用于lin的ni-can帧api无法对response_error状态位提供原生支持,但终端用户可在应用程序层轻松实现该功能。该过程将记录总线错误属性设置为1,允许在读取队列中记录总线错误帧。错误代码代表响应中的错误,应用程序可通过该代码,监控总线错误帧的读取。这时,应用程序将在局部变量中设置一个response_error状态位。应用程序可使用ni lin响应输入帧类型,更新从响应队列中包含response_error状态字段的数据,并清空局部变量中的字段。
6. lin睡眠和唤醒
lin的特色是允许设备进入睡眠状态并节约用电。根据lin 2.0规范,当主任务发送的诊断主要求帧(id=60)首个数据字节等于0时,所有从任务必须进入睡眠模式。该特殊帧称为睡眠命令。若lin的非活动时间大于4秒,从任务也将自动进入睡眠模式。用于lin的ni-can帧api允许用户在应用程序层将lin接口设置为睡眠模式,提供了极大的便利性。一旦接收到包含睡眠请求信息的完整帧,或表明总线非活动时间超过4秒的总线非活动帧,用户可设置lin sleep属性为true,让lin接口进入睡眠模式。
lin还可唤醒总线上的设备。总线上的任何节点都可发起唤醒任务(不论是从节点还是主节点)。根据lin 2.0规范,强制总线显性时间持续250 µs至5 ms可触发唤醒请求。每个从节点应当检测唤醒请求,并在100 ms内准备好处理标题。主节点也应当检测唤醒请求,并在从节点准备完毕时开始发送标题(在接收到唤醒请求的100 ms至150 ms内)。若主节点未在接收首个唤醒请求后的150 ms内发送标题,请求唤醒的从节点可能发起第二次唤醒请求(并再次等待150 ms)。若主节点仍无响应,从节点将发起第三次唤醒请求,并再次等待150 ms。若仍然无响应,从节点必须等待1.5秒,才可发起第四次唤醒请求。根据lin 2.0规范,用于lin的ni-can帧api允许执行唤醒,无论lin接口作为主设备还是从设备运行。
7. 高级帧类型
lin 2.0规范进一步将lin帧分为6种类型:
1、无条件型
2、事件触发型
3、偶发型
4、诊断型
5、用户定义型
6、预留型
值得指出的是,不同帧类型之间的区别在于其传输方式的定时,或数据字节的内容。不论属于哪种类型,一个完整的lin帧总是包含一个由主任务传输的标题和一个由从任务传输的响应。用于lin的ni-can帧api可处理各种lin指定帧类型。无条件帧类型最为常用。无条件帧可携带信号(数据),标识符位于0~59的区间内。
事件触发帧类型试尝试预留总线带宽,方法是在一个帧槽时间内从多个从节点请求一个无条件帧响应。
事件触发帧的id位于0~59的范围内。若主节点从无条件帧对其发起查询,每个可能响应事件触发型标题id的从节点将在首个数据字段载入其需要响应的受保护id。事件触发帧的工作原理如下。主方在标题中写入一个事件触发id。从方在数据更新时,只响应事件触发id。
若仅有一个从方发布响应,主方将接受该响应,并在读取第一个数据字段后了解哪个从方(根据受保护的id)发布了该响应。若有多个从方发布响应,将发生碰撞,主设备的从任务将报告总线错误。主设备将通过无条件帧从每个从方查询响应。
偶发帧尝试向lin提供一些动态行为。偶发帧总是携带信号(数据),id范围为0~59。当主任务知道帧内数据值(信号)已更新时,偶发帧的标题应当仅在其帧槽内发送。该要求使主设备的从任务成为偶发帧响应的标准发布者。
诊断帧的长度总是8数据字段,携带诊断或配置数据。对于主请求帧,其id为60;对于从请求帧,其id为61。用户定义帧的id为62,可携带任意类型的信息。保留帧的id为63,且必须在lin 2.0簇内使用。
8. 推荐的pc lin接口
ni-xnet lin
ni-xnet产品线包括加速的can、lin以及flexray接口;优化的驱动;易用的api;以及配置和调试工具。通过ni-xnet接口,用户可在ni labview、labview real-time和c/c++中更加快捷简单地开发应用程序,用于原型设计、仿真和测试can、lin以及flexray网络。
ni-xnet pci/pxi及c系列lin接口还具备集成式ldf支持、硬件定时调度主任务以及帧和信号通信。
图4. 用于can、lin和flexray的ni-xnet平台
ni usb lin
图5. ni usb-8476 lin接口
用户还可通过niusb-8476 lin接口与lin设备进行通信。这是一种廉价、可移动的与lin网络进行通信的方法。
如何去设计一种光伏储能系统?
Cannon Lake将是第一款支持AVX-512先进指令集的主流产品
开源RISC-V Hummingbird E203仿真设计
卓胜微在高端射频滤波器的研发进展顺利,多款SAW滤波器已经量产出货
LiteBee Brix III积木无人机创意的搭建
用于汽车网络开发的局域互联网(LIN)总线详解
采用STC12C5410AD处理器实现自动割草机器人主控系统的设计
中微CMS32M57xx电动自行车方案MCU
基于虚拟仪器技术和Matlab软件实现雷达回波起伏模型的搭建
全方面解读2018款路虎发现神行发动机
哪种耳机适合跑步用、最适合跑步用的运动耳机
DSP嵌入式说话人识别系统的设计与实现
静止无功发生器的发展历史及工作原理
峰值功率是如何测量的
2018年的收购呈稳定趋势,2018年宣布的十大企业通信收购清单
一文了解arm是什么
小米自带USB-C线缆PD充电器对比常规USB-C接口的区别
2019财富500强中国129家公司上榜,三大趋势不容错过
一加7Pro超神体验 它才是当代期间集中的游戏霸主
关于Type-C接口的操作你懂得多少