必记术语:
- TSS:传输起始序列(transmission start sequence,TSS)
- FSS:帧起始序列(frame start sequence,FSS)
- BSS:字节起始序列(byte start sequence,BSS)
- MAC:物理传输进程(Media Access Control Process,MAC)
- FES:帧结束序列(frame end sequence,FES)
- DTS:动态尾部序列(Dynamic trailing sequence,DTS)
- WUP:唤醒电平(Wakeup Pattern,WUP)
- 启动帧:负责启动网络通信的帧,等同于NM报文
- 同步帧:负责在NIT段进行全局同步修正的报文,只有冷启动节点才具备冷启动帧
- 主导冷启动节点:可以主动进行同步并且发送唤醒信号的节点
- 随动冷启动节点:可以主动进行同步并且发送唤醒信号的节点,但是必须位于主导冷启动节点之后发送唤醒信号
- 非冷启动节点:只能被动唤醒的节点
- PNC状态机:管理功能组件的核心机制
- POC状态机:管理节点协议状态的核心机制
- NM状态机:管理全局网络节点休眠唤醒的核心机制,目的在于节省整车功耗
- Power状态机:管理节点自身控制器启动关闭的核心机制
- RMS状态:报文重发状态,会连续不断的发送nm报文控制
- NOS状态:发送被请求的功能报文与自身的nm报文
- 冷启动监听:监听总线上是否有符合自身的唤醒信号
- 集成冷启动监听:监听总线上是否有任意的唤醒信号
一、前言
去年由于工作原因停更了某C**N上Flexray的讲解,近期很多小伙伴私信询问停更Flexray技术文章的原因。。。呐~本次介绍将从Flexray的物理层、链路层、网络管理做一个较为全面的基础讲解,并对诊断部分做一些小的介绍,期间应该也会穿插一些各类协议的对比与个人见解。也建议大家可以先去看看其他博主或者维克多关于Flexray的简要讲解再来阅读本篇文章丰富理解。此次更新持续时间会很久。
FlexRay是一种用于汽车网络通信的高速、实时、分布式总线系统,由富士通、宝马、戴姆勒-克莱斯勒、福特、大众等知名企业共同研发而成。它在汽车电子领域中主要应用于安全系统、驾驶员辅助系统、传输系统和智能化座舱等方面。FlexRay采用了双线冗余方式进行数据传输,每条线都有自己的发送器和接收器,同时还提供了极低的时延和灵活的带宽分配机制。此外,FlexRay协议中还支持多种数据类型和丰富的拓扑结构,既可以作为总线系统使用,也可以作为星形或树形网络结构使用。
当下国内来说,FlexRay协议只有吉利、集度汽车两家在用,另外工业领域、军事也有一席之地。针对汽车领域,FlexRay本身就是一种采用TDMA机制的关键实时系统,因此总线多用于底盘线控系统,用于安全相关数据的传输与保障性传输,比如车速、车辆模式、E2E机制的相关功能模块信号等。拿数年前某OEM的系统拓扑图就可以了解到:
总的来说,FlexRay协议具备以下特点:
- 高带宽:单通道最高10Mbit/s,双通道冗余最高20Mbit/s。
- 时间确定性:建立于通信循环的周期性访问与传输。
- 分布式同步:自动建立同步时基访问,精度1us。
- 冗错传输:专用容错,包括单双通道冗余、安全可靠。
- 灵活性:结构多样、支持时间触发与事件触发。
- 成本昂贵:设计及验证周期长、硬件成本高昂。
二、物理层
就物理层而言,FlexRay与CAN并无二异,都是基于双绞线进行传输。由于FlexRay的高速率,可能在实际应用时我们需要采购带屏蔽层的双绞线进行物理链路的搭建。接下来我们仔细说说FlexRay的物理层特性。Flexray下文统一简称FR。
2.1 总线拓扑及电阻
FR的总线拓扑与CAN协议的总线拓扑基本上保持一致,都是基于总线型环境进行传输,终端电阻(100Ω)也是同样布置在总线两端来抵抗反射波效应。
这张拓扑图中,圆点Star为一个星状连接器(网关),电阻T与R分别布置于两端。从17485定义可以看出这种拓扑的结构可以是多变的,但是拓扑改变后每个ECU和网关的交互关系也需要重新制定以满足车辆功能:车辆的正常通信与PNC网络管理。Flexray实际上有两条路,虽然大家从图上看节点与节点之间只有一条物理通道,但其实是两对双绞线,一对用来正常通信,一对用来容错机制(备用通道)。此外,Star节点在车载网络中一般都是网关,除此之外也可能什么都没有,就是单纯将几根线接到一起(类似于集线器)。
目前车载网络中的Flexray的两条通道被修改为TX与RX,也就是说两条通道一个作为FR报文出口,一个作为FR入口。
2.2 总线电平与总线速率
Flexray与CAN一样都是采用差分信号传输,其中BP可以理解为CANH,BM对应CANL。具体的电平为:
- Bit1:BP-BM=2V,BP=3.5V,BM=1.5V
- Bit0:BM-BP=2V,BM=3.5V,BP=1.5V
Flexray的电平一共有四种,分别归类为不为0V的显性电平与为0V的隐性电平:
- 低功耗电平:属于隐性电平,此时BM=BP=0V
- 空闲电平:属于隐性电平,此时BM=BP=2.5V
- Data1:属于显性电平,表示Bit1
- Data0:属于显性电平,表示Bit0
基于差分传输,Flexray的信号速率在0-10Mbits,当我们配置为10M传输时,标准的眼图应为:
2.3 控制器与帧编码(可忽略)
2.3.1 控制器构成
这是本白当初学习协议时,自己理解的一点东西,因为网络博客/论文没有这部分介绍。错误之处还请指出:
Flexray的控制器内部由一个CC通信控制器、一个host主机、一个PS电源单元和一个Bus drive总线驱动器组成。而上图中空白的部分也就是一个可选的总线监控器,一般没有。各部分的功能如下:
- 通信控制器:错误检测、数据传输、状态检测
- 总线驱动器:收发转换逻辑/物理电平
- 总线监控器:监控时序与时钟同步
- 主机控制器:POC、PNC、Vote-NM
2.3.2 帧编码
帧编码在FR中一共有两种,分别是动态帧编码和静态帧编码,这两者编码方式基本一样。
帧编码过程:
- 由编码器自上而下将帧分解为字节
- 帧进程进行位流传输的开始时刻发送TSS用于初始化传输节点与总线的对接
- 在TSS的末尾加入FSS来进行结束提示,并补充NRZ可能导致的时间误差
- 发送BSS为接收设备提供定时信息,每一字节的传输都需要BSS
- BSS完毕后发送FES结束传输,并在IDE空闲时间做全局时间的同步修正,为下一次帧传输做准备
- 不同的是传输静态帧时无需附加DTS用于指示发送的确切时间点
编码的对象:
- CAS冲突避免编码
- MTS媒体接入测试编码
- 静态帧与动态帧
- ❌ WUP唤醒信号不进行编码
三、链路层基础
3.1 通信循环
Flexray的通讯循环与LIN类似,但是在同一个循环内Flexray提供了两种媒体访问方案。静态时分多址(TDMA)与动态时分多址(FTDMA),体现为传输在静态时隙的静态帧与动态时隙的动态帧。
一个常见的通信循环由静态段、动态段、符号窗(可选)、网络空闲时间四部分组成。主要的静态段又由静态时隙构成,动态段由动态时隙构成,其主要特点如下:
静态时隙:
- 一个静态时隙承载一个应用报文
- 一个cycle中一个应用报文只能出现一次
- 一个cycle中静态时隙最多有397个(10M),最少有4个(2.5M)
- 同步阶段一般在前12个时隙
- NetworkStatus必须置放于静态时隙中用于管理调度表切换
动态时隙(微时隙):
- 一个动态时隙承载一个诊断报文
- 一个cycle中一个诊断报文只能出现一次
- 一个cycle中微时隙最多有7986个(10M),最少有3977个(2.5M)
网络空闲时间(微时隙):
- 基于帧编码得到速率偏差与相位偏差,一次cycle后做同步修正
动态循环与静态循环的区别:静态循环一般放置基础通信的帧与信号,比如网络管理向量、同步启动帧、网络管理报文、状态信号、控制信号,因此静态循环的报文是最多的。动态循环主机厂常用于诊断刷写,因此常常布置冷启动节点(网关)的诊断PDU,并且一般都是将默认及编程会话报文存放于时隙数小的时隙,刷写会连续存放到时隙数大的时隙。由于刷写的要求,动态循环的时间定时参数与静态循环不一致,两种循环的切换主要由网络管理向量决定。常见的网络管理向量为0x0001(静态调度)、0x1000(动态调度),为了确保调度的优先级,网络管理向量分布在时隙1的byte0和byte1:
由于工作原因,时间参数就不能放上来了,总之静态时隙的时间参数于动态时隙的时间参数主要区别在于时隙数的不同,有兴趣的可以详看Vector工具中Fibex数据库的开发使用。
3.2 TDMA与FTDMA
TDMA(Time division multiple access)称为时分多路访问,FTDMA(Flexible Time division multiple access)为灵活/动态时分多路访问,这是两种不同的时间分配方法。
3.2.1 TDMA时分多路访问
如上图,TDMA时分多路访问将时间划分为固定长度的时间片(时隙slot),参照上图,将某段时间划分为slot1,slot2 .....其中一个slot用来固定传输某个指定报文。从设计角度来说,我们将这段时间称之为一个Cycle。随着Cycle的循环slot也将循环,因此位于slot的报文也将呈现周期性传输。静态时隙放置的都是周期报文。理论上所有的静态时隙都可以随意放置报文,但是由于功能的不同和实时性的要求,设计时一般将同一ECU的报文固定放在不同Cycle的同一个Slot,又或者将重要的报文比如我们前面提到的冷启动帧、网络管理报文放置在slot序号小的时间片中。除此之外,因为Flexray为安全总线,通常用来传输发动机车速、车辆模式、Secoc、E2E等关键信号和报文,所以报文也不会很多。如果您搜索到这篇文章,相信后面也会有机会接触吉利系的网络架构设计,到时候可以再仔细看看里面信号的设置,挺有门道的。
3.2.1 FTDMA动态时分多路访问
动态时分多路本质也是将一个某个时间段划分为不同的时间片(动态时隙/微时隙),但是微时隙的长度是可以调整的,因此整个动态段的长度是灵活可变的。举个例子来说,10服务和36刷写传输服务的报文长度不同,因此整个时间片长度和占用的动态时隙长度也不同。Flexray如何调整动态时隙的长度呢,我们举个策略,那就是静态段后紧跟动态段,这个动态段首先会持续一个微时隙,如果这个时间段内没有报文传输,动态段自动结束然后进入下一次cycle。实际来说ecu在正常情况下都是静态传输,需要10 01默认会话与10 02诊断会话时会产生动态时隙;只有需要扩展会话时才会使用网络管理向量切换调度表进行动态传输。当进入动态调度时,共同静态段仍然存在以保持时间同步(一般只有网络管理向量报文存在),诊断报文根据诊断行为进行传输。
3.2.3 静态APP调度表与动态BOOT调度表
- 静态调度表组成:共同静态段+应用报文静态段+动态段
- 动态调度表组成:共同静态段+动态段
- 同一个报文在一个调度表中只允许出现一次,不可复用
- 调度表的组成是灵活多样的
静态调度表中的动态段一般放置常规的诊断PDU,因为这些PDU用于简单的诊断命令,并不会导致关键报文的传输实时性收到影响,也能保证基础的诊断需求。
动态调度表完全就是完全体诊断,既支持基本的诊断命令比如10 01、22等,也支持36/37/35等,当然主要还是用来主机厂用来刷写。
再提一嘴,静态调度和动态调度使用网络管理向量切换。之所以设计两张调度表就是为了节约时间资源,我们总不可能在车辆正常运行时还要给刷写报文预留时间吧。关于静态调度/动态调度/静态时隙/动态时隙的区分和使用还有疑问的小伙伴可以评论区@我,因为这部分只有实际基础i项目才能更好的理解,我也会尽可能在评论区用我的微薄经验去回答大家。
3.3 帧格式
Flexray报文包含三:帧头,有效负载,帧尾
3.3.1帧头
- 前导指示符(5位)
保留位:0
负载场前导指示符:静态段报文中1代表包含网络管理向量;动态段报文中1代表包含帧ID.
空帧指示符:该帧数据场长度是否为0
同步帧指示符:该帧是否负责同步
启动帧指示符:该帧是否负责启动,即是否包含网络管理 向量
- 标识符(11位)
一次Cycle中同一帧ID只能出现一次
最大帧ID为2047(时隙序号) - 有效负载长度(7位)
十进制转换后的数字,最大127字(254字节) - CRC校验段(11位)
- Cycle计数器(6位)
一般最大有64循环
3.3.2有效负载
装载通信数据/信号
3.3.3帧尾
3.4 唤醒与同步
3.4.1 同步
FR基于时间同步设计,唤醒与同步是整个网络通信建立的前提,顺序为:唤醒冷启动节点-->主导冷启动节点发起同步-->随动冷启动节点参与同步-->同步建立,其余节点加入通讯行为。具体过程见下图:
这张图的流程简化介绍如下:
- 冷启动节点A、冷启动节点B、其余节点C同时上电,各自准备自己的POC协议状态机进入Ready状态,开始准备后续的网络唤醒与启动过程。
- 节点A、B进入冷启动监听阶段,先发CAS的转变为主导冷启动节点,随后主导冷启动节点A连发4个Cycle的同步帧,为了更好理解,我们自称之为主动唤醒阶段。
- 在主动唤醒阶段,节点B监听到了A的CAS,节点B转换为随动冷启动节点,重新初始化自己的时间调度,然后监听四次总线上的A同步帧。节点C同样监听到了A的CAS,随后初始化时间调度,后续进入集成冷启动监听,监听是否总线存在两个节点同时通信,意味着节点A、B已经完成了同步。这个阶段自称为监听阶段。
- 监听阶段中,节点A已经发送了4次同步帧,进入冷启动监听阶段,随后监听总线上是否存在节点B是否发送了同步帧准备参与通信。监听到后,总线完成同步,正常启动。随后C也加入通信。
上述过程中我们没有提到WUP,这是因为WUP先于启动,是先唤醒后启动,一般来说负责主动唤醒的节点会变成主导冷启动节点。
3.4.2 唤醒
WUP类似于LIN的唤醒信号,都是一连串的电平。连发数次形成有效的唤醒信号,一般来说WuCounter = 4以上。(20230824更)
3.5 CAS与MTS
3.5 POC状态机
四、网络管理
这部分可以去看看当初我在公众号发表的文章。FlexRay网络管理与测试_flexray测试_怿星科技的博客-CSDN博客
五、诊断
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/17224337.html