张宝宝,张友兵,兰建平,周海鹰
(湖北汽车工业学院 汽车工程师学院,湖北 十堰442002)
目前CAN总线以其性价比优势在整车通信市场上占据了较大的份额,它既可实现远距离通信,也能进行多个节点之间的相互通信[1]。随着自动驾驶技术的迅速发展,车用传感器数量不断增加,对应的控制节点也越来越多,对整车的数据传输提出了更高的要求,CAN 总线在信息传输数量和实时性方面面临巨大的挑战[2]。以太网表现出的较高通信速率、组网方便灵活、安全可靠和实时等优势,得到汽车行业者的青睐[3]。CAN总线通信网络应用广泛,短时间内以太网不能完全将其取代,需要经历以太网通信网络与传统车载通信网络并存的过渡阶段。根据车辆控制模块传输信息的特点,在信息量小、实时性要求低的控制模块之间传输采用CAN总线通信;而在信息传递量大、实时性要求高的控制模块之间采用以太网通信[4]。CAN 总线和以太网之间协议不兼容,因此设计基于LPC1768的车载网关,实现CAN 总线协议和以太网协议之间的相互转化,保证其安全性、可靠性和实时性等。
车载以太网采用单对非屏蔽双绞线进行通信,既解决了普通以太网的时延问题,又能适用于车载的恶劣工作环境[5]。普通以太网对应的OSI 参考模型有7层,而车载以太网通常被认为有4层:应用层、传输层、网络层、数据链路层。车载以太网中可实现SOME/IP 面向服务的通信,弥补了CAN 总线面向信号的不足,同时还可实现基于IP 协议的DOIP 诊断,具备未来自动驾驶时代更高性能的潜力。目前车载以太网在汽车的动力域、底盘域、安全域和信息娱乐域都有应用,适用场景比较多,但由于未完全普及,成本比较高[6]。
随着智能驾驶技术的迅速发展,汽车应用传感器和电气设备越来越多,使用的总线通信网络各种各样。为了控制总线长度和降低ECU 数量,普遍采用以域控制器为主的开放式汽车整体架构,如图1 所示。将汽车电子系统根据功能划分为若干个功能块,每个功能块内部的系统架构以域控制器为主导进行设计,中央网关进行信息交互。车载网关相当于信息枢纽,实现高低速CAN、LIN、FlexRay和以太网等不同协议通信网络之间的信息交互,在原有传统总线通信的基础上增加以太网的通信接口,满足整车的通信网络架构要求。车载网关除了进行通信协议的转换之外,还具有程序在线更新、整车通信网络诊断等功能[7]。
图1 开放式汽车整体架构
车载网关通过单片机对车载局域网的信号进行处理,达到信息共享和实现数据的无差错传输,保证安全驾驶。车载网关由硬件电路和应用程序2个部分组成,实现CAN总线通信协议和以太网协议的相互转换,进行CAN 总线和以太网间的双向通信[8]。车载网关系统框图如图2 所示。CAN 收发模块PCA82C251 接收CAN 总线上的数据,转换为以太网通信协议数据后,通过以太网控制模块DP83848 上传到网络中;同时,以太网模块接收网络中的数据,转换为CAN 总线协议数据后,通过CAN收发模块将转换的CAN报文数据按照相应的时间周期下发到汽车的总线上。
图2 车载网关系统框图
车载网关采用NXP 公司的LPC1768 作为中央处理器,以ARM Cortex-M3为内核,通过AHB总线连接CPU 和CAN 控制模块、以太网控制模块的通信,可以进行更高更快的信息传输。处理器具有3级流水线和哈佛结构,操作频率可达100 MHZ,内置可嵌套的向量中断控制器(NVIC),支持多种中断方式,并且能实现低功耗。LPC1768具有含系统编程(ISP)和应用编程(IAP)功能的512 kB 片上Flash 存储器、64 kB数据存储器、以太网MAC、8通道通用DMA控制器、2条CAN通道、多个通用定时器和70余个通用I/O管脚等外设组件,满足车载网关的功能需求。
CAN 通信电路如图3 所示,主要由CAN 收发器驱动模块和电路隔离模块构成。CAN 收发器采用NXP 公司的PCA82C251,在CAN 控制器和物理传输线之间起逻辑电平与差分电压信号转换的作用,接收来自CAN总线的差动信号,同时具有一定的抗共模干扰能力。隔离模块采用ADI 公司的ADUM1201,运用iCoupler技术,体积小,应用灵活,基于电磁的隔离方法,性能优于其他光电隔离器件,实现了真正意义上的电气隔离,防止过流冲击损坏主芯片。同时电路配有NUP2105L 管,实现CAN 总线上的浪涌保护,可实现车辆复杂工作环境下的CAN总线通信。
图3 CAN通信电路
LPC1768芯片自带以太网模块,集成了介质访问控制层(MAC),支持10 Mb·s-1或100 Mb·s-1PHY设备,配有对应的8通道DMA控制器,通过标准RMII 接口连接外部PHY 芯片,能接收过滤,结合以太网通信电路,可实现车辆复杂工作环境下的以太网通信。以太网通信电路如图4所示。
图4 以太网通信电路
PHY芯片采用美国国家半导体(NS)公司生产的DP83848C 集成以太网控制芯片,该芯片鲁棒性好、集成度高、功耗低,支持10/100 Mb·s-1的以太网通信,配合RMII(精简的介质无关接口)标准接口,减少MAC至PHY接口的引脚数目,使设计简单灵活。同时,配有千兆以太网口HR911105A,内含有以太网变压器电路,实现阻抗匹配、信号整形、网络隔离,以及滤除网络和设备双方面的噪音,适用于车辆复杂的工作环境。
文中主要实现CAN总线通信协议和以太网协议的相互转换,同时利用二次开发的BootLoader程序实现对网关应用程序的远程更新。软件由Boot-Loader程序和应用程序组成,其中应用程序分为协议转换、CAN 收发通信和以太网收发通信3 个部分。车载网关的软件设计框图如图5所示。
图5 软件设计框图
对车载网关进行ISP编程后,二次开发的Boot-Loader 程序被烧写到指定Flash 区域,用拨码开关将芯片P2.10引脚置为高电平。网关使用上电时,首先执行BootLoader 程序,初始化IAP 端口(网口),通过判断状态确定是否需要从IAP 端口更新应用程序,若需要更新则通过IAP命令将接收到暂存于SRAM 的应用程序Bin 文件数据写入到指定的Flash区域,更新完成后跳入到指定的Flash区域执行最新的应用程序;若不更新则直接跳入到指定的Flash区域执行之前的应用程序。跳转到应用程序后,利用LPC1768 的定时、中断等功能保证网络通信和数据的收发、协议的转换实时运行。执行系统的网络通信功能是在无操作系统的环境下通过移植LwIP协议栈达到减少内存占用的效果来实现的。主程序流程图如图6所示。
图6 主程序流程
系统通过CAN 接收中断、以太网接收中断和定时器中断来实现数据的收发和协议转换。调用CAN 发送函数(CAN_send),将网络数据转换后的CAN 报文按照所设置的时钟周期下发到车辆的CAN总线上;调用UDP发送函数(Udp_send_data),将CAN数据转换后的网络数据UDP包发送到网络中。中断程序流程如图7所示。
通信过程中UDP 数据包的格式不固定,为了与CAN 报文帧有效无差错地相互转换,需要进行定义,如表1 所示,校验位是UDP 数据包在上层和下层被接收时进行验证,确保信息传递的安全性。
图7 中断程序流程
表1 UDP数据包格式
LPC1768 设计CAN 总线通信时,在应用程序的main 函数内依次调用CAN_setup 函数(设置CAN 控制器)、CAN_start 函数(启动CAN 控制器)、CAN_waitReady 函数(等待CAN 控制器就绪)、CAN_SetACCF 函数(初始化使能滤波选择)后,根据CAN接收中断和定时器中断调用CAN_recive函数和CAN_send 函数,实现CAN 报文的接收和发送。同时LPC1768提供512×32(2 kB)的滤波RAM空间,该RAM空间可以存放1024个标准标识符或512 个扩展标识符,填充好所需要滤波的标识符(ID 号)后,在调用CAN_SetACCF 函数时选择ACCF_ON参数,实现滤波功能。
在无操作系统下移植LwIP 协议栈,实现基于LwIP 协议栈的UDP 通信,达到网络通信的目的。UDP 是无连接的传输层协议,没有TCP/IP 协议的握手、确认等机制,实时性很好,可传输大批量数据。使用UDP 协议,编程接口时采用回调函数的方式,绑定对应的IP和端口号后,在接收到网络数据时调用LwIP 协议栈注册的回调函数UDP_recv,使编程大大简化。系统会为应用线程创建一个UDP 控制块,里面含有源端口号、目标端口号、源IP 地址、目标IP 地址和回调函数等信息,当收到UDP 数据时,控制块之间互相匹配,找到对应端口号,建立UDP 通信。为了UDP 通讯快速进入监听状态,需进行UDP服务器的初始化,源代码如下:
为了验证系统的可靠性,对车载网关进行测试验证。建立实验平台,利用周立功公司生产的USBCAN-2E-U模拟CAN总线上的节点,利用配套上位机软件CANTest 进行CAN 报文的收发。用网线将网关的以太网网口与电脑的网口相连,用网络调试助手模拟客户端进行UDP 数据包的接收和发送,用12 V直流电源对网关进行供电,建立通信回路。车载网关的测试平台如图8所示。
搭建起测试平台后,利用ping命令检测网络通信的连通情况。出现图9 所示界面表明网络通信正常,测试平台搭建成功,车载网关的IP 地址为192.168.1.60。
图8 车载网关的测试平台
图9 网络通信正常界面
测试平台搭建成功后进行功能验证。依次打开CANTest软件和网络调试助手,在CANTest中选择对应的设备,连接成功后以100 ms 的时间间隔发送ID 为0x219的CAN 报文,帧数据为0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07;在网络调试助手中设置本地IP 地址为192.168.1.10,网关IP 地址为192.168.1.60,端口号为4001,根据定义的UDP 数据包格式发送ID 为0x383 的UDP 数据包,下发周期为200 ms,数据为0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88。
CANTest显示界面如图10所示,模拟节点每隔200 ms 接收到ID 号为0x383、数据为0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88 的CAN 报文;网络调试助手显示界面如图11 所示,客户端接收到ID号为0x219 转换后的UDP 数据包,对应数据为0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,接收数据与转换前的发送数据相同。
图10 CANTest界面显示
图11 网络调试助手界面显示
经过多次数据测试,同时结合整车应用,对数据分析表明CAN报文数据与UDP数据包转换内容一致,下发周期与设定相同,说明车载以太网网关工作正常,稳定性、实时性和安全性高,满足功能要求。
车载以太网网关通过器件选型和隔离、防浪涌等保护电路设计,保证其在复杂工况下稳定运行。开发BootLoader实现网关应用程序的远程更新,便于后期维护升级。网关能够准确实现以太网数据和CAN 总线数据的相互转换,有效解决了车载以太网不能与传统CAN总线直接通信的难题。