|
FlexRay协议制定5年后,该协议规范第二版(v2.1)在2005年春季发布。由于新技术能实现经济高效的新应用,整个行业对这个标准产生可浓厚的兴趣,本文将探讨该标准潜在的应用领域,详细地介绍在FlexRay中使用的三种机制,并列举一系列实例来讨论FlexRay的几种应用。此外,本文还将讨论可行和不可行的拓扑结构,并简要论述唤醒群组(Cluster)的场景,以及讨论如何计算最优的消息帧大小。
FlexRay提供了传统车内通信协议所不具备的特性:
a.2x10Mbps的数据速率
FlexRay可支持两个通信信道,每个信道的速度达到10Mbps。与CAN协议相比,它能将可用带宽提高10--40倍,具体大小取决于配置和对比模式的不同。
b.同步时基
FlexRay中使用的访问方法基于同步时基。该时基通过协议自动建立和同步,并提供给应用。时基的精确度介于0.5us和10us之间(通常为1--2us)。
c.知道消息的到达时间
通信是在不断循环的周期中进行的,特定消息在通信周期中拥有固定位置,因此接收器已经提前知道了消息到达的时间。到达时间的临时偏差幅度会非常小,并能得到保证。
d.冗余和非冗余通信
为了增强系统的可用性,FlexRay提供了冗余传输消息的选项。消息能够冗余传输,但并不是所有消息都必须冗余传输,否则会导致带宽的过多损耗。
e.灵活性
FlexRay协议的开发过程中关注的主要问题是灵活性。系统不仅可提供消息冗余传输或非冗余传输两种选择,还可以进行优化,以提高可用性(静态带宽分配)或吞吐量(动态带宽分配)。用户还可以扩展系统,而无需调整现有节点中的软件,同时,还支持总线或星型拓扑。FlexRay提供了大量配置参数,可以支持对系统进行调整,如通信周期的持续时间、消息长度等,以满足特定应用的需求。
上述特性使FlexRay适合于很多应用领域,包括:
1.替代CAN总线
在数据速率要求超过CAN的应用中,人们现在同时使用了两条或多条CAN总线。FlexRay是替代这种多总线解决方案的理想技术。
2.骨干网络
FlexRay的高数据速率非常适合于汽车骨干网络,它可用于连续多个独立网络。
3.实时应用,分布式控制系统
用户可提前知道消息到达时间,消息周期偏差非常小,这使得FlexRay成为具有严格实时要求的分布式控制系统的首选技术。
4.面向安全的系统
FlexRay本身不能确保系统安全,但它具备大量功能,可以支持面向安全的系统(如线控系统)设计。
在车内通信方面,FlexRay提供了从事件驱动的CAN通信转换到时间驱动通信的一个转换范例。这种转换需要一定时间,因为它不仅会影响新技术的引入,还要求对涉及到的所有人员进行重新培训。一旦这个转换步骤完成,就可以应用到更多的领域中。
功能和机制分析
1.访问方法
FlexRay的通信是在逐个周期中进行的,一个通信周期始终由静态部分和网络闲置时间(NIT)组成。协议内部流程需要网络闲置时间,在这个时间段内,群组的节点之间不进行任何通信。
通信周期的静态部分基于时分多址(TDMA)技术。该技术将固定时隙分配给各个节点,在这个时隙内,允许节点传输数据。所有时隙大小相同,并且是从“1”开始向上编号。将一个或一个以上的时隙固定分配给每个节点。在运行期间,这种分配不能修改。
除静态部分,通信周期还可以选择性地组成动态部分。一种所谓的“微时隙”法用来访问动态部分内的通信媒介。发送出去的消息永远分配给动态时隙。只要时隙分配给了节点,与大小都相同、始终用于传输的静态时隙相反,动态部分就只能在需要时才进行传输。因此动态部分的可用带宽是动态分配的。
如果消息号(ID)和时隙号对应,有待发消息的节点就会进行传输。如果没有节点传输,则所有节点就会等候,等待的时间长度正是微时隙的长度,然后它们的时隙计数器也会增加。在时隙计数器增加以后,所有节点都将检查该时隙号是否与将发出的消息对应。如果两者匹配,该节点将发送消息。所有其它节点接受这条消息,并且一直等到它们完全接收了这条消息后再增加时隙读数。这一过程将会持续,直至动态部分结束。如果在一个周期中,没有或只有少数节点发送消息,在动态部分的结尾将达到更高的时隙号。如果有大量节点进行发送,则到达的时隙号就比较低。因此拥有较高编号的(即优先权较低)发送消息的节点可能在一个周期中传输,而不在另一个周期中传输,具体取决于在其之前在动态部分已经有多少个节点进行了消息传输。要确定消息已经传输,用户必须在动态部分中对其分配较低消息编号(即优先权较高)。
2.时钟同步
如果使用基于TDMA的通信协议,则在时间域上控制对通信媒介的访问。因此,每个节点都必须保持时间同步,这一点非常重要。所有节点的时钟必须同步,并且最大偏差必须在限定范围内,这是实现时钟同步的前提条件。最大的偏差反映了精确度的大小。
时钟偏差可以分为相位和频率偏差。相位偏差是两个时钟在某一个特定时间的绝对差别。频率偏差是相位偏差随着时间推移的变化,它反映了相位偏差在特定时间的变化。
通过相位修正和频率修正可以实现时钟同步。FlexRay使用了一种综合方法,即同时采用相位修正和频率修正。时钟同步是一个控制环路,与其它控制环路一样,也由测量、计算和设定功能组成。
要测量每个时钟与其它时钟的偏差,所有节点都要在接收期间测量消息的到达时间。通过静态部分的定时机制,每个节点都知道消息应当何时到达。
如果消息比预计时间早到或晚到,将能测量得出实际时间与预定时间之间的偏差。该偏差代表了传输和接收节点之间的时钟偏差。借助获得的测量值,可用容错平均算法计算出每个节点的修正值。
在频率修正中,需要使用两个通信周期的测量值。这些测量值之间的差值反映每个通信周期中的时钟偏差变化,它通常用于计算双周期结束时的修正值(见上文提及的方法)。在整个后来的两个周期中,都使用该修正值。
相位修正值的计算只需一个周期的测量值,一旦接收了所有测量值,即可进行计算,并且它必须在开始相位修正前完成。在通信周期末尾,网络闲置时间(NIT)的一部分被保留,用于相位修正。相位修正要相隔一个周期来完成,以避免影响时钟频率偏差的确定。
3.群组启动
与许多技术流程或程序一样,FlexRay中的启动阶段同样也是最复杂的阶段之一。这是因为FlexRay中的通信基于同步时钟机制,但在启动阶段这种机制还未建立。由于具备容错功能,FlexRay中不存在主时钟,因而时基不是由主时钟定义的。
启动群组时,将会启动“coldstarter”,coldstarter总是存在于多个实例中。首先,启动传输消息的cold-starter被称为“主coldstarter”(leading
coldstarter),其它coldstarter则被称为“从coldstarter”(following coldstarter)。
一旦节点被唤醒并完成初始化,它就能在发出相应的主控制器命令后进入启动流程。不属于coldstarter的节点会等候,直到它们至少识别到两个相互通讯的coldstarter为止。coldstarter自己会监控两个通信周期的传输信道,以确定其它节点是否正在传输。如果没有,该节点会开始传输,从而成为主coldstarter。主coldstarter首先会传输一个空符号,向其它节点说明目前它正在作为主coldstarter启动该群组。在传输符号(符号即特定数量的无效位)后,该节点开始启动它自己的时钟,并开始第一个通信周期。根据预先定义的群组范围的通信机制,主coldstarter将在其分配的时隙中传输。与其它所有节点一样,它将只在一个时隙的启动阶段传输。
主coldstarter发送的消息可由从coldstarter接收。在消息ID(该号码与时隙编号相同)的帮助下,接收器能够确定发送器位于哪个时隙。传输节点的当前周期编号附带在每条消息中发送。在接收第一条消息后,其它节点等待在下一个通信周期中发送的第二条消息。一旦收到第二条消息,从coldstarter将开始启动它们的时钟,该时钟由周期编号和接收消息的时隙号进行初始化。这样就可以为传输器和接收器之间的同步时间操作奠定基础。
此外,接收节点会测量第一条消息和第二条消息之间的时间,该时间与通信周期的周期时间对应。测量出的时间与本地coldstarter时间进行比较。还可以通过减法确定可能偏差值作为修正值。因此,从coldstarter不仅使用接收到的周期号和时间值(与传输的时隙对应)来启动其时钟,还会修改其时基的频率,使它尽可能地接近主cold-starter的值。
原则上,在启动时从coldstarter的时钟会与主coldstarter的时钟同步。为了避免可能的错误,从coldstarter
在传输前必须等待两个周期。在这两个周期时间内,从coldstarter继续接收主coldstarter的消息和来自其它集成的从coldstarter的消息。已接收的消息的接收时间将与本地coldstarter进行比较,测量预测和接收时间之间的偏差,修正值则按照前面介绍的时钟同步算法进行计算和应用。
如果计算出的修正值没有超过特定的阈值,节点就可以从下一个周期开始传输。
至此,它已经成功完成了启动过程,进入“正常运行”状态(正常的通信状态)。
在确定和验证计算出的修正值后的两个通信周期内,在主coldstarter收到自从coldstarter的消息后完成启动阶段。
应用分析
可行的拓扑结构 FlexRay可实现大量不同拓扑的应用。通常,FlexRay节点可以支持两个信道,因而可以开发单信道和双信道两种系统。在双信道系统中,不是所有节点都必须与两个信道连接。
与总线结构相比,星型连接器的优势在于:它在接收器和发送器之间提供点到点连接,该优势在高传输速率和长传输线路中尤为明显。另一个重要优势是故障隔离功能。例如,如果信号传输使用的两条线路短路,总线系统在该信道中不能进行进一步的通信。如果使用星型结构,则只有到星型连接短路的节点才会受到影响,其它所有节点仍然可以继续与其它节点通信。
唤醒群组 FlexRay提供了一些通过通信信道来唤醒群组的功能,这种唤醒需要与主应用共同完成。有几个可能的实现方案,我们将对其中一个方案进行详细介绍。对于一个有4个节点的群组,每个模块的唤醒步骤如下:
1.外部事件唤醒了主控制器1,从睡眠模式切换到正常模式,然后开始初始化。在初始化阶段后,它将FlexRay
CC 从睡眠(关机)状态切换到正常状态(开机状态)。
2.主控制器1唤醒FlexRay
CC,进行初始化。
3.主控制器唤醒总线驱动(BD 1A和BD
1B)。
4.主控制器通过通信信道,向CC发出唤醒群组的命令。CC进入唤醒状态,生成唤醒模式,该模式先发送到总线驱动器,总线驱动器再将它发送到总线。
5.信道A上的所有总线驱动器均采用唤醒模式。它们从睡眠模式进入正常模式,然后唤醒主控制器,主控制器2和3执行初始化程序。
6.主控制器2和3唤醒CC,然后进行初始化,此时该流程已执行完毕。
7.检查信道B上的总线驱动器是否被同时唤醒。如果没有被唤醒,主控制器应唤醒第二个总线驱动器。
8.所选择的主控制器验证两条信道是否都已经被唤醒。如果没有,一个或多个主控制器应向CC发送唤醒命令,以唤醒第二个信道。信道B上的唤醒模式可以唤醒该信道上未被唤醒的所有总线驱动器。
9.只连接到信道B的节点只能由信道B(节点4)上的唤醒模式唤醒,总线驱动器唤醒其主控制器。
10.主控制器初始化后,主控制器又唤醒CC。
11.如果两个信道都已被唤醒,则可以执行启动。为了实现启动,每个主控制器应向CC发送启动命令。
唤醒操作只能由总线驱动器、CC和主控制器一起共同实现。上述任何一种器件都不能单独执行自己的唤醒操作。唤醒不是完全由FlexRay执行的一项功能,还必须有应用软件的介入。
帧的大小选择 在设计基于FlexRay的通信系统时,用户必须作出一系列决定,这些决定会影响到效率、稳定性、安全性和用户友好性。因此,除了选择正确的拓扑外,还需要定义大量参数,其中一个参数就是帧的大小。在静态部分中,所有帧都具有相同的大小,帧的大小实质上决定着时隙的大小。这种通信系统的目标是尽量传输更多的用户数据,同时将开销控制在尽量小的范围内,帧的大小在这个方面发挥着重要的作用。
摘自《电子工程专辑》2005.9.16--30
返回>>>
|