APP下载

LIN协议在车身控制器中的设计实现

2011-03-06马建辉王知学

通信技术 2011年7期
关键词:链路层网络管理报文

马建辉,王知学,李 扬

(①山东省汽车电子重点实验室,山东 济南 250014;②山东省科学院自动化研究所,山东 济南 250014)

0 引言

随着汽车智能化程度的提高和升级换代的需要,汽车电子系统正由集中式控制向基于总线的分布式控制发展,在车身控制领域,做为控制局域网(CAN,Control Area Network)总线的有效补充,本地互联网(LIN,Local Interconnect Network)总线以其成本低廉有效解决了分布式控制带来的成本增加问题,在通讯速率要求不高、成本要求更高的国产车车身电子系统上得到了大规模应用。这里为某国产车基于LIN总线的车身控制系统设计了一款车身控制器(BCM,Body Control Module),做为LIN总线网络的主节点,BCM在实现对多路开关量、脉冲量检测以及负载控制等功能的同时,调度管理整个LIN网络的通信,实现与LIN从节点的命令和状态的交互,并实现网络管理功能。该LIN网络架构如图1所示。

图1 车身LIN网络架构

这里结合BCM设计经验,首先分析下LIN协议的架构和通信机制,然后从数据链路层、应用层和网络管理的实现上详细介绍下主节点设计技术。

1 协议分析

LIN总线采用一主多从的网络架构[1],主节点以时间片轮转的方式控制网络信号流,确定发送哪个帧并在帧之间保持正确的定时,从节点接收帧头并根据其标识符(ID,Identifier)决定如何响应。LIN通信基于主任务和从任务的行为模型,如图2所示,主任务负责产生并发送正确的报文头,从任务负责对报文头做出响应。这种方式无需总线仲裁且能保证最差状态下的信号传输延迟时间,网络负载可控并可以避免总线冲突。

图2 LIN通信行为模型

在 LIN总线系统中,主节点的实现是最复杂的,现从数据链路层、应用层、网络管理三个方面介绍下主节点LIN协议的设计实现。

2 LIN协议设计

2.1 数据链路层

LIN总线基于异步串行通信接口,在底层传输上采用8N1格式的SCI串行数据链路格式[2]:8个数据位+1个停止位、无奇偶校验,且由于LIN总线在物理层上是单根线,在发送时也会触发接收中断,这样LIN的数据链路层便可以统一在串行通信接口(SCI,Serial Communication Interface)接收中断处理函数中实现。

图2给出了LIN报文格式:LIN报文由帧头和响应两个部分组成[3],帧头包括间隔场、同步场和ID,响应包括数据场和校验和。根据LIN报文格式设计状态机,以报文的各个组成部分定义状态,随着LIN报文的发送和接收过程进行状态跳转,便可以以状态机的形式实现LIN数据链路层,具体设计在此不再详述,可以参考《有限状态机在LIN总线开发中的应用》一文[4]。

2.2 应用层

应用层协议主要定义了报文调度表和报文信号矩阵,主节点要实现的便是依据调度表进行 LIN报文的传输调度和LIN信号的提取和填充。

调度表是一个环形的报文序列,其每个条目包含一个报文及其所占据的时间片长度。主节点依据调度表实现对时间片的计时和轮转,当某报文时间片到达时,BCM 发送包括间隔场、同步场和保护标识符(PID,Protected Indentifier)在内的帧头[5],然后由各个节点根据该PID决定响应方式(发送或接收数据场和校验和)。当该时间片计时满,切换调度表条目,进行下一个报文的传输,这样便实现了LIN报文的传输调度。调度表条目结构体设计如下:

LIN报文调度表为 l_sch_table_item结构体数组,handle索引具体的调度表条目,随时间片的切换而累加,累加到调度表表尾后再次切换时将handle置为调度表表头索引,再次依次轮转;pid为LIN报文的Protected ID,表示该时间槽内传输哪一条报文;mode表示该报文的响应是BCM发送还是其它节点发送;data为数据场地址,指向本条目所对应报文的数据场,datalen为数据场长度;ticks定义时间槽长度,决定时间片计时时间,计时满则切换到下一个时间槽进行下一条报文的传输。

