SAE J1939协议的研究及其协议栈的实现

2011-03-03 03:31张涛李珍珍王思山黄爱蓉
湖北汽车工业学院学报 2011年1期
关键词:链路层传输层物理层

张涛,李珍珍,王思山,黄爱蓉

(湖北汽车工业学院 电气与信息工程学院,湖北 十堰 442002)

SAE J1939协议的研究及其协议栈的实现

张涛,李珍珍,王思山,黄爱蓉

(湖北汽车工业学院 电气与信息工程学院,湖北 十堰 442002)

阐述了一种基于CAN总线的车辆网络通信协议SAE J1939,设计和实现了基于μC/OS-II嵌入式操作系统的协议栈,能够发送和接收J1939报文。该协议栈支持分布在车辆各个不同位置的ECU之间的具有实时闭环控制功能的高速通信网络。最后,在采用标准SAE J1939协议的汽车仪表上验证了所设计的协议栈,很好地实现了车辆ECU之间的高速通信。

CAN总线;SAE J1939;μC/OS-II;ECU

J1939协议技术在国外,特别是欧洲、美国、日本,已经相当成熟。目前,J1939已经成为世界各大车辆部件制造厂商支持的重要通信标准,尤其在大客车、载重货车、特种车辆和工程机械得到广泛的应用[2]。国内在CAN总线方面的研究和应用与国外相比有明显差距。由此,SAE J1939协议不仅是目前有实用参考意义的车用网络协议,而且对其彻底分析对制定上层协议有着重要的指导意义。

1 SAE J1939协议的研究与分析

SAE J1939协议供卡车及其拖车、大客车、建筑设备以及农业设备使用,是用来支持分布在车辆各个不同位置的电控单元之间实现实时闭环控制功能的高速通信标准,其数据传输速率为250kb/s,其物理层和数据链路层以CAN2.0B为基础,还定义了网络层和应用层协议。J1939通信协议是以CAN总线通信协议为基础制定的,借用CAN的信息帧传递J1939的信息,即利用CAN总线的29位标识符位形成J1939的编码系统,约定了货车和客车的通信编码,并按这一规则形成了J1939的通信协议,实现了一个完整的网络定义[3]。

1.1 J1939协议与OSI模型

SAE J1939协议各层根据OSI模型构建,针对OSI每层都有对应的J1939协议分层,但并不是所有的层次都是由各自的J1939文档来明确界定的。SAE J1939协议与OSI模型的关系如图1所示[4]。

1.2 SAE J1939协议层

SAE J1939协议是车辆网络的应用层协议,其物理层和数据链路层都是以CAN2.0B协议为基础的,有关CAN的介绍很多,在此不作过于详细的描述,只对本协议相关内容进行研究。

物理层主要是定义电气接口和物理介质,实现网络中电控单元(ECU)之间的电连接。物理层物理介质为中屏蔽双绞线,其特定阻抗为120 Ω,电流对称驱动。2条线分别命名为CAN_H(黄色)和CAN_L(绿色)。物理层是差动电压方式传输信号的[5]。

数据链路层通过物理链接保证数据可靠传输。主要定义了信息帧的数据结构、编码规则,包括通信优先权、通信格式、通信要求、总线仲裁、错误检测及处理,即发送CAN数据帧中的必要同步,顺序控制,纠错控制和流控制。流控制是以统一的消息帧格式实现的。SAE J1939设备必须使用扩展帧,标准帧格式消息可以在网络中存在,但只能以本文所描述的方式。标准帧设备不响应网络管理消息,不支持标准化通信[6]。

2 SAE J1939协议栈总体设计

根据OSI模型层次的划分进行本协议栈的总体分析与设计,并对除了网络层以外的每一层分别实现,最终对系统软硬件进行完整的设计并测试。

那么大瓶充装工序的T=X1+X2+X3+X=14.91+18.77+2.90+15.97=52.55,依次求得转盘充装工序的观测时间为:3.86s,分拣工1工序的观测时间为:3.45s,在叉车工序中,卸车工序的观测时间为:0.87min,上空工序的观测时间为:1.16min,下重工序的观测时间为:1.05min 装车工序的观测时间为0.84min。

2.1 SAE J1939协议栈框架设计

SAE J1939协议的底层沿用了CAN标准,但其通信协议却比CAN复杂得多,针对具体应用的高层差别也较大,一般不能将全部协议内容封装在通信控制器芯片内,而需要采用软件的方法来实现,即通过通信协议栈实现通信功能[10]。根据ISO模型,协议栈采用分层结构。

SAE J1939协议栈由3个模块组成:数据链路层、传输层和网络管理层。协议栈的最底层直接面向硬件(CAN控制器),最顶层则面向用户应用程序。通过修改配置文件和硬件抽象层,可将协议栈向多种硬件移植,适合特定应用的需要[10]。根据上述分析,可以设计出SAE J1939协议栈的软件框图如图2所示。

2.2 SAE J1939软件系统选择

