接口/总线/驱动
局域互联网(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接口
用户还可通过NI USB-8476 LIN接口与LIN设备进行通信。这是一种廉价、可移动的与LIN网络进行通信的方法。
全部0条评论
快来发表一下你的评论吧 !