浅谈灵活的魔鬼鱼FlexRay

汽车安全 2年前 (2021) admin
801 0 0
浅谈灵活的魔鬼鱼FlexRay
前面聊了传统以太网、CAN总线、TDMA和LIN总线,现在牌桌上除了挂名猪脚的车载以太网就剩下FlexRay了。这是个很喜欢的话题,不得不聊。可能有朋友觉得还有MOST?感觉快下牌桌了,是不是就没有这个必要了。
浅谈灵活的魔鬼鱼FlexRay

说到现在的车载通信系统,虽然FlexRay还是牌桌上的玩家,但是好多人也觉得面对以太网的围堵,价格昂贵,配置复杂的FlexRay手上已经没有什么筹码了,不知道这条flexible的Rayfish(魔鬼鱼)还可以食得几年车间烟火。
前面的文章说过,FlexRay是个00后。2000年欧美车届大佬们需要一种更高速,更可靠安全的传输系统,于是FlexRay含着金汤匙,踩在前任的肩膀上出生了。2006年宝马X5作为第一款应用FlexRay的产品出现在市场上。2008年,宝马七系全面应用FlexRay。2009年在某选修课上昏昏欲睡的我听说了高大上的FlexRay。
1. FlexRay是什么?
那么到底什么是FlexRay?往简单了说,就是CAN总线加LIN总线混合起来排个课程表、提个速再加个冗余。像LIN一样基于TDMA(时分多址,看上一篇),提高了协议的复杂度,拥有静态部分和动态部分。动态部分类似于CAN总线,是基于事件和优先级发送。这样随着协议的复杂化,通过灵活的配置,可以设计出更安全可靠,而且实时性好的车载通信系统,以满足新的技术要求。
浅谈灵活的魔鬼鱼FlexRay

功能强大了,配置也更灵活了,但成本也上去了。不光是硬件成本,配置FlexRay相比它的兄弟姐妹总线,要复杂的多,这就需要更多人力和时间。一个技术,它的成本门槛高了,就会阻碍这个技术的大规模输出、推广,没有得到大规模的应用,相对的芯片成本就难以进一步下降,有点马太效应的味道,这也是上图预测FlexRay走不出2020年代的原因之一。但是是否呼声渐起的以太网10BaseT1s真的能取代这些传统的车载总线,我保持谨慎的乐观,同时还有一些疑问,挖个坑后面聊10BaseT1s的时候再聊。

2. 为什么需要FlexRay

看到FlexRay这个词的时候,一般会看到X by wire。X不是缩写,而是像方程里的变量,就是通过线控实现X功能。X可以等于Drive,Steer或者Brake。驱动、转向和制动这些功能在用线控实现之前是通过机械或者液压系统实现的。如果你的车要加刹车液,制动系统就不是通过线控来实现的。机械传动和液压系统的不好处是,重量很重,而且刹车液有毒性不环保。通过FlexRay换成线控系统,不但重量轻了无毒环保,而且维护简单,检测高效。

这几个系统有个共同的要求,就是实时性要很高,而且必须安全可靠。我踩下刹车,或者转动方向盘,必须在固定的时隙内产生刹车或转向效果。这样的要求,基于Event Triggered的CAN总线很难保证,因为其依靠信息优先级避免冲突,就可能导致总线被更高优先级的信息长时间霸占而导致当前信息的延迟或者发送失败,信息的发送时间是不可确定的。而Flex Ray兼顾Time Triggered和Event Triggered的长处,固定发送周期,在所有ECU全局时基同步和TDMA的基础上保证了统一的通信低延迟。这就保证了在X功能需要通讯时,总能在毫秒级甚至微秒级的时间内得到相应的功能实施。

3. FlexRay如何实现功能
浅谈灵活的魔鬼鱼FlexRay

FlexRay拥有双通道通信的冗余设计。每个通道带宽10Mbps,可以灵活的设置为同一时间点两通道互为备份冗余;也可以选择双通道发送不同的信息达到20Mbps的带宽。这样FlexRay契合了安全和时间紧要的更高阶的应用场景,在动力总成和车身控制也可以应用。在这些场景中CAN总线和LIN总线都不能胜任。关于FlexRay的总线规模和节点容量,看到有说24米有说22米的,没必要细抠,一般达不到这个长度。总线结构下可以容纳22个节点的,星型拓扑结构或者混合结构下,可以容纳64个节点。是的,FlexRay可以配置成不同的拓扑结构。双通道的结构也是可选的,也可以配置单通道的FlexRay总线,处处透着灵活flexible,不管是软件还是硬件,电子还是机械,灵活的功能背后往往都背负着结构复杂二字。

