随着汽车的功能越来越多,用于实现这些功能的传感器、ECU的数量也在持续上升,现在一辆车的ECU高达几百个。为了提高数据传输效率、控制系统的复杂性,总线网络应运而生。目前广泛应用的车载总线技术主要有CAN、FlexRay、LIN和MOST这4种总线协议,未来车载总线将往以太网方向演进。
提到汽车攻击,就不得不提CAN总线。CAN总线是汽车内部网络中广泛使用的通信总线,由两条电线(CAN_Low和CAN_High)组成,如图3-2所示。通过CAN总线,ECU之间可以可靠地传输信息,形成一个允许ECU通信的网络,称为CAN(控制器局域网)。CAN总线是一种串行通信总线,旨在保障工业和汽车应用系统的稳定性。如果将汽车类比为人体,那么CAN总线就相当于人体的神经系统,用于传递控制信号,车内ECU通过CAN总线相互通信,就像人体的各个部位通过神经系统来相互协作一样。
图3-2 CAN总线示意图
CAN是在20世纪80年代出现的,我们通过“History of CAN Technology”这篇文章来了解一下CAN总线协议的发展历史,如图3-3所示。
图3-3 CAN总线协议的发展历史
大多数CAN接口设备都带有一个9针D-sub插头(带针脚的公头9针D-sub连接器),图3-4所示是带有9针D-sub插头的CAN接口设备。
9针D-sub CAN总线接口由CANopen在CiA 303-1规范中定义,如表3-1所示。
图3-4 CAN接口设备
表3-1 9针D-sub CAN接口定义
这里介绍另一个CAN接口设备,叫作PCAN-USB FD。此CAN转USB设备由德国PEAK-System公司提供,支持标准CAN、扩展CAN和CAN FD,使用如图3-5所示的DB9插头。
因此,对于遵循CANopen规范的设备,CAN总线是一段带有DB9插座的单双绞线电缆。
怎么知道车是否有CAN总线?CAN总线存在于几乎所有车辆中,这里可以通过OBD端口访问CAN总线,如图3-6所示。
图3-5 DB9 CAN接口设备
图3-6 OBD端口示意图
OBD引脚的定义如表3-2所示。
表3-2 OBD引脚定义
(续)
CAN总线的主要优点之一是减少了布线量,并巧妙地防止了消息冲突,换句话说,在消息传输过程中不会丢失任何数据。图3-7和图3-8说明了使用CAN总线和不使用CAN总线的区别。
图3-7 使用CAN总线
图3-8 不使用CAN总线
显然,有了CAN总线,节点之间的通信和传输就容易多了;如果没有CAN总线,节点之间就很难相互通信,通信效率低下,而且需要更多的线束。图3-9为整个CAN节点的数据处理流程。
图3-9 CAN节点的数据处理流程
下面从原理、网络拓扑结构、帧结构、CAN FD四个方面详细介绍CAN总线。
1.CAN的原理
CAN总线是广播类型的总线,这意味着所有节点都可以侦听到所有传输,无法向一个特定的节点发送报文,所有节点都将始终接收所有通信。但是,CAN硬件能够提供本地过滤能力,使每个节点可以只对感兴趣的报文做出响应。当有多个节点都要发送数据时就会存在冲突,CAN总线必须决定哪个节点可以发送,而其他的节点必须等待。仲裁是CAN协议最重要的一个特性。总线上的每一个CAN节点都会有一个唯一的ID,ID的大小决定了器件的优先级,ID越小,优先级越高。如果几个节点同时发送数据,ID小的优先发送。
其实这种仲裁方式借助的是一种叫作显性覆盖隐性的机制。CAN总线的差分电平分为显性电平和隐性电平,显性电平的逻辑为0,隐性电平的逻辑为1。在同一个位时间,一个节点发送显性电平,另一个节点发送隐性电平,则总线电平为显性电平。这是CAN总线仲裁的基础,也是CAN总线显性电平可以覆盖隐性电平的原因。
(1)显性覆盖隐性
显性覆盖隐性的机制是由CAN的收发器实现的,图3-10为逻辑图。由于所有的开关都为并联,即使其他开关都开着(隐性),只有一个开关闭合(显性),线路都会输出低电平,即显性。这种现象也称为“线与”,即1&0=0,也就是说,在多个节点发送报文时,隐性电平会被显性电平覆盖,此时不管谁是1谁是0,显性(0)&隐性(1)=显性(0)。
图3-10 CAN总线逻辑图之显隐原理
(2)节点同步
CAN总线是没有时钟信号的,但是它需要所有节点可以进行同步接收,这就需要同步机制。CAN总线会要求所有节点以相同的波特率运行,但噪声、相移、振荡器容差和振荡器漂移的影响,导致实际的波特率并不是设定好的标准波特率。
CAN的同步分为两种:一种是硬同步,即在每次收到起始帧信号时就开始同步;另一种是重同步,即在每一个隐性转换为显性时都会发生。对于具体同步的原理,这里不多介绍,它并不会过多影响对于安全的研究。
(3)仲裁机制
有了上面的显性覆盖隐性及节点同步的机制,仲裁规则就可以实现了。需要明确的是,仲裁只发生在有多个节点同时要发送数据时。一般情况下,总线上只有一个节点在发送数据,其他节点会等待空闲时再发送。判断空闲的方式是检查是否有连续11个隐性位。
CAN总线使用无损逐位仲裁方式,每个节点在发送数据的同时也会接收数据,并根据显性覆盖隐性原则判断仲裁结果。如果当前节点发送的是隐性位(1),但接收到的是显性位(0),则说明其他节点有发送显性位的,当前节点仲裁失败,需要等待总线空闲时再发送。仲裁成功的节点会继续发送数据,直到只剩下一个节点。节点的唯一标识符ID包含在CAN信号的头部,仲裁阶段会根据节点ID进行,只要每个节点的ID不同,仲裁结果就会由ID最小的节点获得,从而保证数据的发送顺序和正确性。在多个节点需要发送数据时,只有ID最小的节点可以优先发送,其他节点需要等待ID最小的节点发送完成后再发送。
在图3-11所示的例子中,有A、B、C三个节点。当A发送数据时,其他节点只能处于监听模式,B和C虽然有发送数据的需求,但只能等待A发送结束后再进行。在A发送结束后,轮到B和C发送数据,但由于B的ID更小,所以B优先发送,等B发送完成后,C才可以发送。
图3-11 CAN报文优先级
以图3-12为例来说明CAN总线仲裁过程。总线上有A、B、C三个节点,它们发送数据。当发送到ID的第5位时,A、C为显性,B为隐性,B检测到总线的状态与自己的状态不一致,于是进入监听状态,退出总线竞争,A、C继续发送数据。这也说明B的ID比A和C大。当发送到ID的第3位时,A为显性,C为隐性,C进入监听状态,退出竞争,A继续发送数据,于是ID最小的A发送成功,C只能等待A发送完成之后再进行发送。然后C会发送成功,B等待。最后才是B发送。从上面的裁决过程可以看出,对于A来说,它的数据发送没有因为冲突而产生延迟。
图3-12 CAN总线仲裁过程
(4)位填充规则
CAN总线属于异步串行通信,这种通信方式没有时钟线,所以各个收发器的时钟不可能完全一致。时钟不一致就会造成偏差,为了解决这个问题,CAN总线采用同步的方式来校准时钟,只要信号发生变化,节点时钟就被同步一次。CAN总线还规定同步的最大周期为5位,但这里有一个问题,要是出现连续性的5位甚至更长时间没有边沿跳变,那该如何解决呢?CAN总线对这种情况又进行了规范,如果传输的位信号连续5位是相同的,就要插入一个电平相反的位,这就是CAN总线的位填充规则。如图3-13所示,11111000011110000帧在位填充之后变成111110000011111000001。
图3-13 位填充规则
2.CAN网络拓扑结构
网络拓扑结构指的是网络节点与节点之间相互连接而形成的特定结构关系。不同的通信网络需要选择不同的网络拓扑结构。整个网络的特性取决于该网络选择的拓扑结构,因此对于网络来说,拓扑结构显得尤为重要。
在汽车网络中,我们可以将车上的每一个ECU看成网络上的一个节点,根据ECU与ECU之间形成的特定结构关系来选择合适的汽车网络拓扑结构。汽车系统的成本、性能、稳定性都与所选择的汽车网络拓扑结构相关。
如图3-14所示,CAN网络拓扑分为5种类型:星形拓扑、网络拓扑、环形拓扑、树形拓扑和总线型拓扑。这些类型可以组合成混合拓扑。汽车总线网络特性可以概括为通信距离短、网络复杂度要求低、可扩展性要求高、实施可靠性要求高。
图3-14 CAN网络拓扑
3.CAN帧结构
CAN具有5种类型的帧——数据帧、远程帧、错误帧、过载帧和帧间隔,其中错误帧和过载帧属于容错处理帧,如表3-3所示。
表3-3 CAN总线的帧类型
下面分别介绍不同类型的帧的结构。
(1)数据帧
数据帧是最常见的报文类型,其帧结构包含7段,其中头部段包含帧起始、仲裁段、控制段。而头部段除了标准格式外,还有一种变种,称为扩展帧,它将仲裁段的长度扩大了,如图3-15所示。
图3-15 CAN数据帧结构
1)帧起始:1位,代表一个帧的开始,是一个显性位(0)。
2)仲裁段:总共12位,前11位是帧ID,后1位是远程发送请求(Remote Transmission Request,RTR),标志了本帧数据的优先级,其中有一个ID码。仲裁段中的ID码越小,帧数据的优先级就越高,仲裁就会在此阶段进行。如果同时出现多个仲裁段相同的报文,则会出现错误,因为后续数据段中会出现显性和隐性不一致的情况。CAN控制器会判断发出的数据和接收的数据是否一致。
3)控制段:由6位组成。控制段的第一位为IDE(IDentifier Extension,标识扩展)位,该位应是显性状态,用来指定标准帧。IDE位的下一位为零保留位(r0),CAN协议将其定义为显性位。控制段的其余4位为数据长度码(Data Length Code,DLC),代表发送数据的长度。CAN协议规定数据长度不能超过8字节,因此DLC字段的取值范围是0~8。尽管DLC最大可以设置为15字节,但是如果数据长度超过8字节,控制器会忽略超出部分的数据,只发送前8字节的数据。因此,要确保每个CAN帧的数据长度不超过8字节,否则可能会导致数据丢失或错误。
4)扩展帧:帧ID分为两段,一共29位,可以容纳更多的ID。首先是SRR(Substitute Remote Request,替代远程请求)位,它在扩展帧(数据帧或遥控帧)中恒为隐性位1。扩展帧的隐性SRR位正好对应标准帧的显性RTR位,这就保证了在前11位ID相同的情况下,标准数据帧的优先级高于扩展数据帧。其次是IDE位,它在扩展帧中恒为隐性位1。而在标准帧中,IDE位位于控制段,且恒为显性0。扩展帧IDE位和标准帧IDE位位置对应,这就保证了在前11位ID相同的情况下,标准遥控帧的优先级一定高于扩展遥控帧。其他部分和标准帧格式类似。
5)数据段:本帧数据所需要传达的信息,一帧信号可以传送0~8位数据,每字节8位。
6)CRC段:主要用来校验完整性。为防止信号由于某种原因被更改,CAN的数据链路层上加入了CRC校验。发送节点会根据发送内容计算得到一个CRC值,填入CRC段进行发送;而相应的接收节点会对接收到的数据进行计算,并将计算出的CRC值和接收到的进行比对:这样的机制保证了CAN不会收到错误的信息。
7)ACK段:用于表明信号是否被正确接收;如果接收正常的节点,在ACK的第一位会发出一个显性位。根据ACK的状态,发送节点就可以了解到数据是否被传输成功;若发送失败,发送节点会根据自身状态来决定是否重传。
8)帧结束:由7个隐性位组成,表示该帧结束。
(2)远程帧
远程帧与数据帧十分相似,但是有两个重要的区别:
❑它被显式标记为远程帧(仲裁段中的RT R位为隐性);
❑没有数据段。
数据帧是由某个功能的源(source)发起、发送给目标(dst)的,而远程帧是主动由目标(dst)发起、向源(source)请求数据的。远程帧的结构和数据帧类似,但是远程帧没有数据段,只有一个头,并且由于RTR位为1,其优先级会低于数据帧。远程帧的预期目的是远程传输相应的数据帧。远程帧有一个注意事项:DLC必须设置成预期响应报文的长度,否则仲裁将不起作用。
(3)错误帧
简单地说,错误帧是一种特殊报文,它在一个节点检测到故障时被传送,并将导致所有其他节点也检测到故障,这些节点也将发送错误帧,然后传送节点将自动尝试重传报文。
错误帧由错误标志(Error Flag)和错误界定符(Error Delimiter)组成。错误帧共有位错误、填充错误、CRC错误、格式错误、ACK错误这5种类型,多种错误可能同时发生。
首先是错误标志。接收节点发现总线上的报文有错误时,将自动发出活动错误标志,这是6个连续的显性位。其他节点在检测到活动错误标志后,发送错误认可标志,由6个连续的隐性位组成。由于各个接收节点发现错误的时间可能不同,所以总线上实际的错误标志可能由6~12个显性位组成。
错误标志分为主动错误标志和被动错误标志。主动错误标志由6个显性位组成,它违反了位填充规则,可以解释为一个节点在发现错误后,一直发送错误帧,干扰其他节点,让其他节点都知道发生了错误。被动错误由6个隐性位组成,由处于被动错误状态的节点发出。
其次是错误界定符。错误界定符由8个隐性位构成。在错误标志发生后,每一个CAN节点监视总线,直至检测到一个显性电平的跳变,这表示所有的节点已经完成了错误标志的发送,并开始发送8个隐性电平的界定符。
(4)过载帧
这里,我们仅仅出于知识完整性目的而提及过载帧。在格式方面,过载帧与错误帧非常相似,但是过载帧并不常用,因为当今的CAN控制器会非常智能化地避免使用过载帧。事实上,会生成过载帧的唯一一种控制器是现在已经过时的Intel 82526 CAN控制器。
过载帧分为两部分:过载标志(Overload Flag)和过载定界符(Overload Delimiter)。对于过载帧的帧结构我们可以这样理解:当接收节点达到接收极限时,就会将过载帧发到总线上。显然,过载标志的6个连续显性位会屏蔽掉总线上其他节点的发送,也就是说,这个时候的接收节点通过发送过载帧的方式来破坏其他节点的发送。这样,在接收节点发送过载帧期间,其他节点就不能成功发送报文了。这就相当于把其他节点的发送推迟了,接收节点在其发送过载帧的这段时间得以“休息”。
通常有3种情况会引起过载帧。
1)接收节点自身原因。接收节点由于某种原因需要延迟接收下一个数据帧或者遥控帧。
2)在帧间隔的间歇段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)。帧间隔的间隔段本应是3个连续的隐性位,如果接收节点在间隔段检测到显性位,那么就意味着此时有报文发向接收节点;但这个时候是不应该有报文发来的,于是接收节点发送过载帧。
3)CAN节点在错误界定符或过载界定符的第八位(最后一位)接收到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加。接收节点在错误界定符和过载界定符的最后一位听到显性位,这也意味着有报文发向接收节点;但这个时候是不应该有报文发来的,于是接收节点发送过载帧。
(5)帧间隔
帧间隔又称为间断,至少由3个隐性位构成,用于将数据帧或远程帧和它们之前的帧分隔开(但过载帧和错误帧前面不会插入帧间隔)。也就是说,数据帧(或者远程帧)通过插入帧间隔可以将本帧与先行帧(数据帧、远程帧、错误帧、过载帧)分隔开。帧间隔有两种形式:主动错误状态的帧间隔,被动错误状态的帧间隔。
4.CAN FD
CAN FD(Controller Area Network Flexible Data-rate)是对CAN协议的扩展,可以理解成CAN协议的升级版(只升级了协议,物理层未改变)。CAN与CAN FD的区别在于传输速率、数据长度、帧格式、ID长度不同。本节主要通过介绍CAN FD与经典CAN的区别来学习CAN FD的知识。
(1)仲裁域
在经典CAN中,仲裁域有基本格式和扩展格式,在CAN FD中也有。图3-16所示是CAN FD的仲裁域,它与经典CAN格式相比基本上没什么变化,只是将RTR改为了RRS,常为显性。
图3-16 CAN FD的仲裁域
(2)控制域
控制域增加了3个标记位——FDF、BRS和ESI,并且DLC的计算方式也发生了变化,如图3-17所示。
1)FDF(Flexible Data-rate Format)位:表示是CAN报文还是CAN FD报文。常为隐性1,表示CAN FD报文。
2)BRS(Bit Rate Switch)位:表示位速率转换。当BRS为显性位0时,数据段的位速率与仲裁段的位速率一致(恒定速率);当BRS为隐性位1时,速率可变(即BSR到CRC使用转换速率传输)。
3)ESI(Error State Indicator)位:发送节点错误状态指示。主动错误时发送显性位0,被动错误时发送隐性位1。
4)DLC:当DLC超过8时,根据不同的组合,分别标识出12~64字节。
图3-17 CAN FD的控制域
(3)数据域
CAN FD的数据域(见图3-18)除了支持0~8字节,还支持12、16、20、24、32、48、64字节,而传统CAN最多支持8数据字节。CAN FD数据帧格式对一些标记位进行了扩展,然后有效载荷扩展到了最大64字节。
图3-18 CAN FD的数据域
(4)CRC域
CAN FD的CRC做了修改,覆盖了填充位,并且如果出现大于5个连续位的情况,则会报错。另外由于数据段长度增加,CRC的长度也会动态变化。
(5)ACK域
CAN FD的ACK域支持2位,其中一位用来辅助同步。
以上就是CAN FD与CAN协议的区别,其他方面都是类似的。若要了解更多关于CAN协议的知识,可以查看ISO 11898标准文件。
5.CAN总线波形
前面介绍过了CAN总线采用差分信号传输,根据两根信号线CANH和CANL的电位差判断总线电平:显性电平和隐性电平,其中显性电平对应逻辑0,隐性电平对应逻辑1。使用示波器捕捉CAN总线波形,如图3-19所示,CANH和CANL使用两个探头。
图3-19 CAN总线波形
随着技术的发展,车内的网络不只有CAN,FlexRay也是车内的通信网络之一。FlexRay旨在满足关键应用中的高速、可确定、具备故障容错能力的串行通信总线需求。我们可将FlexRay拆分为Flex和Ray两部分,Flex的意思为“灵活的”,Ray的意思为“鳐鱼”,所以FlexRay联盟图标是鳐鱼形状,如图3-20所示。
图3-20 FlexRay联盟图标
下面简单回顾一下FlexRay协议的历史。
2000年9月,宝马和戴姆勒-克莱斯勒联合飞利浦与摩托罗拉成立了FlexRay联盟。该联盟致力于推动FlexRay通信系统在全球的采用,使其成为高级动力总成、底盘、线控系统的标准协议。
2006年底,第一款采用FlexRay的量产车BMW X5二代推出,FlexRay被应用在该车的电子控制减震系统中。
2010年,FlexRay联盟发布3.0.1版规范,开始推动其作为ISO标准。
2013年,FlexRay发布FlexRay的ISO 17458标准规范。
FlexRay使用非屏蔽双绞线将节点连接在一起,如图3-21所示。FlexRay支持分别由一对或两对电线组成的单通道或双通道配置,每对电线上的差分信号可减少外部噪声对网络的影响,而无须采用昂贵的屏蔽方案。
FlexRay比CAN网络更高级,它具有更高的传输速率、更全面的拓扑结构选择、更好的容错机制。下面我们从总线原理、网络拓扑结构、数据帧结构、总线波形4个方面详细介绍FlexRay总线。
图3-21 FlexRay双绞线示意图
1.FlexRay总线原理
FlexRay总线的数据传输可以采用时间触发和事件触发两种模式。在时间触发模式下,数据的传输是按照预定的时间表进行的,每个节点都会按照同步时钟的时间进行数据的发送和接收。这种模式在高速数据传输时具有高效、可靠的特点,但是对于某些实时应用场景,传输并不足够灵活。
因此,FlexRay还提供了事件触发模式,可以在需要的时候触发数据的传输。事件触发模式下,每个节点都会监测总线上发生的事件,例如收到了某个节点的请求或者收到了某条特定的消息。一旦发生了某个预定的事件,节点就会按照预定的规则发送或者接收数据。
事件触发模式的优点在于可以在需要的时候触发数据传输,因而可以满足更加灵活的应用需求。但是相比于时间触发模式,事件触发模式的传输效率会稍低一些,因为需要在总线上进行事件的监测和响应。
FlexRay采用了周期通信的方式,一个固定周期大约1~5ms,如图3-22所示。FlexRay的通信是在循环的周期中进行的,一个通信周期至少包含静态段和网络空闲时间,动态段和符号窗口是可选项。
图3-22 FlexRay的一个周期
❑静态段和动态段采用时分多址(Time Division Multiple Access,TDMA)机制进行数据传输。
❑符号窗口主要用来发送唤醒特征符和媒介访问检测特征符。
❑网络空闲时间在一个通信周期的末尾,主要用来实现分布式的时钟同步和节点参数的初始化。
(1)静态段
由时间触发的信息在FlexRay总线上的时间是可以预测的,因而保证了其确定性,这段称为静态段。该段分为多个槽,称为静态槽(static slot),每个槽包含一个数据帧。该数据帧会有固定的帧ID,该ID从1开始递增。当时间到达该槽时,如果节点要发送该帧ID的数据,就可以把数据放上去,如图3-23所示。
图3-23 FlexRay的静态段结构
(2)动态段
由事件触发的信息可配置在事件控制区域内传输,具有事件触发的灵活特性,这段称为动态段。动态段也分为多个槽,称为最小时隙(minislot),每个槽对应一个帧ID,从静态段结尾的ID开始递增。如果到了某个最小时隙,节点想要在该最小时隙的ID发送数据,就可以发送,直到数据发送完成后,再继续到下一个最小时隙。如图3-24所示。
图3-24 FlexRay的动态段结构
其中,动态时隙是由FlexRay协议定义的一种机制,它可以在网络上的所有节点之间自动协商和分配时隙。动态时隙的分配基于FlexRay中的“最小时隙”概念,即在网络中传输任何消息所需的最短时间。在动态时隙机制下,节点可以通过发送请求消息来获取时隙,并根据其需要进行分配。这个机制可以确保高优先级消息在需要时能够获得足够高的带宽,同时也可以最大化网络带宽的利用率。
(3)符号窗口
一个FlexRay通信周期可以有一个符号窗口,符号窗口可以配置时钟的值。如果这个配置值为零,则表示不用符号窗口。在符号窗口内的内容及功能由上层协议规定,应用程序不会涉及符号窗口。
(4)网络空闲时间
网络空闲时间用来对FlexRay网络进行调整,是不可或缺的部分。在网络空闲时间内,FlexRay网络中的节点不进行任何通信,但会进行时钟纠正处理。FlexRay网络空闲时间的长度取决于静态段、动态段、信号段的长度和空闲时间。
2.FlexRay网络拓扑结构
FlexRay网络拓扑结构主要应用总线型、星形和混合型3种类型,而这3种类型又可以分为双通道ECU和单通道ECU。其中双通道ECU集成多个系统级功能,可以节约生产成本并降低复杂性,双通道架构提供冗余功能。单通道ECU的最大数据传输速率达到10Mbit/s,双通道ECU的最大数据传输速率达到20Mbit/s。FlexRay所应用的网络拓扑结构主要类型如图3-25~图3-27所示。
图3-25 FlexRay总线型拓扑
图3-26 FlexRay星形拓扑
图3-27 FlexRay混合拓扑
3.FlexRay数据帧结构
在FlexRay网络中,节点把要发送的信息打包成帧通过在静态段或动态段的时间片发送。一个数据帧由帧头、有效数据段和帧尾3部分组成,如图3-28所示。
图3-28 FlexRay数据帧结构
(1)帧头
帧头由5字节(40位)组成。
❑保留位(1位):为日后的扩展做准备。
❑负载段前言指示(1位):指明负载段的向量信息。
❑无效帧指示(1位):指明某帧是否为无效帧。
❑同步帧指示(1位):指明某帧是否为同步帧。
❑起始帧指示(1位):指明某帧是否为起始帧。
❑帧ID(11位):每条消息都有一个唯一的标识符,称为帧ID。帧ID用于区分不同的消息,并确定它们在网络中的优先级和时序关系。
❑负载段长度(7位):标注一帧中能传送的字数。
❑头部CRC(11位):用于检测传输中的错误。
❑周期计数(6位):每一通信开始,所有节点的周期计数器增1。
(2)有效数据段
有效数据段可以存放0~254字节数据。对于动态段的帧,有效数据段的前两字节通常用作消息ID,接收节点根据接收的ID来判断是否为需要的数据帧;对于静态段的帧,有效数据段的前13字节用于网络管理。
(3)帧尾
帧尾是一个24位的CRC,包含了由头帧与有效数据段计算得出的CRC校验码。计算CRC时,根据网络传输顺序,将从保留位到数据段最后一位的数据放入CRC生成器中进行计算。
4.FlexRay总线波形
FlexRay总线是双绞线,总线正(Bus-Plus,BP)和总线负(Bus-Minus,BM)的FlexRay总线连接是差异信号,其波形如图3-29所示。
图3-29 FlexRay总线波形
LIN(Local Interconnect Network,本地互联网络)是一种用于车辆部件之间通信的串行网络协议。LIN总线是CAN总线的补充,它提供较低的性能和可靠性,但大大降低了成本。由LIN总线构建的区域子系统再经由ECU(网关等)接入上层的CAN总线,如图3-30所示。
图3-30 LIN总线示意图
下面简单回顾一下LIN总线的历史。
1999年,LIN联盟(宝马、大众、奥迪、沃尔沃、梅赛德斯-奔驰等)发布LIN 1.0。
2000年,更新LIN协议(LIN 1.1、LIN 1.2)。
2002年,LIN 1.3发布,主要修改了物理层。
2003年,LIN 2.0发布,有一些重大的改变,同时引入了一些新特性,如诊断功能。
2006年,LIN 2.1发布。
2010年,LIN 2.2A发布,这是现在广泛采用的版本。
2012年,基于LIN 2.0,SAE将LIN标准化为SAE J2602。
2016年,LIN总线被正式列为国际标准ISO 17987。
如今,LIN总线已经被广泛使用。图3-31所示为一个汽车LIN总线应用示例。
图3-31 汽车LIN总线应用示例
下面从原理、网络拓扑结构、数据帧结构3个方面详细介绍LIN总线。
1.LIN总线原理
LIN总线基于通用的UART/SCI,使用单线信号传输,从节点不需要晶振或陶瓷振荡器就能实现自同步,因此成本低廉。LIN是一个最多包含16个节点(一个主节点,15个从节点)的广播网络,所有消息都是由主节点发起的,只能有一个从节点回复指定的消息ID,主节点还可以通过回复其自身的消息来充当从节点。由于所有的通信都是由主节点发起的,所以不需要实现冲突检测,如图3-32所示。
图3-32 LIN消息模式
LIN总线协议基于ISO参考模型中的物理层,数据链路层采用NRZ(None-Return-to-Zero,不归零)编码方式,电平分为隐性电平(“1”)和显性电平(“0”)。
2.LIN网络拓扑结构
LIN网络由一个主任务和若干个从任务组成,主节点既有主任务又有从任务,从节点只包含从任务,如图3-33所示。
图3-33 LIN的网络拓扑结构
主任务决定总线上谁可以在什么时间传输什么样的帧,从任务提供每帧传输的数据。一个帧包含一个帧头(Header)和应答(Response),帧头由主任务提供,应答由从任务提供。
LIN网络通过LIN描述文件(LIN Description File,LDF)进行描述。LDF包含关于帧和信号的信息,这个文件同时用于主节点和从节点中的软件创建。主节点为控制方,确保以正确的时间间隔和周期发送数据帧,并且每个帧都在总线上获得足够的时间片。这种时间调度方法基于下载到主节点软件的LIN配置文件(LIN Configuration File,LCF)。所有数据都通过一个包含帧头、响应和一些响应间隔的帧发送。因此从节点有时间进行应答,每个帧都发送到LCF确定的数据帧槽中;主节点发送包含帧头的帧时,创建新的报文,然后从节点根据主节点发送的帧头在帧中填充数据。
3.LIN数据帧结构
帧包含帧头和应答两部分。主任务负责发送帧头;从任务接收帧头并对帧头所包含信息进行解析,然后决定是发送应答还是接收应答,或是不做任何反应。帧在总线上的传输如图3-34所示。
图3-34 帧在总线上的传输
(1)帧头
帧头包括同步间隔段(Break Field)、同步段(Sync Byte Field)及PID(Protected IDentifier,受保护ID)段,应答包括数据段和校验和段。前面介绍了总线一般实行“线与”,其中值“0”为显性电平,值“1”为隐性电平。如图3-35所示,帧间隔为帧之间的间隔,应答间隔为帧头和应答之间的间隔,字节间间隔包括同步段和PID段之间的间隔、数据段各字节之间的间隔,以及数据段最后一个字节和校验和段之间的间隔。下面对帧头和应答的各部分进行详细说明。
图3-35 帧的结构
1)同步间隔段。同步间隔段由同步间隔和间隔符构成。同步间隔是至少持续13位(以主机节点的位速率为准)的显性电平,由于帧中的所有间隔或总线空闲时间都应保持隐性电平,并且帧中的任何其他字段都不会发出大于9位的显性电平,因此同步间隔可以标志一个帧的开始。同步间隔段的间隔符是至少持续1位的隐性电平。
2)同步段。在介绍同步段之前,首先介绍一下字节域(Byte Field)的概念。字节域包括1位起始位(Start Bit,显性)、8位数据位、1位停止位(Stop Bit,隐性),是一种标准UART数据传输格式。在LIN的一帧当中,除了前文讲述的同步间隔段,后面的各段都是通过字节域的格式传输的,如图3-36所示。在LIN帧中,数据传输都是先发送LSB(最低有效位),最后发送MSB(最高有效位)。
图3-36 LIN同步段
3)PID段。PID前6位叫作帧ID,加上两个奇偶校验位后称作PID,即受保护ID。帧ID标识了帧的类别和目的地,范围在0x00~0x3F之间,共64个。从任务对于帧头作出的反应(接收/发送/忽略应答部分)都是依据帧ID判断的。依据帧ID不同可将帧进行分类,如表3-4所示。
表3-4 帧的类型
(2)应答
1)数据段。数据段包含两种数据类型,信号(Signal)和诊断消息(Diagnostic Message)。信号由携带帧传递,一个帧ID对应的数据段可能包含一个或多个信号。一个信号通常由一个固定的节点发出,此节点称为该信号的发布节点(Publisher);由其余的一个或多个节点接收,它们称为信号的收听节点(Subscriber)。诊断消息由诊断帧传递,对消息内容的解析由数据自身和节点状态决定。
2)校验和段:校验和段对帧中所传输的内容进行校验。校验和分为标准型校验和(Classic Checksum)及增强型校验和(Enhanced Checksum)。
4.LIN总线波形
LIN总线波形是一个方波(见图3-37),代表着串行数据流里的二进制状态。如果无信息发送到LIN数据总线上(总线空闲)或者发送到LIN数据总线上的是一个隐性位,则LIN总线信号上的最大值即隐性电平。当传输显性位时,发送控制单元内的收发器将LIN数据总线接地,表现为LIN总线信号上的最小值,即显性电平。
图3-37 LIN总线波形
MOST(Media Oriented Systems Transport,多媒体定向系统传输)由德国Oasis Silicon System公司于2001年开发,它多采用光纤传输和环形拓扑结构,具有传输速率高、抗干扰性强、线束质量轻的特点,但不是正式的标准。
MOST可满足用户对车辆高质量多媒体性能的需求。MOST在总线上最多支持64个设备,提供的数据速率为25Mbit/s,可以进一步扩展到50Mbit/s和150Mbit/s,具有3个通信通道,用于不同类型的数据传输。那么,为什么不使用已经建立起来的汽车总线,而要用MOST总线呢?首先,MOST总线生来就是为车载多媒体数据服务的,而CAN和LIN由于传输带宽的原因,不便用于多媒体数据的传输。其次,FlexRay虽然比CAN、LIN总线更快,但已针对时序关键型应用进行了优化,例如有线驱动而非媒体驱动。在此背景下MOST就诞生了,并广泛应用于车载多媒体数据的传输。
MOST总线支持当今汽车中多媒体设备的快速增长,如图3-38所示。MOST规范中定义了物理层和数据链路层,以及用于数据通信的ISO/OSI模型的七层,通过使用标准化接口简化了MOST协议在多媒体设备中的集成。
图3-38 MOST总线
(图片来源:IEEE)
MOST协议并不是正式的标准,而是由分割的帧数据块组成的。帧中有流数据、分组数据、控制数据,允许采用星形、环形等多种拓扑结构。MOST一般采用环形拓扑结构,有一个主节点用于控制所有同步通信(synchronous communication),同步帧(synchronous frame)会周期性(频率为48kHz)地从主控节点发送到网络中的各个节点,其他从节点在收到同步帧后会主动把数据放到该同步帧的后面,继续发送到下一个节点。
对MOST协议来说,每个数据帧都划分为不同的通道(channel),每个通道都严格按照时间顺序均匀地传输数据。MOST 25是汽车制造商通常使用的标准,MOST 50(涵盖50Mbit/s数据速率)和MOST 150(涵盖150Mbit/s数据速率)是MOST的最新版本,其中MOST 25的标准数据帧结构如图3-39所示。
图3-39 MOST 25的标准数据帧结构
帧的初始数据字节包括用于同步数据传输的信息和边界描述符(边界描述符具有同步通道和异步通道的字节分配信息);接下来的60字节分配给同步通道和异步通道;第62和第63字节携带控制通道信息;最后一字节中7位数据用于帧控制,1位用于奇偶校验。数据以每块16帧的形式发送,消息从16帧数据中取出,每帧2字节,32字节的控制数据用于寻址特定的功能块和时刻执行的操作,使多媒体数据从特定的源不间断地流向特定的目的地。控制数据帧的典型结构如图3-40所示。
图3-40 MOST控制数据帧
控制数据字段主要包含功能块列表中的信息,并在MOST标准的功能目录中定义。
联网汽车的高速数据传输要求迫使汽车网络快速发展,汽车CAN、CAN-FD、LIN等传统总线已经不能满足不断变化的需求,汽车以太网应运而生。传统以太网的网络协议和系统广泛应用于局域网(LAN)和广域网(WAN),但是传统的以太网无法在汽车上使用,因为它太大声并且容易受到干扰。2011年,博通推出了BroadR-Reach车载以太网技术。该技术通过了汽车EMC严格的要求,使用单双绞线电缆,为汽车应用采用以太网铺平了道路。2011年11月,由博通、恩智浦、飞思卡尔和哈曼国际发起的OPEN联盟(One-Pair EtherNet Alliance)成立,该联盟旨在推动将基于以太网的技术标准应用于车联网中。
如今汽车以太网是发展最快的车载网络技术之一,推动了ADAS、信息娱乐、远程信息处理、网关、计算平台、后视摄像头和环视摄像头等新应用,它已被证明是一种安全可靠地传输大量数据的媒介,同时重量也比标准CAN/LIN线束轻30%。汽车以太网如图3-41所示。
图3-41 汽车以太网示意图
车载以太网和传统以太网的主要区别在于物理层;上层的链路层、网络层、传输层大多是大家常见的MAC、IP、TCP/UDP等;还有一组AVB(Audio Video Bridging)协议簇,现在更名为TSN(Time-Sensitive Networking)协议簇,它们代表了对实时性有高要求的传输协议,主要用于实时音视频、实时控制流等通信场景。车载以太网协议栈如图3-42所示。
图3-42 车载以太网协议栈
由于AVB目前还在发展中,使用并不广泛,本节主要介绍传统TCP/IP协议簇在车载环境下的使用。在IP协议族下,车载以太网主要在应用层的协议使用上与传统PC以太网稍有区别,链路层、网络层、传输层都没有变化。应用层主要为了方便车内多个控制器之间的沟通协作,采用了SOME/IP、MQTT等一系列车载应用协议。
本节并不深入讲解以太网底层协议,因为大家对它已经太熟悉了,而且网上的相关资料也非常丰富,我们只在后续的应用协议中讲解车载以太网中的应用层协议。