设计汽车ECU的开发平台,并在其上移植J1939通信协议栈,可快速实现汽车ECU之间的通信功能,使其方便的接入汽车内部网络系统中。对于汽车网络,是一个复杂的系统,各种通信以及功能的实现都需要快速准确的执行,并且可能同时还有几个任务的通信和执行,所以对这些较复杂的ECU(如汽车仪表、控制中心等)需要使用操作系统。针对汽车电子的特点,从实时性、经济性、可移植性等方面考虑,嵌入式操作系统μC/OS-II是较合适的选择[3]。

μC/OS-II是一种简单、高效、可移植、可固化、可裁剪、抢占式且源代码公开的嵌入式实时操作系统,已经被广泛应用到各种嵌入式系统中。μC/OSII最多支持256个任务,其内核为占先式,并支持信号量、邮箱、消息队列等多种进程间通信机制;用户可以根据需求对内核中的功能模块裁剪。

3 系统硬件设计

通过对SAE J1939协议栈各层分析,设计实现整个J1939协议栈通信所依赖的硬件平台。微控制器选用NXP公司推出的以ARM Cortex-M3为处理器的32位微控制器LPC1768,其可用于集成度和低功耗的嵌入式应用,十分适合本项目的硬件条件。CAN收发器采用TJA1050,它是控制器区域网络(CAN)协议控制器和物理总线之间的接口,是一种标准的用于汽车和普通工业应用的先进CAN收发器。系统硬件框图如3所示。

4 系统软件设计

主要围绕协议栈具体实现过程进行研究和设计,并且基于μC/OS-II嵌入式操作系统,进行整体的程序设计,以实现协议栈J1939报文数据的传输。然后,分别对各个层之间功能以及消息传递做具体的实现。

4.1 基于μC/OS-II系统的软件总体设计

在SAE J1939协议栈中,消息在μC/OS-II嵌入式操作系统中的接收和发送的流程如图4所示。

在消息接收中,CAN控制器将其寄存器中的如CAN帧格式、CAN数据帧ID以及CAN消息包含的数据等内容,通过建立3个邮箱进行各层数据传送,并且在数据链路层DL(Data Link Layer)、传输层TL(Transport Layer)和应用层APP(Users Application Layer)分别创建相应任务,对数据进行处理,以满足设计需要[11]。

由于SAE J1939协议的网络管理层包含的地址声明、地址冲突和地址仲裁内容繁琐复杂,不是本次课题实现的目标,故对该层只做了基本分析。故报文的发送的实现只开始于应用层。当启动一个任务,应用层就调用传输层发送报文的函数,将报文发送到传输层;或者当应用层接收到消息将消息经过处理转换成发送报文传输到TL。TL调用数据链路层的报文格式转换函数,将J1939报文转换成CAN数据帧格式,并调用物理抽象层HAL(Hardware Abstraction Layer)发送函数,将数据写入CAN各类寄存器。

当应用层将消息发送到抽象物理层,从CAN寄存器中读取数据有可以开始进行J1939报文的接收,如此循环。在商用车上面,目前只有发送机相关参数使用了J1939协议,故对发送机转速、冷却液温度和故障等数据进行发送和接收。当给应用层发送的发送机转速、冷却液温度和故障的值做一个动态的变化时,该协议栈就可以自动的完成相关数据的发送和接收。

4.2 协议栈抽象物理层设计

抽象物理层HAL模块提供的功能:CAN硬件初始化;CAN数据包的发送和接收。该层利用中断接收消息,并将消息存入缓冲区。在发送报文过程中,HAL建立3个缓冲区发送报文。

4.3 协议栈数据链路层

数据链路层模块提供了一种打包应用的数据成CAN扩展帧格式的方法,并且当物理抽象层能够传输CAN包时缓存数据包。另外,数据链路层模块缓存接收CAN包,根据目的地址过滤数据包,发送过滤后的数据包到传输层。

数据链路层DL在初始化时就在数据链路层建立了一个任务。该任务请求来自抽象物理层HAL的消息发送,并对报文进行过滤,最后对过滤后的数据包进行消息发送,流程图见图5。其中如果不是所要求的CAN的ID值,就忽略该消息。

在数据链路层消息发送过程中,DL将发送报文的J1939报文格式转换成CAN数据帧格式,该函数被传输层调用,重组完毕后调用物理层消息发送函数,将消息发送到HAL。

4.4 协议栈传输层

传输层为J1939协议提供消息的打包、重组和连接管理。长度小于等于8字节的消息可以直接从传输层经过处理后发送或接收。而对于大于8字节消息则需要对消息进行拆装和重组。

传输层TL在初始化时就在该层建立了一个任务。该任务请求来自数据链路层DL的消息发送,并对消息的格式从CAN到J1939报文的转换,最后对J1939报文格式的消息发送,流程图见图6。

传输层中消息的发送,主要由应用层调用传输层传输函数J1939_Transmit_Message()开始。该函数调用数据链路层中的函数Build_CAN_Packet()将消息发送至数据链路层。

4.5 协议栈应用层设计

为了达到软件部分总体设计中将SAE J1939协议栈中数据发送和接收做成一个循环的流程的要求,在应用层分别发送3个动态变化的参数,即发动机转速、发送机冷却液温度和故障指示。

