汽车电子控制单元(ECU)之间的数据传输速度、数量和可靠性必须提高,汽车才能继续提高安全性、性能、减少对环境的影响并提高舒适度。 高级控制和安全系统(包含多个传感器、执行器和电子控制单元)对同步和性能的要求超过了现有标准控制器局域网(CAN)所能提供的同步和性能。 随着当今先进车辆使用超过5条独立的CAN总线,带宽需求不断增加,汽车工程师要求下一代嵌入式网络。 经过与OEM、工具供应商和最终用户多年的合作,FlexRay标准已成为应对下一代车辆新挑战的车载通信总线。
在复杂的嵌入式设计(如汽车)中采用新的网络标准需要时间。 虽然FlexRay将解决当前高端和未来的主流车载网络挑战,但它不会取代其他两种占主导地位的车载标准CAN和LIN。 为了优化成本和减少过渡挑战,下一代汽车将包含用于高端应用的FlexRay、用于主流动力总成通信的CAN和用于低成本车身电子设备的LIN。
| 总线 | LIN | CAN | FlexRay |
| 速度 | 40 kbit/s | 1 Mbit/s | 10 Mbit/s |
| 成本 | $ | $$ | $$$ |
| 连线 | 1 | 2 | 2或4 |
| 典型应用 | 人体电子设备(镜子、电源座椅、附件) | 动力总成(发动机、变速器、ABS) | 高性能动力总成,安全(线驱动、主动悬架、自适应巡航控制) |
了解FlexRay的工作原理对于汽车设计和生产流程各个方面的工程师都非常重要。 本文将介绍FlexRay的核心概念。
FlexRay的许多方面旨在降低成本,同时在坚固耐用的环境中提供最佳性能。 FlexRay使用非屏蔽双绞线连接节点。 FlexRay支持单通道和双通道配置,分别包含一对或两对连线。 每对连线上的差分信号可减少外部噪声对网络的影响,无需昂贵的屏蔽。 大多数FlexRay节点通常还有电源收发器和微处理器可用的电源和地线。
双通道配置增强了容错和/或带宽。 大多数第一代FlexRay网络仅使用一个通道来降低连线成本,但随着应用程序复杂性和安全性要求的增加,未来的网络将使用这两个通道。
FlexRay总线需要在末端端接,即一对信号线之间的电阻。 只有多站总线上的端节点需要接线端。接线端过多或过少都可能导致FlexRay网络断开。 虽然具体的网络实现方式各不相同,但典型的FlexRay网络的连线阻抗在80欧姆至110欧姆之间,终端节点的端接与阻抗相匹配。将FlexRay节点连接至测试设置时,端接是最常见的问题之一。现代基于PC的FlexRay接口可能包含板载终端电阻,以简化连线。
FlexRay、CAN和LIN与以太网等传统网络的区别在于其拓扑或网络布局。FlexRay支持简单的多站无源连接以及复杂网络的有源星形连接。 根据车辆布局和FlexRay使用水平,选择合适的拓扑有助于设计人员优化给定设计的成本、性能和可靠性。
FlexRay通常用于简单的多点总线拓扑,其特点是单根网线连接多个ECU。 该拓扑结构与CAN和LIN使用的拓扑结构相同,并且OEM也非常熟悉,使其成为第一代FlexRay汽车中常用的拓扑结构。 每个ECU可“分支”至与总线核心“主干”距离较小的位置。网络的末端安装了终端电阻,消除了信号反射的问题。 由于FlexRay以高达10 Mbit/s的高频运行,而CAN为1 Mbit,因此FlexRay设计人员需注意正确端接和布局网络以避免信号完整性问题。 多站模式也适用于共享相似布局的车辆线束,简化了安装并减少了车辆布线。
FlexRay标准支持由连接至中央活动节点的单个链路组成的“星形”配置。 该节点在功能上类似于PC以太网中的集线器。 有源星形配置使FlexRay网络可以运行更长的距离,或分段网络,使网络的一部分发生故障时更加可靠。如恒星的一个分支被截断或短路,其他分支将继续运行。 由于导线长时间运行会传导较大的环境噪声(例如,大型电机的电磁辐射),使用多个支腿可减少一段导线的裸露量并提高抗噪性。
总线和星形拓扑可组合形成混合拓扑。未来的FlexRay网络可能由混合网络组成,以利用总线拓扑的易用性和成本优势,同时将星形网络的性能和可靠性应用于车辆所需的位置。
FlexRay协议是一种独特的时间触发协议,可为在可预测的时间帧(低至微秒)内到达的确定性数据以及处理大量帧的CAN类动态事件驱动数据提供选项。FlexRay以预设的通信周期完成核心静态帧和动态帧的混合,为静态和动态数据提供预定义的空间。该空间由网络设计师通过网络配置。 虽然CAN节点只需知道正确的波特率即可进行通信,但FlexRay网络上的节点必须知道网络的所有部分如何配置才能进行通信。
与任何多点总线一样,每次只有一个节点可以电写入数据至总线。 如两个节点同时写入,总线上将出现争用,数据将损坏。 有多种方案用于防止总线上的争用。例如,CAN使用了一种仲裁机制,当节点看到总线上发送的优先级更高的消息时,节点将让步于其他节点。 该方法虽然灵活且易于扩展,但无法实现非常高的数据速率,且无法保证数据的及时传输。 FlexRay使用时分多址或TDMA机制管理多个节点。 每个FlexRay节点同步至同一时钟,每个节点等待轮到其在总线上写入。 由于TDMA协议中的定时一致,FlexRay能够保证传输至网络上节点的数据的确定性或一致性。这对于依赖于节点间最新数据的系统具有许多优势。
嵌入式网络与基于PC的网络不同,嵌入式网络具有封闭的配置,一旦组装到生产产品中不会发生变化。 这样就无需额外的机制来在运行时自动检测和配置设备,这与PC加入新的有线或无线网络时类似。 通过提前设计网络配置,网络设计师可节省大量成本并提高网络的可靠性。
要使FlexRay等TDMA网络正常运行,必须正确配置所有节点。 FlexRay标准适用于多种不同类型的网络,并允许网络设计师在网络更新速度、确定性数据量和动态数据量等参数之间进行折衷。 每个FlexRay网络可能不同,因此每个节点必须使用正确的网络参数进行编程后才能参与总线。
为便于维护节点间的网络配置,FlexRay委员会在工程过程中对这些参数的存储和传输格式进行了标准化。 Field Bus Exchange Format或FIBEX文件是ASAM定义的标准,允许网络设计人员、原型人员、验证人员和测试人员轻松共享网络参数并快速配置ECU、测试工具、硬件在环仿真系统等,以便轻松访问总线。
FlexRay通信周期是FlexRay中介质访问机制的基本元素。设计网络时,周期的持续时间是固定的,但通常约为1-5 ms。 通信周期有四个主要部分:
图1:通信周期
图2:FlexRay宏刻度的详细信息
FlexRay网络的最小实际时间单位是macrotick。FlexRay控制器主动同步并调整本地时钟,使网络每个节点的宏时钟滴答在相同的时间点发生。宏时钟滴答可针对特定网络进行配置,但通常为1微秒。 由于宏时钟滴答是同步的,依赖它的数据也会同步。
图3. 3个ECU向4个预留插槽传输数据的静态段示意图。
静态部分表示为帧的蓝色部分,表示周期中用于调度多个时间触发帧的空间。 数据段被拆分为多个插槽,每个插槽包含一个预留的数据帧。 当每个插槽都按时发生时,预留ECU有机会将数据传输到该插槽。一旦超时,ECU必须等待下一个周期才能在该插槽中传输数据。 因为确切的时间点在周期中是已知的,所以数据是确定性的,程序知道数据的确切年代。这对于计算依赖于一致间隔数据的控制循环非常有用。 图3显示了由3个ECU使用4个静态插槽的简单网络。实际的FlexRay网络可能包含数十个静态插槽。
图4:缺少ECU #2的静态插槽示意图。
如ECU离线或决定不传输数据,插槽将保持打开,不会被其他ECU使用,如图4所示。
图5:一个ECU广播数据的FlexRay动态插槽示意图。
大多数嵌入式网络包含少量高速消息和大量低速、不太关键的网络。 为适应多种数据,同时又不降低FlexRay周期的静态插槽数量,动态段允许偶尔传输数据。 数据段是固定长度的,因此每个周期可置于动态数据段的数据量有限。为确定数据优先级,微槽被预先分配给每个有资格在动态段中传输的数据帧。 微型插槽通常为macrotick(微秒)长。 高优先级数据在动态帧的起始处接收到一个小槽。
一旦发生微槽,ECU有短暂的机会广播其帧。 如不广播,它将失去在动态帧中的位置,并发生下一个小插槽。 该过程沿小插槽向下移动,直至ECU选择广播数据。 广播数据时,未来的小插槽必须等待ECU完成数据广播。如果动态帧窗口结束,则低优先级小插槽必须等待下一个周期才能再次广播。
图6:动态插槽图显示了ECU 2和ECU 3在微型插槽中广播,没有时间分配给低优先级微型插槽。
图5显示了前7个微型插槽选择不广播后,ECU #1在其微型插槽中广播。 图6显示了使用前两个小插槽的ECU #2和#3,因此ECU #1没有时间广播。 ECU #1必须等待下一个周期广播。
动态段的最终结果类似于CAN使用的仲裁机制。
符号窗口主要用于特殊循环(如冷启动循环)的维护和识别。 大多数高层应用程序不与符号窗口交互。
网络空闲时间是ECU预定义的已知长度。 ECU使用该空闲时间调整上一个周期可能发生的漂移。
FlexRay网络允许单通道或双通道通信,可提供可扩展的容错能力。对于安全关键型应用程序,连接至总线的设备可能使用两个通道传输数据。但是,也可在不需要冗余时仅连接一个通道,或者使用两个通道传输非冗余数据以增加带宽。
在物理层中,FlexRay提供快速错误检测和信号传递,以及通过独立的总线监护器控制错误。总线守护器是物理层的一种机制,用于保护通道不受与集群通信调度不一致的通信干扰。
图7:FlexRay帧的详细信息
静态或动态段的每个插槽均包含一个FlexRay帧。帧分为三段:报头、有效载荷和尾部。
图8:FlexRay帧的位级细分
头信息长度为5字节(40位),包括以下字段:
帧ID定义了传输帧的插槽,用于设置事件触发帧的优先级。有效载荷长度包含帧中传输的字数。头CRC用于检测传输过程中的错误。周期计数包含每次通信周期开始时递增的计数器值。
图9:FlexRay帧的有效载荷。
载荷包含帧传输的实际数据。FlexRay载荷或数据帧的长度可达127个字(254字节),是CAN的30倍以上。
图10:FlexRay帧的尾部。
尾部包含3个8位CRC,用于检测错误。
图11:帧至信号转换
FlexRay数据以字节表示。 大多数应用程序要求数据以带单位、换算和边界的实数十进制值表示。 从FlexRay帧获取一个或多个比特位或字节并应用缩放和偏移量时,可获得用于在ECU之间传递实际参数的信号。 大多数ECU程序使用FlexRay数据作为信号,将信号到原始帧数据的转换留给驱动程序或底层通信协议。
典型的汽车有数百到数千个信号。 由于这些信号的缩放、偏移、定义和位置可能发生变化,FlexRay网络将这些定义存储在定义网络的FIBEX数据库中。这使得编写FlexRay网络程序更为简单,因为设计人员只需在代码中引用信号名称即可。当程序更新至ECU或测试系统时,编译器或驱动程序将提取最新的换算和偏移量信息。
图12:简化FlexRay网络的同步过程
FlexRay具有在没有外部同步时钟信号的情况下同步网络上节点的独特功能。 为此,它使用两种特殊类型的帧:启动帧和同步帧。 要启动FlexRay集群,至少需要2个不同的节点发送启动帧。 启动FlexRay总线的动作称为冷启动,发送启动帧的节点通常称为冷启动节点。 启动帧类似于开始触发,它通知网络上的所有节点开始。
网络启动后,所有节点必须将内部振荡器与网络的宏时钟滴答同步。 可使用另外两个同步节点。 可以是网络上任意两个独立的节点,它们被预先指定在首次打开时广播特殊的同步帧。 网络上的其他节点等待同步帧广播,并测量连续广播之间的时间间隔,以便将其内部时钟校准为FlexRay时间。同步帧在网络的FIBEX配置中指定。
网络同步并联机后,将测量网络空闲时间(程序框图中的空白区域),并用于调整周期之间的时钟,以保持紧密同步。
图13:周期中控制在一个FlexRay周期内读取4个车轮位置并更新车辆控制输出。
FlexRay的高级功能是可进行周期控制。 图13显示了在帧的静态插槽中广播四个车轮位置的范例。由于车轮位置发生在中央控制器#5的最后更新命令之前,控制器有时间在同一通信周期内处理并快速输出。 这允许在FlexRay网络上实现高速控制速率。
FIBEX是一种由ASAM联合体定义的基于XML的标准文件格式,用于描述汽车网络。虽然是FlexRay网络的标准格式,但FIBEX数据库格式与许多不同的汽车协议兼容,因此是一种灵活的标准。FIBEX数据库通常由车辆网络设计师生成,并与从事车辆特定方面工作的工程师共享。通过FIBEX文件和支持它的PC接口或ECU,用户可轻松与车辆网络交互,而无需手动配置接口和信号定义。
FIBEX包含特定网络的许多方面,包括:
关于FIBEX的更多信息,见FIBEX简介。
NI提供高性能PCI和PXI FlexRay接口,可将PC连接至FlexRay网络。 通过基于PC的接口,可在支持FlexRay的ECU上执行许多工程任务,包括:
关于NI FlexRay接口的更多信息,见NI-XNET FlexRay平台介绍。