基于三级队列缓存的FlexRay网络监控平台
2017-11-01白卫伟
刘 彪,白卫伟,钟 韦
(北京交通大学 电气工程学院,北京 100044)
基于三级队列缓存的FlexRay网络监控平台
刘 彪,白卫伟,钟 韦
(北京交通大学 电气工程学院,北京 100044)
FlexRay以其实时性、灵活性、高带宽的优势,被称为“下一代车载网络”;然而其协议相对复杂,网络组网调试过程较困难;目前的辅助调试工具如CANoe不能进一步分析网络性能,在应用上具有局限性;针对上述问题,提出了一种同时对多个数据采集与存储的解决方案,并以FPGA为核心设计了FlexRay网络监控平台,利用SPI和USB总线设计了通信协议,在数据缓存方面设计了三级队列缓存方案;该平台实现了通信数据监测功能,可以获取结点CPU中寄存器状态、记录数据帧到达时间,进而分析网络运行及故障状态,同时解决了大量数据缓存溢出的问题;经过测试表明:系统能够稳定运行,适用于快速、优化地设计FlexRay网络。
FlexRay;测试平台;FPGA;三级缓存
0 引言
FlexRay具有10 MHz带宽、双通道冗余、消息发送时间的确定性等优点[1-4],更适用于日益复杂的车载主干网络以及对实时性要求严苛的线控系统[5]。然而FlexRay协议较复杂,需要完成四类参数——全局参数、节点参数、物理层参数与辅助参数共计超过70个参数的配置[6],同时由于启动和同步过程的特殊性,在开发初期的结点组网调试过程中很不方便。
目前国外的一些商业化的辅助调试工具,比如Vector公司的CANoe.FlexRay环境及配套采集结点VN7600,可以协助完成组网,但作为集成产品只能获取通信数据,不能进行进一步的网络性能分析,无法获取网络运行状态参数,在通信故障情况下无法获得运行参数,也无法解决FlexRay网络数据大量缓存的问题,在应用上还有一定的局限性。
本文提出了一种同时采集多个数据采集与存储的解决方案,并基于此方案设计了FlexRay网络监控平台,此平台除了可以监测通信数据以外,还可以获取网络运行及故障状态并且解决了大量数据缓存溢出的问题,能够帮助工程师更快速、更优化地设计FlexRay网络,同时成本相对于CANoe大大降低。
1 Flexray总线技术
FlexRay是由BWM和Daimler Chrysler等公司形成的FlexRay联盟(FlexRay Consortium)为了满足未来汽车的通信需求而共同开发的车载网络协议。FlexRay是一个高速、容错的车辆总线系统,核心概念是时间触发的网络通信协议,更加关注汽车行业的一些核心需求,比如数据传输率,数据通信的灵活性,更全面的拓扑选择等。FlexRay电气物理层为一个发送与一个或多个接收通信模块提供了一种差分电压连接(即总线),差分电压通过测量两个表示为BP(总线正)和BM(总线负)的信号线得到[7]。相较传统的车用总线,F1exRay在很多方面都有突出的表现,其优点如下:
1)传输速率高:F1exRay有两条分离的通信信道,相比于CAN总线1 Mbps的传输速率,F1exRay信道的数据最高传输速率为10 Mbps,双通道运行时,数据的传输速率可以达到20 Mbps。
2)预知消息的到达时间:根据F1exRay总线的通信机制,消息是在不断循环的周期中进行发送的。各类消息在通信周期中所占的位置己事先设定,所以各类消息的接收节点可以提前知道消息到达的时间。
3)可靠性高:F1exRay有通信冗余能力,采用分布的时钟同步机制,实时纠正相位合速率偏差,提供了多个等级的容错功能;并且可以采用双通道冗余通信。
4)灵活性强:F1exRay可以实现同步和异步的数据传输,也可进行网络进度的检测;FlexRay可以实现总线、星型和混合拓扑网络结构的灵活配置,通过采用一种或结合两种或两种以上的拓扑结构来进行分布式系统的配置;FlexRay媒体访问机制灵活,静态段采用基于时间触发的媒体访问机制,保证了数据通信的可预测性和时钟同步,动态段采用基于事件触发的媒体访问机制,更有利于不同带宽消息的传输,可以有效提高带宽利用率。
2 总体方案设计
依据FlexRay总线的特点,该监控平台需要实现如下功能:能够接收多路FlexRay结点中CPU的数据帧;能够查看CPU的寄存器;能够接收错误类消息;能够获取数据帧到达时间,数据收集器能够将数据发送至上位机进行存储、分析。
本监控平台的总体方案包括由3个FlexRay结点组成的通信网络;基于FPGA进行搭建的用于对通信网络进行数据采集的数据收集器以及上位机。3个FlexRay节点之间通过FlexRay总线进行数据通信,FlexRay节点和FPGA通过SPI总线连接,FPGA和上位机之间通过USB总线进行数据交互[8]。该监控平台采用的总体方案如图1所示。
图1 FlexRay网络监控平台总体设计方案
该监控平台采用的FPGA是基于Altera公司的EP4CE10F17C8芯片。USB接口是基于Cypress的CY7C68031A芯片,该芯片支持高速USB2.0协议。该监控平台需要为FlexRay结点中的CPU嵌入一段数据打包及一段用于SPI数据通信的程序,为了提高兼容性,采用通用IO模拟SPI接口。
3 平台设计
3.1 多级总线协议设计
如图2所示,该平台中涉及到FlexRay结点CPU、FPGA(Field-Programmable Gate Arrary现场可编程器件)[9]和上位机的数据交互以及SPI总线和USB总线通信。数据通信协议设计为4层,如图2所示。SPI字节流用于完成CPU和FPGA之间一个字节的发送,SPI帧用于CPU和FPGA之间一帧数据的传输,USB帧用于FPGA和上位机之间的数据传输。其中单片机到电脑的数据传输过程为,单片机将应用层数据打包成SPI帧,SPI帧之后被拆解成单个的字节流发送至FPGA,FPGA将字节流组成SPI帧,之后FPGA将SPI帧打包成为USB帧发送至PC,FPGA和PC之间的底层通信由Cypress的USB控制器完成。最后PC应用层拆解USB帧,再拆解SPI帧即可得到FlexRay结点CPU的应用数据。PC和FPGA之间的通信方式为PC上位机将数据打包成USB帧发送至FPGA,FPGA拆解USB帧即可得到数据。
图2 通信协议架构图
SPI帧分为3种:寄存器数据观测格式、不带时间戳和带时间戳的FlexRay通信数据观测格式,如表1、表2、表3所示。
表1 寄存器数据观测格式
表2 不带时间戳的FlexRay通信数据观测格式
表3 带时间戳的FlexRay通信数据观测格式
带时间戳的SPI帧记录数据到达FPGA的时间,可以一次发送多帧FlexRay帧数据,不带时间戳的SPI帧不记录帧到达FPGA的时间,只能一次发送一条FlexRay帧数据。
在FlexRay结点CPU中嵌入SPI帧发送程序,首先按照上述表中数据格式生成SPI帧,采用了队列形式实现多帧的存储,包含队列创建、1帧数据压入队列、3种帧格式的数据结构创建和将1个队列中存储的1帧数据发送。
USB帧数据用于FPGA和上位机之间的通信,本文设计3中USB帧格式,如表4~6所示。
表4 数据内容格式
表5 控制命令格式
表6 错误命令格式
3.2 基于三级缓存的FPGA程序设计
本监控平台采用了Altera的FPGA,其内部集成的SPI IP核模块和定时器模块一般是作为主机设计的,本平台需要将FPGA作为从机设计,所以SPI模块和定时器模块的程序都是通过Verilog HDL语言进行描述;另外Altera的FPGA内部嵌入了Nios II处理器,该处理器是用HDL语言进行描述之后映射到FPGA的通用逻辑单元中。
利用FPGA中的Nios II处理器完成控制功能。由于需要与多个FlexRay结点连接,FPGA在存储SPI帧数据时采用队列形式,本文共设计了三级队列缓存,以4个FlexRay结点为例的队列缓存如图3所示,其中Queue2_1表示第2号结点的一级缓存。一级缓存用于收集离散的字节,二级缓存用于存储一个SPI模块的帧数据,三级缓存用于向USB输出数据。
图3 SPI帧数据三级缓存
Nios II CPU使用Nios II 11.1 Software Build Tools软件开发,使用c语言进行编程。Nios II 程序开发软件开发环境和JAVA编程语言的开发环境类似,都是基于Eclipse IDE制作的。其重要部分分为初始化程序,SPI握手程序,CRC校验程序,SPI组帧程序,数据管理程序,USB帧封装程序,队列模块程序。二级缓存数据管理和将三级缓存中的SPI帧封装成USB帧的程序实现均在Nios II软核中实现。
二级缓存数据管理的流程如图4所示。
图4 二级缓存数据管理流程图
二级缓存向第三级缓存输出时采用依次从每个二级缓存中取一帧数据到第三级缓存中,如果数据帧有错误则将对应的SPI模块错误标志位置1,并且将SPI帧转换USB帧。错误处理函数会将对应的SPI模块的二级缓存清零,直到第三级的缓存等于400字节或者第三级缓存加上一帧的数据大于400字节。
图5是将三级缓存中的SPI帧数据封装成USB数据帧的流程图。
图5 SPI帧封装成USB帧的流程图
其中q1和q2是两个队列,q1中存储了SPI帧数据,q2中存储了USB帧数据流,q1是二级缓存,q2是三级缓存。
当上位机发起USB请求时,Nios II处理器会进入USB中断程序,将 USB帧数据从三级缓存的数据块转成无符号整型数据存入到无符号整型的数据块中。USB的中断程序的流程如图6所示,起始第三级缓存存入数据块即为将字节流转换为128个无符号整型的数据块。
图6 USB中断流程图
3.3 上位机程序设计
该测试平台PC端软件的功能有采集USB数据、USB界面交互、对数据进行解码、将数据存入数据库、静态段时槽规划、数据显示以及软件测试等。限于篇幅,此处不再介绍。
4 实验与分析
针对一个3结点的FlexRay网络进行了测试。
首先对FPGA中SPI利用Modelsim[10]进行时序仿真,如图7所示。Cs端口为外部使能功能,Clk为时钟输入,SI为数据输入端口,SO为数据输出端口。Indata是16位内部数据输入端口,InterCs是内部使能端口,OutEven是数据输出通知端口,DataOut是16bits数据输出端口。
实际测试中,SPI时钟频率设定为500 kHz,利用逻辑分析仪采集到的SPI时序信号如图8所示。通道0中采集的信号为主机MISO管脚,通道1中采集的信号为主机的SCK管脚,通道2采集的为主机的片选信号,通道3采集的是主机的MOSI管脚。
图7 SPI模块仿真时序图
图8 SPI时序信号
在FPGA中的数据需要使用,NIOS II Sofware Build Tools软件查看其中的数据,如图9所示,队列FlexRay_node2_queue2接入接收到了来自节点1的数据,该数据为寄存器数据。
图9 FPGA中队列中的数据
将FPGA数据采集器通过USB接口与上位机进行连接,通信网络中的数据就能通过查询数据界面进行显示,并转存到数据库中,USB通讯程序查询数据界面如图10所示。
从上位机数据库中可以查询FlexRay通信数据,查询结果如图11所示。
图10 USB通讯程序查询数据
图11 FlexRay通信数据展示界面
图10和图11表明,测试平台能够正常收集FlexRay节点的通信数据,通过对比FlexRay网络实际发送数据,没有出现缓存溢出及数据丢失情况。
5 结论
本文利用FPGA及NIOS II开发技术,设计了针对FlexRay网络的监控平台,结合SPI和USB总线设计了四层网络通信协议,设计了三级缓存来解决大量数据溢出的问题。经过测试,FPGA中SPI模块时序运行正常,可以正确接收到FlexRay网络结点CPU的寄存器状态以及数据到达的时间,在大量数据发送的情况下也没有出现缓存溢出及数据丢失的情况。本文所设计的监控平台针对FlexRay开发初期中组网调试能够提供较大的便利,从而缩短开发周期。
[1]陈 龙. 车载FlexRay主干网的构建与性能分析[D].哈尔滨:哈尔滨工业大学,2008.
[2] 包 玥. FlexRay车载网络的调度与控制协同设计[D].武汉:武汉理工大学, 2014.
[3] 孙 雨. FlexRay网络通信协议在车载系统中的应用与研究[D].长沙:中南大学, 2014.
[4] FlexRay Communications System - Protocol Specification, Version 3.0.1[S]. FlexRay Consortium, Oct. 2010.
[5] Paulitsch, M. Hall, B..FlexRay in aerospace and safety-sensitive systems[J]. IEEE Aerospace and Electronic Systems Magazine, 2008, 23(9):4-13.
[6] 庄江丽. FlexRay总线的组网及其在混合动力客车上的应用[D].北京:北京交通大学, 2012.
[7] 苑利维,李治国,朱晓荣. 一种FlexRay总线通讯测试系统设计[J]. 计算机测量与控制,2016,24(11):20-23.
[8] 杨建军. CAN总线技术在汽车中的应用[J].上海汽车,2007(6):32-34.
[9] 曹 晶. FPGA在智能交通产品中的应用研究[J].电子技术与软件工程,2016(6):139.
[10]张桂兴,张英敏,张 鹏. 基于IP核与ModelSim的正弦波发生器仿真平台建立[J].测控技术,2011,30(1):28-31.
FlexRay Network Monitoring Platform Based on Tri-stage Queue Buffer
Liu Biao, Bai Weiwei, Zhong Wei
(College of Electrical Engineering, Beijing Jiaotong University, Beijing 100044,China)
FlexRay is known as "the next generation of vehicle network" with the advantages of real-time, flexibility and high bandwidth. However, the complex protocol makes it difficult to build and debug the node network. Currently debugging tools can not be used to further analyze the network performance, which is the limitation in application, such as CANoe. In order to solve the problems above, a solution for multiple datas acquisition and storage at the same time is presented,and the FlexRay network monitoring platform is designed with FPGA as the core,where the protocol is based on the SPI and USB bus and tri-stage queue buffer is used for data cache.It realizes the monitoring function of the communication data, obtains the register state of the node CPU, records the arrival time of the frame, and then analyzes the network operation and fault state, and solves the problem of massive data buffer overflow. The result shows that the system can run stably and is suitable for designing FlexRay network quickly and optimally.
FlexRay; test platform; FPGA;tri-stage buffer
2017-02-09;
2017-02-28。
国家自然科学基金(61401017);中央高校基本科研业务费(2014JBM112)。
刘 彪(1982-),男,河北保定人,副教授,主要从事智能检测技术和现场总线与控制网络方向的研究。
1671-4598(2017)08-0139-04
10.16526/j.cnki.11-4762/tp.2017.08.036
TP368
A