在协议制定5年后,该协议规范(V2.1)的第二版也在2005年春季出版[1]。第一批产品已于2003年推出,另外还将在今年推出更多产品。由于新技术能实现经济高效的新应用的实施,整个行业对它产生了浓厚的兴趣。
在FlexRay功能的基础上,我们将在下文中探讨潜在的应用领域。然后,我们将更加详细地介绍在FlexRay中使用的三种机制,并列举一系列示例来讨论FlexRay的几种应用。最后,我们将讨论可行和不可行拓扑的示例,并简要论述唤醒集群的场景。在本文的最后,我们将讨论如何计算最优的消息大小。
本文的主要目的是介绍FlexRay的相关知识,帮助用户了解FlexRay及其应用的潜力。
FlexRay概况
特性 FlexRay提供了传统车内通信协议所不具备的大量特性。这些特性能为新型应用创造大量的机会。这些基本特性包括:
2 x 10 Mbit/s的数据速率
FlexRay支持两个通信信道:每个信道的速度达到10 Mbit/sec。与CAN协议相比,取决于配置和比较模式的不同,它能将可用带宽提高10-40倍。
同步时基
FlexRay中使用的访问方法是基于同步时基的。该时基通过协议自动建立和同步,以提供给应用。时基的精确度介于0.5 μs 和 10 μs之间(通常为1--2μs)。
提前知道消息的延迟时间,保证偏差幅度
通信是在周期循环中进行的。特定消息在通信循环中拥有固定位置,因此接收器已经提前知道了消息到达时间。到达时间的临时偏差幅度会非常小,并能得到保证。
冗余和非冗余通信
为了增强系统的可用性,FlexRay提供了冗余传输消息的选项。消息能够冗余传输,但并不是所有消息都必须冗余传输,否则会导致带宽的过多损失。
灵活性
在FlexRay开发过程中,主要重点是灵活性。不仅提供消息冗余传输或非冗余传输两种选择,系统还可以进行优化,以提高可用性(静态带宽分配)或吞吐量(动态带宽分配)。用户还可以扩展系统,而无需调整现有节点中的软件。同时,它还支持总线或星状拓扑。它提供了大量配置参数,可以支持对系统进行调整,以满足特定应用的需求,如通信循环的持续时间、消息长度等。
应用领域
2.1章节中列出的特性使它适合于大量应用领域:
CAN的替代技术
在数据速率要求超过CAN的应用中,人们现在同时使用了两条或多条CAN总线。FlexRay是替代这种多总线解决方案的理想技术。
骨干
FlexRay具备很高的数据速率,因而非常适合汽车骨干网络,用于连接多个独立网络。
实时应用,分布式控制系统
用户可以提前知道消息到达时间,消息循环偏差非常小,这就使FlexRay成为具有严格的实时要求的分布式控制系统的首选技术。
以安全为导向的系统
FlexRay本身不能确保系统安全,但它具备大量功能,可以支持以安全为导向的系统(如线控系统)的设计。
在车内通信方面,FlexRay提供了一次"典型转移",从事件驱动通信(CAN)迁移到时间驱动通信。这种迁移需要一定时间,因为它不仅会影响新技术的推出,还要求对涉及到的所有方面都进行重新培训。一旦这个迁移步骤完成,就会发现更多应用领域。
协议分类
目前已经存在大量专门为汽车应用设计的各种协议。图1进行了简要介绍。历史最悠久、同时最广为人知的协议是CAN(大多数情况下是高速CAN:CAN-C)。该协议既部署在动力系统中,也部署在车身应用中(低速CAN最为普遍)。它能够实现的最高数据速率为1 Mbit/sec,但网络的传输速率通常低于500 kbit/sec。
虽然LIN协议在几年前才制定,但其应用却已十分广泛。该协议是为传输速率要求较低的经济高效的模块开发的。它还特别部署在车身应用中,如座位和后视镜调整、电动窗等。它可以达到20 kbit/sec的速率,足以满足此类应用的需求。 (图片)
图1:汽车通信协议 D2B协议、MOST协议及其新版本协议是专为多媒体应用开发的,并且通常只在该领域使用。该协议不适合部署到其它领域。
在速度方面,FlexRay的速度介于CAN协议和MOST协议之间,但是由于它具有容错功能,所以更为复杂。
功能
本章节将更详细地介绍FlexRay中使用的部分机制,包括访问方法、时钟同步和集群启动等。
访问方法
使用FlexRay的通信是在周期循环中进行的。一个通信循环始终包括静态部分和网络闲置时间(NIT)。协议内部流程需要网络闲置时间,并且,在这个时段内,集群的节点之间不进行任何通信(图2)。
通信循环的静态部分基于TDMA(时分多址)技术。该技术将固定时槽分配给各个节点,在这个时槽内,允许节点传输数据。所有时槽大小相同,并且是从1开始向上编号。将1个或1个以上时槽固定分配给每个节点。在运行期间,该时槽的分配不能修改。 (图片)
图2:带静态和动态段的通信循环 除了静态部分以外,通信循环还选择性地组成动态部分。所谓的"小时槽法"用来访问动态部分的通信媒介。呼出消息永远分配给动态时槽。与大小都相同、始终用于传输的静态时槽相反,只要时槽分配给了节点,动态部分就只能在需要时才进行传输。因此,动态部分的可用带宽是动态分配的。如果消息号码(ID)和时槽号码对应,带有待发呼出消息的节点就会进行传输。如果没有节点传输,所有节点就会等候,等待的时间长度正是时槽的长度,然后它们的时槽读数也会增加。在时槽读数增加以后,所有节点都将检查该时槽号码是否与呼出消息对应。如果两者匹配,该节点将发送消息。所有节点接受这条消息,并且一直等到它们完全接收了这条消息后再增加时槽读数。这一过程将会持续,直至到达动态部分。如果在循环中,没有或者只有少数节点传输消息,在动态部分的结尾,就会达到更高的时槽数量。如果有大量节点进行传输,则到达的时槽数量就比较少。因此,拥有较高编号的(即优先权较低)呼出消息的节点可能在一个循环中传输,而不在另一个循环中传输,具体取决于动态部分在其之前已经传输的节点的数量。要确定消息已经传输,用户必须在静态部分发送该消息,或者必须将它分配给动态部分中的较低消息编号(即优先权较高)。
时钟同步
如果使用基于TDMA的通信协议,则通信媒介的访问在时间域中控制。因此,每个节点都必须保持时间同步,这一点非常重要。所有节点的时钟必须同步,并且最大偏差必须在限定范围内,这是实现时钟同步的前提条件。最大偏差称为精确。
时钟偏差可以分为相位和频率偏差。相位偏差是两个时钟在某一特定时间的绝对差别。频率偏差是相位偏差随着时间推移的变化。它反映了相位偏差在特定时间的变化。
有多种方法可以通过相位纠正和频率纠正实施时钟同步。FlexRay使用了一种综合方法,同时实施相位纠正和频率纠正。时钟同步是一个控制环路,与其它控制环路一样,它也由测量、计算和设定功能组成。
要测量每个时钟与其它时钟的偏差,所有节点都要在接收期间测量消息的到达时间。通过静态部分的定时机制,每个节点都知道消息应当何时到达。如果消息比预计时间早到或晚到,将能测量得出实际时间与预定时间之间的偏差。该偏差代表了传输和接收节点之间的时钟偏差。借助获得的测量值,可用容错平均算法计算出每个节点的纠正值[2]。
在频率纠正中,需要使用两个通信循环的测量值。这些测量值之间的差值反映每个通信循环中的时钟偏差变化。它通常用于计算双循环结束时的纠正值(见上文提及的方法)。在整个后来的双循环中,都使用该纠正值。
相位纠正值的计算只需一个循环周期的测量值,一旦接收了所有测量值,即可开始实施计算,并且它必须在开始相位纠正前完成。在通信循环末尾,网络闲置时间(NIT)的一部分被保留,用于相位纠正。相位纠正要相隔一个循环实施,避免影响时钟频率偏差的确定。
图3概述了时钟同步的相位,以及不同访问方法的分配。如需了解时钟同步机制的详细消息,请参见[3]。(图片)
图3:时钟同步机制 集群启动
与许多技术流程或程序一样,FlexRay中的启动阶段同样也是最复杂的操作阶段之一。这是因为FlexRay中的通信基于同步时钟体制,但在启动阶段,这种体制还未建立。由于具备容错功能,FlexRay中不存在主时钟,因而时基不是由主时钟定义的。
启动集群时,将会启动"coldstarter"程序,该程序始终会出现在多个实例中。首先,启动传输消息的coldstarter被称为"引导coldstarter",其它coldstarter则被称为"后续coldstarter"。
一旦节点被唤醒并完成初始化,它就能在发出相应的主机命令后进入启动流程。不属于coldstarter的节点会等候,直到它们至少识别到两个相互通讯的coldstarter为止。coldstarter自己会监控两个通信循环的传输信道,以确定其它节点是否正在传输。如果没有,该节点会开始进行传输,从而成为主要coldstarter。主要coldstarter首先会传输无格式符号,向其它节点说明:目前它正在启动该集群,作为主要coldstarter。在传输符号后(符号即特定数量的无效位),该节点开始启动它自己的时钟,并且开始第一个通信循环。根据预先定义的集群范围的通信机制,主要coldstarter将在其分配的时槽中传输,与其它所有节点一样,它将只在一个时槽的启动阶段传输。
主要coldstarter发送的消息可由后续coldstarter接收。在消息身份识别号码(ID)(该号码与时槽编号相同)的帮助下,接收器能够确定发送器位于哪个时槽。传输节点的当前循环编号附带在每条消息中发送。在接收第一条消息后,其它节点等待在下一个通信循环中发送的第二条消息。一旦收到第二条消息,后续coldstarter将开始启动他们的时钟,该时钟由循环编号和接收消息的时槽编号进行初始化。这样就可以为传输器和接收器之间的同步时间操作奠定基础。此外,接收节点会测量第一条消息和第二条消息之间的时间,该时间与通信循环的循环时间对应。测量出的时间与本地coldstarter时间进行比较。还可以通过减法确定可能偏差,频率纠正机制使用该偏差值作为纠正值。因此,下列coldstarter不能使用接收到的循环号码和时间值(与传输的时间槽对应)来启动时钟,但是它会修改其时基的频率,使它尽可能地接近主要coldstarter的值。
原则上,在启动时,后续coldstarter的时钟会与主要coldstarter时钟同步。为了减少可能的错误,下列coldstarter在传输前必须等待两个循环。在这两个循环之间,下列coldstarter继续接受领先coldstarter的消息和其它已集成了下列coldstarter的消息。从接收的消息看,接收时间将与本地coldstarter进行比较。预测的和规定的接收之间的偏差需要测量出来,纠正数值则按照3.2介绍的时钟同步算法进行计算和应用。如果计算出的纠正值没有超过特定的阈值,节点就可以从下一个循环开始传输。它已经成功完成了启动阶段,并且现在正在"正常运行"(正常的通信状态)。
在确定和验证计算出的纠正值后,主要coldstarter会收到来自两个循环中的后续coldstarter的消息,完成启动阶段。图4对主要coldstarter和后续coldstarter的启动阶段进行了介绍。 (图片)
图4:FlexRay 集群启动 应用
可行和不可行的拓扑
FlexRay可以实现大量不同拓扑的应用。通常,FlexRay节点可以支持两个信道,因而可以开发单信道和双信道两种系统。在双信道系统中,不是所有节点都必须与两个信道连接。图5和图6的示例显示了一个系统,其中的节点1、3、5都与两个信道连接,而节点2和4都只与一个信道连接。图5和图6中的例子表示接口逻辑相同的拓扑。两个拓扑的不同之处在于,图5的总线用于节点连接,而图6的星状耦合器则用于各个信道。(图片)
图5:双信道拓扑举例 与总线结构相比,星状耦合器的优势在于:它在接收器和发送器之间提供点到点连接。该优势在高传输速率和长传输线路中尤为明显。另一个重要优势是错误分离功能。例如,如果信号传输使用的两条线路短路,总线系统在该信道不能进行进一步的通信。如果使用星状结构,则只有到星状连接短路的节点才会受到影响。其它所有节点仍然可以继续与其它节点通信。更多支持拓扑的例子如[4].所示。(图片)
图6:双信道星状拓扑 图7的拓扑由3个信道组成,每两个信道分别与一个节点相连。该拓扑不是FlexRay允许的拓扑形式。FlexRay不支持该拓扑,也不支持其功能。原因很简单,在FlexRay中,信道A和B使用不同的CRC,以确保传输中的数据安全。这样可以防止两个信道的意外混合。这还意味着:连接到信道A的节点不能与连接到信道B的节点通信,无法满足图7中的信道C的通信要求。除了CRC不兼容以外,也没有为这种拓扑设计时钟同步。(图片)
图7:FlexRay的不可行拓扑举例 唤醒集群
FlexRay提供了一些通过通信信道来唤醒集群的功能。这种唤醒要与主机应用协作进行。现在,有几个可能的方案,我们将对其中一个方案进行详细介绍。图8显示了带4个节点的集群。本图中的数字号码表示唤醒每个模块的步骤,并且与顺序编号相同。 (图片)
图8:通过通信信道唤醒集群 1. 外部事件唤醒了主机控制器1。它从睡眠模式切换到正常模式,然后开始初始化。在初始化阶段后,它将FlexRay CC从睡眠(关机)状态切换到正常状态(开机状态)。
2. 主机1唤醒FlexRay CC,进行初始化。
3. 主机唤醒总线驱动((BD 1A 和 BD 1B)。
4. 主机通过通信信道,向CC发出唤醒集群的命令。CC进入唤醒状态,生成唤醒模式,该模式先发送到总线驱动,总线驱动再将它发送到总线。
5. 信道A上的所有总线驱动均采用唤醒模式。它们从睡眠模式进入正常模式,然后唤醒主机。
6. 主机控制器2和3执行初始化程序。
7. 主机2和3唤醒CC,然后进行初始化。此时该流程已实施完毕。
8. 检查信道B上的总线驱动是否被同时唤醒。如果没有,主机应唤醒第二台总线驱动。
9. 选择主机,验证两条信道是否都已被唤醒。如果没有,一台或多台主机应向CC发送唤醒命令(参见图4),以唤醒第二个信道。信道B上的唤醒模式可以唤醒该信道上未被唤醒的所有总线驱动。
10. 只连接到信道B的节点只能由信道B(节点4)上的唤醒模式唤醒。总线驱动唤醒主机。
11. 初始化后,它又唤醒CC。
12. 如果两个信道都已被唤醒,则可以执行启动。为了实现启动,每个主机应向CC发送启动命令。
所有唤醒只能由总线驱动、CC和主机一起协作实现。上述任何一种设备都不能单独执行自己的唤醒操作。唤醒不是完全由FlexRay执行的一项功能。相反,它还要求应用软件的介入。
帧的大小选择
在设计基于FlexRay的通信系统时,用户必须作出一系列决定,这会影响效率、可靠性、安全性和用户友好性。因此,除了选择正确的拓扑外,还需要定义大量参数。其中的参数之一就是帧的大小。
在静态部分中,所有帧都具有相同的尺寸,该尺寸实质上决定着时槽的大小。这种通信系统的目标是尽量传输更多的用户数据,同时将开销控制在尽量小的范围内。帧的大小在这个方面发挥着重要作用。下面将举例演示用户拥有哪些配置选项。表1:示例:集群中的传输数据分配
(图片)表1显示了带有7个节点的集群中的可能传输数据分配的示例。根据这个分配方式,表2计算了几种不同场景。为进行计算,首先选择了消息大小(净数据)。在本过程中,FlexRay必须遵循一些规则。静态部分的所有消息的大小都是相同的。此外,消息大小必须为偶数。表2的第2列选择了4种不同的消息大小。第3列显示要在一个循环中传输所有数据,相应地需要多少消息(要根据消息大小确定)。将消息大小(第2列)与消息数量(第3列)相乘,就可以得出一个循环中的总的净数据量(第4列)。 表2:最优帧大小的计算
(图片)根据净数据的数量,第2号应当是最佳解决方案。但是,要选择最适合的方案,在实际操作中必须考虑到:消息不只是由有效载荷数据组成的。
在传输时还可能增加其它数据,如识别符和CRC。因此,第5列在显示总的消息大小时,还考虑了5字节的报头和3字节的CRC。
除了报头和CRC外,还会将起始顺序(TSS)添加到每条消息上,它们需要TSS来激活发送器和接收器。在传输消息后,节点需要一定时间来识别通信媒介是否有活动。这段时间被称为"闲置识别时间",在配置中必须考虑这个时间。第6列显示了需要的带宽,考虑到了开始顺序和闲置时间。
集群中的时钟总是会显示一些偏差,这些偏差的最大值称为准确度。两条消息之间的时间距离必须大于这个精确度,以避免来自不同节点的消息重叠。由于系统的确切精确度无法确认,都是通过估计得出的,因而要为这个精确度增加一个安全余量。例如在本例中(10 Mbit/s的位速率),时钟偏差的整个安全余量为4 μs,所有消息都增加了安全余量,相当于每条消息都额外增加了40位。最右列显示的是需要的带宽(单位:字节)。
在比较净数据(第4列)时,解决方案2是最佳方案,但在考虑其它因素时,解决方案4则更胜一筹。它是所选示例4的最佳方案。在选择帧大小时,不仅要考虑最后得到的带宽,还要考虑其它诸多因素:良好的可用性、解决方案的简易扩展、良好的调试功能和错误检测选择(特别是测试车辆)。这些功能更难用数字表示。所有这些因素的重要性都一样,因此不能忽略。
总结和展望
在本文中,作者根据FlexRay的最重要特性,重点介绍了预期的应用领域。鉴于各种机制的数量庞大,我们只重点介绍了两种核心机制。随后,本文又讨论了集群启动,不仅说明了机制如何互操作,还对协议的复杂性进行了介绍。
通过通信信道来唤醒集群和选择最佳帧大小的拓扑配置,应当是用户特别感兴趣的部分。我们在示例中对不同选择方案进行了讨论。
FlexRay是许多公司正在评估的一种通信协议。第一批产品已向用户推出,更多产品将在今年继续推出。各种工具可以帮助用户设计并配置基于FlexRay的通信系统。要成为CAN这样的标准技术,FlexRay还需要几年时间。但是,现在实现该目标的第一步已经实现,今后必定会取得更多进展。
文献资料:
[1] FlexRay Communications System - Protocol Specification, Version 2.1, FlexRay Consortium, Apr. 2005.
[2] J. L. Welch, N. A. Lynch: A New Fault-Tolerant Algorithm for Clock Synchronization. Information and Computation, Volume 77, No. 1, pg. 1-36, Apr. 1988.
[3] M. Rausch: Optimierte Mechanismen und Algorithmen in FlexRay. Elektronik Automotive, pg. 36-40, Dec. 2002.
[4] FlexRay Communications System - Electrical Physical Layer Specification, Version 2.1, FlexRay Consortium, Apr. 2005.
作者简介:
Mathias Rausch 博士, 飞思卡尔半导体公司高级系统工程师
M. Rausch博士从事技术控制论和控制理论的研究,并在1996年获得离散事件系统博士学位。在美国宾西法尼亚州匹兹堡Carnegie Mellon大学从事访问研究后,他于1998年加盟摩托罗拉/飞思卡尔,并在汽车电子不同领域工作。自2000年以来,他开始致力于推动FlexRay协议的发展。2004年,他成为该协议技术规范的编辑,主要负责该协议技术规范的制定和修改。
3/2/2006
|