浅谈灵活的魔鬼鱼FlexRay

聊TDMA的时候说过时分多址,其实就是把时间切蛋糕。FlexRay一样,把时间蛋糕先按照固定时长的Cycle切开,最长的Cycle也不能超过16毫秒,Cycle标识是6位的,也就是说可以切64份然后循环。到手的Cycle蛋糕块,继续切开三份,静态部分,动态部分和NIT。静态是必须有的,而动态部分则是optional可有可无的,可以通过配置选择。
浅谈灵活的魔鬼鱼FlexRay
静态和动态部分可以继续切分才会得到更小的时间蛋糕slot,里面就是FlexRay的数据帧了。FlexRay由5Bytes的帧头,0到254Bytes的Payload和3Bytes的尾部组成。和CAN总线类似,也是基于帧ID来标识。
浅谈灵活的魔鬼鱼FlexRay
静态数据块被分成一系列的Slots分发给不同的节点,同一节点可以被分配多个Slots。但是同一个Slot只能被分配给一个节点。当时间轴上相应的时刻到达,如果节点准备好了相应的数据帧,则发送数据帧,如果没有则发送空帧,或者重复。静态部分是固定分配的,就像白天上课的课程表,这就保证了被分配到时间资源的节点总能有机会发送数据。而Dynamic部分则是动态的,有点像晚自习,而且是课时不固定的晚自习,学生可以半自由地搭配。
浅谈灵活的魔鬼鱼FlexRay
动态部分就是FlexRay中前面提到的Event Triggered部分。动态部分通常是用来传输诊断信息。每个节点根据配置的Frame ID发送信息。动态部分发送机制挺有意思,是基于一个Minislots的概念,当没有信息发送的时候,各个节点数着时间块Minislots累加自己的index。待发信息ID与slot一一对应,如果匹配的话,对应节点就有权发送信息。有信息发送时,所有节点的index冻结,发送完毕后,大家共同继续累加index。通过这种方式避免了冲突,但是动态部分的时间长度有限,所以如果排在前面的信息比较多,后面的信息可能就分不到发送时间的slot,就只能放弃发送。这点有点像CAN总线,但是机制又不完全一样,CAN总线是比较ID大小定优先级,FlexRay的动态部分是先给ID小的信息发送机会,按顺序发。EB的《FlexRay:A first glance》里有一段很好的演示动画,可以去看看。FlexRay的两个通道的Minislot是对齐的,而在信息发送时,是相互独立,互不干扰而不对齐的。超过了最后的机会时间点latest dynamic transmission start之后,就不再允许任何节点发送新的帧了。
浅谈灵活的魔鬼鱼FlexRay
在NIT(Network Idle Time)部分,FlexRay的节点同步机制通过计算修正值进行时钟同步。FlexRay并不像AVB一样设置Clock Master,因此安全性也比较高,有节点出现故障也不会影响其他节点的同步。
1. 问题?未来?
FlexRay灵活强大的功能需要每个节点都对整个发送机制,信息结构同时了解。这使得开发来自不同供应商的节点成为挑战。一旦一个信息发生了改变,就需要对所有节点重新编程。所以FlexRay的开发需要更高的成本,更强大的团队和更多的开发时间。这一点到底是白璧微瑕,还是会成为FlexRay技术的致命缺陷?还是要看不同项目的需求。但无疑的是,如果能有一种既能实现FlexRay面对的需求,又能降低复杂度和成本的技术,那么FlexRay恐怕要重蹈MOST的覆辙了。FlexRay先聊到这,后面终于可以讲以太网了。


阅读原文,关注作者知乎

浅谈灵活的魔鬼鱼FlexRay


END

原文始发于微信公众号(汽车电子与软件):浅谈灵活的魔鬼鱼FlexRay

版权声明:admin 发表于 2021年12月14日 下午1:50。
转载请注明:浅谈灵活的魔鬼鱼FlexRay | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...