应用层报文的发送是启动任务的任务主体,一直处于就绪状态。给发送机转速、冷却液温度和故障指示灯赋值,并使它们处在一个连续不断的数据发送过程中。调用传输层函数将J1939报文消息从应用层一直发送到物理抽象层。

同时,为了便于观察从应用层发送的J1939报文的数据,调用J1939_Send_To_PC()函数,将应用层发出的数据输出到串口上,应用在PC机上显示出来。在上述分析过程知道接收报文的转发在SAE J1939协议栈数据之间循环发送和接收有着重要的作用。该函数对报文PGN值进行判断并且相应转换,将转换后的报文发送到传输层。

5 系统调试

系统测试分为SAE J1939协议栈报文发送测试和接收测试。这里讲到的软件调试准确的说应该是软硬件的联合测试,这些软件的测试都是基于硬件平台和辅助软件调试助手完成的。

根据以上分析,整体的测试可以采用如图7所示方案。PC机上编辑显示界面,用于监视开发板1所发出的报文,而开发板1上的指示灯指示其发送一个报文就闪烁一次。与此同时,开发板2接收到开发板1发送过来的报文,并且开发板2上的指示灯2用来指示没接收到一个报文就闪烁一次。即可验证J1939报文的接收。之后,开发板2将报文进行转发,汽车仪表遵循SAE J1939协议,就可以将相应数据显示。

6 总结

通过深入分析研究SAE J1939协议各层的具体规范,然后确立实现了硬件和软件方案。通过对SAE J1939协议栈物理层、数据链路层、传输层和应用层的报文的发送和接收,实现车辆ECU之间的相互通信。但是J1939协议的彻底实现还需进一步研究。比如地址声明,地址发生冲突时有地址仲裁,重新声明地址需要制定SAE J1939协议报文传输的仲裁机制,这就是协议栈的网络管理层作用之一。文中没有对该层进行设计实现,要对SAE J1939协议栈的实现做更进一步的完善,也是今后研究和设计发展的重点方向之一。

[1]高燕,高松,赵明.SAE J1939协议在客车上的应用现状及展望[J].工业控制计算机,2006,19(4):68-69.

[2]高松,高燕,王吉华.SAE J1939协议在车辆上的应用[J].拖拉机与农用运输车,2006,33(6):1-2.

[3]夏继强,李晓君,曹磊,孙进.SAE J1939协议栈设计及μC/OS-II系统下的开发平台的研究 [J].汽车工程,2008,30(12):1069-1074.

[4]SAE J1939-01,Recommended Practice for Control and Communications Network for On-Highway[S].2000.

[5]SAE J1939-11,Physical Layer,250Kb/s,Shielded Twisted Pair[S].1999.

[6]SAE J1939-21,Data Link Layer[S].2001.

[7]SAE J1939-31,Network Layer[S].2004.

[8]SAE J1939-71,Vehicle Application Layer[S].2008.

[9]SAE J1939-73,Application Layer-Diagnostics[S].2006.

[10]Port GmbH.J1939 Protocol Stack [K/OL].(2010)[2011-01-06].www.port.de.

[11]任哲,潘树林,房红征.嵌入式操作系统基础μC/OS-II和Linux[M].北京:北京航空航天大学出版社,2006.

[12]丁海涛,杨建森.SAE J1939协议培训教程[B/OL].(2008-10-30)[2010-12-08].http://www.docin.com/p-33474417.html.

SAE J1939 Protocol and Implementation of Its Protocol Stack

Zhang Tao,Li Zhenzhen,Wang Sishan,Huang Airong
(School of Electrical and Information Engineering,Hubei Automotive Industries Institute,Shiyan 442002,China)

The SAE J1939 protocol of vehicle network communication based on CAN bus is described.The protocol stack based on μCOS-II embedded operating system is designed and implemented.The J1939 messages can be sent and

through it.High-speed communication network between ECUs in the different positions in the vehicle and with real-time closed-loop controlling function is supported by the protocol stack.The protocol stack is verified on the motormeter using the SAE J1939 protocol,the result show that the communication between ECUs of the vehicle is implemented very well.

CAN bus;SAE J1939;μC/OS-II;ECU

TP277

A

1008-5483(2010)01-0025-05

2011-02-22

湖北省高等学校优秀中青年科技创新团队计划项目(T200903)

张涛(1976-),男,湖北随州人,硕士,从事网络安全、网络应用方面的研究。

猜你喜欢
链路层传输层物理层
基于K-ML-MPWFRFT的物理层安全传输技术
基于多空间内存共享的数据链路层网络包捕获方法
基于Python语言的网络传输层UDP协议攻击性行为研究
ZnO电子传输层在有机无机杂化钙钛矿太阳能电池中的应用
公路联网电子不停车收费系统路侧单元物理层自动测试软件研发
物联网无线通信传输层动态通道保障机制
基于物联网GIS的消防智能巡检系统设计与实现
基于FPGA全功能MVB网络从设备链路层IP核设计
多天线物理层安全传输系统性能分析
数据链路层的选择重传协议的优化改进