LIN信号矩阵定义了每个报文的数据场中所包含信号的含义、长度及其在数据场中的位置,笔者通过一种巧妙的方式实现了LIN信号的填充和提取。

首先依据信号矩阵定义,为每个报文数据场单独设计一个结构体,结构体成员变量分别对应该报文中的信号,然后在对调度表进行初始化时,将每个报文结构体变量的地址赋给调度表条目中的*data(见上述 l_sch_table_item结构体定义),这样对于由BCM发送数据场的报文来说,直接对该报文结构体变量中的成员变量赋值就实现了LIN信号的填充,在调度到该报文的传输时,所发送的数据场的数据便是已经得到填充更新的值。对于由BCM接收数据场的报文来说,当轮转完该时间槽后,该调度表条目中的*data已经包含了该报文的数据场,直接提取使用即可[6]。

2.3 网络管理

LIN协议定义了网络管理功能,实现LIN网络的休眠和唤醒,BCM做为车身LIN网络的主节点,控制所有LIN节点的休眠。进入休眠有两种方式:

①BCM 暂停主调度表的轮转,保持总线上无数据,持续4 s后,从节点自动进入休眠;

②BCM在总线上广播发送数据场首字节为 0的诊断请求帧即睡眠帧,从节点收到该帧后进入休眠。

唤醒则是通过在总线上发送唤醒信号实现的,唤醒信号为持续时间超过150 us的显性位,LIN网络每个节点都有唤醒功能。当BCM唤醒其它节点时,发送数据0即可,因为LIN总线最大速率为20 K,数据0会把LIN总线拉低为显性位至少450 us。当BCM被其它节点唤醒时,需要在进入休眠时禁能SCI模块的SCI功能,使能其IO功能并使能中断唤醒,这样当总线上出现显性位时,便可以被唤醒,检测IO脚低电平持续时间,判断是否为有效的唤醒信号,如果是,则将调度表切换为主调度表,开始正常通信,如果为无效的唤醒信号,则认为是毛刺,再次立即进入休眠。

3 结语

这里结合设计某车型基于 LIN总线的车身控制器的经验,深入分析了 LIN协议规范及其通信原理,详细介绍了数据链路层协议规范及其实现技术,定义了应用层的主要任务并给出设计方法,分析了LIN网络管理的机制并给出了具体实现,对从事LIN开发的工程师有很好的借鉴意义。

[1] 李晓雪.汽车LIN技术浅析[J].科技信息, 2009(35):259.

[2] 李赓 张长森 苏玉娜.基于FPGA的光端机UART接口设计与实现[J].通信技术, 2009,42(12):35-37.

[3] 吕海燕 饶运涛.基于 LIN总线的主从收发系统[J].湖南农机,2009,36(07):40-41.

[4] 马建辉 于良杰 王知学.有限状态机在LIN总线开发中的应用[J].世界电子元器件, 2007 (12):104-105.

[5] 李史欢.基于 LIN的车门控制系统的设计[J].现场总线技术,2009,31(06):49-51.

[6] 贾成伟,苏淑靖,甄国涌.基于 C8051F060的 CAN节点的设计与应用[J].通信技术,2009,43(04):214-216.

猜你喜欢

链路层网络管理报文
基于J1939 协议多包报文的时序研究及应用
数控机床DNC网络管理平台在智能制造中的应用
基于多空间内存共享的数据链路层网络包捕获方法
卫星网络中的TCP 跨层技术研究
CTCS-2级报文数据管理需求分析和实现
一种基于PCI接口的1394B总线的设计与实现
浅析反驳类报文要点
基于OpenStack虚拟化网络管理平台的设计与实现
电动汽车充电服务网络管理初探
基于EOC通道的SHDSL网络管理技术