CAN(Controller Area Network,控制器局域网)是一种串行通信技术,专门用于在汽车电子控制单元(ECU)之间实现可靠的数据交换。
CAN协议介绍
电子化
汽车近年来的发展呈现出以电子化为主的特点。电子化的主要原因是由于当前用户对汽车的需求一直在不断增长,以及日益严格的汽车排放法规。另一个因素是全球化,全球化加剧了竞争和成本压力,直接导致创新压力不断增加。
数据传输
起初,独立运行的ECU足以实现电子功能。但工程师们很快就意识到,ECU彼此协调工作可以极大地增强车辆功能。最初,ECU之间数据交换是以传统方式实现的,即为每一个传输信号分配一个物理通信通道。
串行通信
然而,大量的布线也只能实现有限的数据交换。唯一可以解决这一难题的方法是通过单个通信通道(总线)进行串行位数据交换。因此,需要设计适合汽车需求的串行通信系统。
基于CAN的安全数据传输
上世纪八十年代初,Bosch开发一种新的串行通信系统,即CAN。即使在今天,CAN汽车动力系统、底盘和舒适系统的ECU网络中发挥着重要作用。最重要的是,CAN具有数据传输非常可靠的特点,可以满足应用领域的实时要求。
化繁为简
自引入CAN后,汽车中的复杂线束(通常存在多种变体)已成为过去。CAN不仅可以简化项目规划和实施,还可以降低布线重量和空间要求。
CAN协议(CAN protocol)
从1994年开始,ISO启动CAN技术标准化工作,并最终形成4份标准规范。其中,ISO 11898-1描述了CAN协议。除了数据通信的参考模型,CAN协议仅包括数据链路层(介质访问控制子层MAC -Medium Access Control和逻辑链路控制子层LLC - Logical Link Control)和物理层(物理信号PLS - Physical Signaling)。
CAN控制器(CAN Controller)
CAN协议是基于硬件实现的。目前有多种不同的CAN控制器,其唯一区别在于对CAN报文的处理方式,具体体现在对象层中:具有对象存储的CAN控制器(即完整CAN控制器-Full CAN Controller)与不具有对象存储的CAN控制器(即基础CAN控制器-Basic CAN Controller)。
高速CAN(CAN High Speed)和低速CAN(CAN Low Speed)
ISO 11898-2和ISO 11898-3介绍了数据通信参考模型的两个子层:PMA(Physical Medium Attachment,物理介质适配层)和PMS(Physical Medium Specification,物理介质规范)。它们描述了两种不同的CAN物理层:高速CAN物理层和低速CAN物理层,主要区别在于对总线电平和数据传输速率(波特率)的定义。
波特率
ISO 11898-3规定最大的波特率为125 kbit/s,主要用于汽车的舒适系统领域。ISO 11898-2规定最大波特率为1Mbit/s,主要用于汽车的动力系统和底盘系统领域。物理层的MDI(Medium Dependent Interface,介质相关接口)子层不存在任何标准。CiA DS-102(CiA:CAN in Automation)仅推荐使用特定的连接器(SUB-D9),并遵循特定的连接器引脚分配。
事件驱动通信
ISO 11898-1定义了事件驱动通信。总线负载较高可能会导致延迟,对于优先级较低的CAN报文来说尤其如此。若要确保在CAN网络中实现确定性通信,可以使用ISO 11898-4。ISO 11898-4是数据链路层的扩展,为CAN网络增加了时间触发的通信选项。
ISO/OSI参考模型
图Standard and Implementation显示了数据通信的ISO/OSI参考模型、CAN技术规范(CAN standard)及其实现之间的关系。
CAN网络由若干个经物理传输介质CAN Bus连接的CAN节点组成。实际上,CAN网络通常采用线性拓扑结构,每个ECU经CAN接口连接到总线。也有少数CAN网络采用被动星形拓扑。
非屏蔽双绞线(UTP,Unshielded Twisted Pair)是传输对称信号时最常用的物理传输介质。通常,UTP的线横截面介于0.34 mm2 和0.6 mm2 之间。线路电阻应小于60 mΩ。
在最高传输速率1Mbit/s的情况下,允许的最大长度是40米。在CAN网络的末端,总线终端电阻(termination resistor)有助于抑制信号反射现象。ISO 11898规定CAN节点的最大数量为32。
电子化
随着汽车电子化程度的提高,软件的数量和复杂度也在迅速增长。一些豪华汽车已经拥有1000多种软件功能,多条总线系统,以及70多个ECU。在CAN网络中执行任务的ECU称为CAN节点。
复杂度不断升高
在ECU联网的初期,一个简单的CAN驱动程序(该驱动程序为应用程序提供与硬件无关的简单接口)、一个CAN控制器和一个CAN收发器(CAN transceiver)足以实现CAN接口。如今,ECU网络离不开操作系统、网络管理和诊断功能。同时,软件已变得极其复杂,因此有必要对ECU基础软件进行标准化。
软件协调
标准统一的软件可减少开发工作并简化维护工作,还有助于提高重复使用率,并且有助于增强不同车辆平台之间以及OEM和供应商之间的软件组件的互换性。
AUTOSAR
AUTOSAR(AUTomotive Open System ARchiteture,汽车开放系统架构)为ECU软件提供了参考架构,其核心是AUTOSAR实时运行环境(RTE),负责将网络与应用程序的软件组件完全分离。AUTOSAR以基础软件的形式为软件组件提供统一的服务,从低到高分别为:微控制器抽象层、ECU抽象层、服务层。
CAN节点结构
CAN Node图描述了新式CAN节点的结构。最值得关注的是通信服务领域。AUTOSAR COM(通信)提供标准通信服务、诊断服务(诊断COM管理器)和网络管理服务(通用NM/CAN NM)。PDU路由器(PDU:协议数据单元)处理各个通信层之间的内部节点通信,并协调AUTOSAR COM、诊断COM管理器和CAN TP(传输协议)之间的通信。
CAN接口
ECU需要CAN接口才能参与CAN通信。CAN接口由CAN控制器和CAN收发器组成。CAN控制器执行CAN协议规定的通信功能,从而大大减轻了主机的负担。
CAN收发器
CAN收发器将CAN控制器连接到物理传输介质。通常,控制器和收发器之间采用光耦隔离或磁耦隔离,因此尽管CAN总线上的过电压可能会损坏CAN收发器,但CAN控制器和底层主机仍可受到保护。
发送/接收
在CAN网络中,CAN节点的不同之处在于每个节点发送或接收的CAN报文的数量。发送和接收的频率也存在很大差异。例如,一个CAN节点可能要接收五条不同的CAN报文,且每隔10毫秒接收一条,而另一个CAN节点只需每隔100毫秒接收一条CAN报文。这些明显的差异导致产生了两种基本的CAN控制器架构:完整CAN控制器和基础CAN控制器。
集成
不论CAN控制器类型如何,CAN控制器都可集成在微控制器中,也可以作为独立的芯片存在(如图所示)。在这种情况下,微控制器会将CAN控制器视为存储芯片。虽然独立CAN控制器更加灵活,但集成CAN控制器具有所需空间更少的优势,并且微控制器和CAN控制器之间的通信更快、更可靠。
总线连接
以前,CAN控制器经常通过离散电路连接到通信介质。但现在,CAN收发器可以处理总线连接。CAN收发器有两个总线引脚:一个用于连接CAN高信号线(CANH),另一个用于连接CAN低信号线(CANL)。这是因为CAN采用对称的物理信号传输以满足电磁兼容性,而且CAN网络中的物理传输介质是由两根线(非屏蔽双绞线)构成。
高/低速率
通常,高速CAN收发器和低速CAN收发器的物理电平不同,支持的数据传输速率也不同。高速CAN收发器支持的波特率高达1 Mbit/s。低速CAN收发器支持的波特率最高仅为125 kbit/s。但低速CAN收发器可确保总线接口的容错布局(例如,两条通信线路之中的某一条故障不会导致总体通信故障)。
抗噪能力
通常,CAN收发器的电磁辐射极低且共模工作范围广,具有较高的抗噪能力。此外,目前的CAN收发器可提供高达8 kV的ESD(Electro-Static discharge,防静电)保护。尽管CAN收发器在某些应用领域中具有很高的共模抑制,但在输出附近插入共模扼流圈(CMC)仍有助于进一步减少辐射。
限制
ISO 11898中规定CAN节点的最大数量为32。实际上,CAN节点的最大数量在很大程度上取决于所使用的CAN收发器的性能以及CAN网络是高速还是低速。例如,如果在高速CAN网络中使用TJA1050高速CAN收发器,则在一个CAN网络中最多可以连接110个CAN节点。
差分信号(Differential signals)
CAN网络中的物理信号基于差分信号进行传输,有效地消除发动机、点火系统和开关触点引起的干扰电压所造成的负面影响。因此,传输介质(CAN总线)由两条线路构成:CAN高信号线(CANH)和CAN低信号线(CANL)。
双绞线
将两条导线绞成一股可显著减小磁场。因此,在实践中双绞线通常用作物理传输介质。
总线终端
由于信号传播速度有限,反射现象的影响会随着波特率提高和总线延长而增加。使用终端电阻连接通信通道的两端(模拟传输介质的电特性)可防止在高速CAN网络中发生反射。
总线终端电阻的关键参数是导线的特性阻抗。ISO11898-2(高速CAN)规定终端电阻是120欧姆,但ISO11898-3(低速CAN)未规定任何总线终端电阻,因为它的最大速率仅为125kbit/s。
总线连接
CAN网络中的物理信号基于差分信号进行传输,具体的差分电压取决于所使用的总线接口。高速CAN总线接口(ISO 11898-2)和低速CAN总线接口(ISO 11898-3)有所不同。
电压等级
在ISO 11898-2中,逻辑“1”对应差分电压0V,逻辑“0”对应差分电压2V。高速CAN收发器将超过0.9V的差分电压当做共模工作范围(通常为-12V到12V之间)内的显性(dominant)电平。
低于0.5V的差分电压被当做隐性(recessive)电平。磁滞电路提高了抵抗干扰电压的能力。在ISO 11898-3中,逻辑“1”对应差分电压-5V,逻辑“0”对应差分电压2V。
High-Speed CAN Bus Levels图和Low-Speed CAN Bus Levels图说明了不同CAN总线上的电压关系。
显性/隐性
在CAN网络中实现通信顺畅(尤其是总线访问、故障指示和应答)的基本前提是总线显性电平和总线隐性电平之间存在明显差别。总线显性电平对应于逻辑“0”,总线隐性电平对应于逻辑“1”。
显性电平优先级高于隐性电平。当不同CAN节点同时发送显性和隐性总线电平时,CAN总线将呈现显性总线电平。只有当所有CAN节点都发送隐性电平时,CAN总线才呈现隐性总线电平。
与逻辑
从逻辑上说,上述行为是与逻辑。从物理上讲,与逻辑由集电极开路电路实现。通过Bus Logic图可以了解CAN网络的线与(wired-AND)逻辑。
分散化
安全性关键应用(例如动力系统领域的应用)对通信系统的可用性提出了严格的要求。因此,让单个总线节点承担总线分配责任会造成不利影响。该总线节点易受攻击,且如果出现故障,将导致所有通信失败。最佳解决方案是分散总线访问权限,以便每个总线节点都能够访问总线。
事件驱动
CAN网络基于多主架构与总线型拓扑的原因是:每个CAN节点都可以发送报文至CAN总线上。CAN报文的传输不遵循任何预定的时间顺序,而是由事件驱动。
当传输信息时,通信通道才会处于繁忙状态,因此CAN节点可以非常快速地访问总线。理论上,由于可以快速响应异步事件且波特率高达1 Mbit/s,因此在CAN网络中完全可以实现毫秒级的实时数据传输。
接收方(receiver)选择寻址(addressing)
在CAN网络中,接收方选择寻址防止总线节点之间产生依赖,从而提高配置的灵活性:CAN报文是广播发送的,网络中所有CAN节点都可以接收到所有CAN报文。每个节点中都有过滤器,可以通过报文的标识符(ID)来筛选实际所需的CAN报文。虽然这会增加开销,但却可以在不修改CAN网络的情况下集成其他CAN节点。
CAN通信
通过CAN Communication Principle图可以了解如何在CAN网络中进行报文传输,CAN Node A发送ID=0x12的报文,CAN Node B、CAN Node C和CAN Node D都会收到,但是由于ID=0x12的报文无法通过Node C和Node D的Acceptance Checking,因此ID=0x12的报文会被Node C和Node D丢弃。
为传输用户数据,ISO 11898-1定义了数据帧。数据帧可以传输的最大有效负载为八个字节,即数据场。除了数据场,数据帧还包括执行CAN通信协议所需的许多其他场,包括报文ID、数据长度代码(DLC)、校验场(循环冗余校验序列 - CRC序列)以及应答场(ACK)等。
通常ECU会通过数据帧主动发送相关数据,但某些情况也可能用到远程帧。使用远程帧可以从其他任何CAN节点请求用户数据(即数据帧)。除了缺少数据场以外,远程帧与数据帧结构相同。
错误帧可用于指示通信期间检测到的错误。错误帧将强行中止正在进行的错误数据传输。错误帧的结构与数据帧或远程帧明显不同,仅由两部分构成:错误标志(error flag)和错误界定符。
段
数据帧是传输用户数据的载体,CAN通信中的主要角色。数据帧由多种不同部分构成,每个部分都会在传输过程中执行一项重要任务。例如:启动并维护ECU节点之间的同步,建立通信矩阵中定义的通信关系,以及传输和保护用户数据。
SOF(Start of Frame,帧起始)
SOF是数据帧传输的起始位。发送方(sender)会发送一个显性电平作为SOF,由于总线空闲时总线会保持隐性电平,因此SOF发出后会产生一个跳变沿用于整个CAN网络的时间同步。为了在帧传输期间保持与发送方的同步,接收方会在所有隐性电平到显性电平的跳变沿进行是否与发送方保持同步的判断。如果出现偏差,接收方将按照相关相位误差量重新进行同步(重同步)。
ID和RTR(Remote Transmission Request,远程传输请求位)
SOF之后是标识符(ID),用于区分数据帧的优先级,并根据通信矩阵中定义的收发关系为节点中的接收过滤器提供过滤依据。ID之后是RTR位。发送方将其用于通知接收方帧的类型(数据帧或远程帧)。RTR位为显性表示数据帧,隐性则表示远程帧。
IDE(Identifier Extension bit,标识符扩展位)
IDE位用于区分标准格式和扩展格式。标准ID有11位,扩展ID有29位。
DLC(Data Length Code,数据长度代码)
DLC表示数据场中的有效负载的字节数。一个数据帧最多可以传输八个字节。
CRC(cyclic redundancy check,循环冗余校验码)和ACK(acknowledge,应答)
校验场使用以界定符(delimiter)为结尾的CRC来保护有效负载。接收方在ACK位做出肯定或否定的应答,ACK位后同样有一位界定符。
EOF
EOF由7个连续隐性位组成,在此之后,报文传输结束。
请求数据
远程帧用于从任何CAN节点请求数据(即数据帧)。但是数据传输并不基于请求,而是主要基于信息生产者的自我主动性,因此汽车应用程序中几乎不使用远程帧。远程帧支持标准格式和扩展格式。
通过RTR决定
除缺少数据场以外,远程帧与数据帧布局相同。数据帧和远程帧是以RTR位来区分的。数据帧的RTR位为显性,远程帧的RTR位则为隐性。
两种帧, 同一ID
原则上,可以为CAN网络中的所有数据帧定义远程帧,仅需确保远程帧的标识符与所关联数据帧的ID匹配。发送节点通过发送数据帧来响应远程帧。
远程帧和响应
如果CAN控制器具有对象存储,则该CAN控制器会自动响应远程帧。不具有对象存储的CAN控制器必须先让主机知道远程帧,然后才能发起响应。 在理想情况下,远程帧的请求会立即触发对应数据帧的响应。但在请求和响应之间可能会插入具有更高优先级的CAN报文。
报文寻址
CAN网络中的通信基于与内容相关的寻址。CAN节点本身没有ID,但是可以通过ID区分CAN报文。所有CAN节点都会收到总线上广播发送的所有CAN报文。每个接收方都根据需求自行选择CAN报文。这种接收方选择寻址非常灵活,但需要每个接收方对接收到的CAN报文进行过滤(接收过滤)。
标准格式和扩展格式
用户可以选择以下两种报文格式:标准格式和扩展格式。两种格式的标识符长度不同。在标准格式中,ID有11位。在扩展格式中,ID有29位。
与标准格式ID相比,扩展格式ID由两个部分构成:基本ID和扩展ID。连接这两个部分的是IDE(Identifier Extension,标识符扩展)位和SRR(Substitute Remote Request,替代远程请求)位。
显性IDE位表示CAN报文为标准格式。隐性IDE位表示CAN报文为扩展格式。在扩展格式中,始终以隐性方式传输的SRR位取代了标准格式的RTR位,并且控制场的前两位(r0和r1)没有实际作用,两者都作为显性位传输。
传输可靠性
串行通信在汽车环境中遇到的最大难题之一就是如何保证极高的传输可靠性。CAN总线中使用的CRC校验是功能最强大的错误检测方法之一。
CRC序列
CRC方法根据要传输的位(从SOF到数据场结束)和ISO 11898-1定义的生成多项式G(x)计算CRC序列。CRC序列位于数据场之后。接收方会采用同样的方法针对接收到的位(SOF开始到数据场结束)计算CRC并与接收到的报文中的CRC序列进行对比,这样可以非常可靠地检测是否发生了传输错误。(例外情况:当CRC序列本身遭到干扰破坏时)。
应答
根据计算后的结果,每个接收节点都会给出应答,与节点是否会过滤该报文无关。接收方的应答不是肯定就是否定。ACK 位中的显性电平表示肯定应答,隐性电平表示否定应答。
ACK界定符
为了进行错误跟踪,ACK界定符始终以隐性方式传输。由于发送方以隐性方式传输ACK 位和ACK界定符,因此一个肯定应答足以告知发送方报文已正确传输。这就是CAN网络中的应答方法被称为节点肯定应答的原因。
ACK错误和错误标志
在有节点给出肯定应答的情况下,如果还有其他节点给出否定应答,那么这些否定应答不会被其他节点收到。为确保网络范围内的数据一致性,这些节点会在ACK界定符之后发送错误标志。
如果没有一个肯定应答,则ACK位会保持隐性,发送方将检测到ACK错误,并通过发送错误标志来终止正在进行的报文传输。ACK错误表示由发送方引起的错误或总线上没有接收方引起的错误。
同步
数据传输正确的基本前提是网络中通信节点之间同步。起始位(帧起始 - SOF)的隐性至显性的跳变沿用于同步CAN报文。之后,重同步(resynchronization)机制用于保持同步,直到报文传输结束为止。
重同步
重同步机制基于对隐性至显性跳变沿的评估。位填充机制保证了传输过程中有足够的跳变沿。ISO 11898-1规定,发送方在传输连续5个相同位后必须传输一个相反的位;即使连续5个相同位后本就是一个相反位,也需要添加填充位。
位填充区
由于位填充从以SOF的传输为开始,以CRC序列的最后一位的传输为结束,因此在传输包含8个数据字节的标准格式的数据帧时,在极限情况下,应有24个填充位。所以,理论上标准格式数据帧最多包含132位。
所有节点均可访问总线
ISO 11898-1定义了多主架构,以确保高可用性和事件驱动的数据传输。CAN网络中的每个节点都有权访问CAN总线,无需请求许可,也无需事先与其他CAN节点进行协调。虽然基于事件驱动的总线访问对事件的响应非常快,但也存在风险,即多个CAN节点可能同时访问CAN总线,从而导致CAN总线上出现数据重叠。
冲突避免
为保持通信系统的实时能力,ISO 11898-1规定了用于确保无损数据传输的总线访问, CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance,载波监听多路访问/冲突避免)方法。CSMA/CA方法确保希望发送报文的CAN节点在CAN总线可用时才对其进行访问。
逐位总线仲裁
如果多个节点同时访问总线,基于逐位总线仲裁的CSMA/CA方法可确保发送最高优先级CAN报文的节点获得总线访问权。原则上,CAN报文的优先级越高,在CAN总线上的传输次序越靠前。如果系统设计不佳,可能导致低优先级的CAN报文永远无法发出。
CSMA/CA
ISO 11898-1定义的总线访问方法的关键是逐位总线仲裁。即使多个节点同时访问总线,也可以防止发生冲突。逐位总线仲裁的原理相对简单。
唯一的总线电平
在网络范围内实现同步后,所有希望发送报文的CAN节点会将其CAN报文的ID从最高有效位到最低有效位逐位发送到CAN总线。在此过程中,CAN网络所基于的线与逻辑可确保在总线上产生清晰明确的总线电平。
仲裁逻辑
仲裁逻辑决定CAN节点是否可以继续发送,或者停止发送。
每次一个发送方
仲裁阶段结束时,ID最小的CAN报文的发送节点获得总线访问权。试图发送较低优先级报文的CAN节点切换为接收状态,等待CAN总线再次可用时对其进行访问,以再次尝试发送。
优先级和标识符
CAN报文的优先级对于获得CAN网络的总线访问权具有决定性作用。优先级通过标识符进行编码,标识符从最高有效位到最低有效位逐位传输。
标识符值越小=优先级越高
线与总线逻辑和仲裁逻辑可确保CAN报文的优先级随着标识符值的减小而增加:标识符值越小,CAN报文的优先级越高。下图说明了这种关系。
总线负载率和实时行为
如果总线负载率不太高,这种非破坏性仲裁和优先级控制的随机访问机制将提供公平且非常快速的总线访问。
但必须考虑到总线负载率增加会导致优先级较低的CAN报文的延迟时间变长。这可能会损害CAN通信系统的实时能力。因此,设计系统时应根据CAN报文所传输信号的紧急程度来确定其优先级。
车辆中的数据完整性
可靠的数据传输是实现车辆电子系统的安全性和可靠性的前提。因此,CAN不仅必须满足严格的实时要求,还必须始终提供可靠的数据传输。由于CAN也用于车辆中时间和安全性至关重要的应用,因此对数据完整性的要求极高。
EMC(Electromagnetic compatibility,电磁兼容)
由于环境对数据传输有干扰作用,所以环境对评估数据完整性至关重要,同样重要的还有串行总线系统抵御干扰的能力。因此,保证可靠的数据传输从物理系统布局开始,其中EMC往往扮演重要角色。
潜在错误来源
尽管具有电磁兼容设计和物理数据保护,但仍可能发生传导、电感和电容耦合,从而导致信号衰减和失真。如果再考虑到采样点不同、阈值差异以及节点之间的时钟频率偏差,实现无故障的数据传输是不可能的。
最大程度降低错误概率
数据完整性可以看作是数据在传输过程中遭到干扰和破坏的概率与遭到干扰的数据未被检测到的概率的乘积。两种基本策略可以尽量减少出错概率并提高数据完整性:一种策略是通过电磁兼容方式对网络进行布局或采取物理措施来避免损坏数据;另一种策略是通过有效的逻辑错误检测和逻辑错误处理来检测和纠正损坏的数据。下图对此进行了概述。
位编码
避免故障需要处理噪声辐射和敏感性或抗干扰性。位编码对辐射发射具有重大意义。智能设计的位编码有助于显著减少辐射,但必须经常与所需的输送能力进行协调。
NRZ位编码
NRZ(Non Return to Zero,不归零)位编码被用于CAN。这意味着二进制信号与物理电平的映射关系:逻辑“1”对应高电平,逻辑“0”对应低电平。NRZ编码的特征在于,相同极性的连续位没有电平变化。
缺少同步
NRZ编码能够实现极高的波特率,同时又可将辐射保持在限制范围内。但NRZ编码不是自同步的,即不具有任何同步属性。如果较长时间内没有发生电平变化,则接收方将不能保持同步。因此使用NRZ编码需要显式同步机制,但这会降低传输效率。
用于同步的位填充
在CAN总线中,使用位填充方法作为同步机制:发送方在传输五个相同位后,在位流中插入一个相反的位。曼彻斯特(Manchester)编码没有这种机制,因为它是自同步的。
对称信号传输
对称信号传输可以有效地避免发动机、点火单元和开关触点等引起的干扰电压的危害。在对称信号传输中,外部噪声对两条线的作用相同。
差分结构
差分结构可用于消除噪声-有用的信号不受影响。对称信号传输需要由两条线构成的物理传输介质(CAN总线),即CAN高信号线(CANH)和CAN低信号线(CANL)。
磁场
对于对称信号传输,可以利用导线周围磁场叠加的原理。导线内的电场以及导线周围产生的磁场正好彼此相反。如果导线彼此紧密相邻,则磁场几乎叠加为零,从而消除电磁辐射。绞合两根CAN信号线(双绞线)可确保其紧密相邻。
缠绕越密=感应效应越弱
通过绞合导线,不仅可以确保导线紧密相邻,就局部而言,感应效应的极性相反,每根导线上的感应电流是可以相互抵消的,从而可以进一步减弱感应效应。绞合导线将导线回路转变为单独的导体。理论上,每一段导线的磁场方向相反,从而导致感应电压或感应效应相互抵消。
特性阻抗
随着波特率的提高,由于信号传播距离有限,CAN总线上会出现反射现象。因此,高速CAN网络中的总线最远两端必须连接120欧姆的电阻。
终端电阻(Termination resistor)
CAN总线的末端可以连接分离式总线终端,代替在通信通道的每个末端连接一个总线终端电阻方案。
由两个相同电阻(60欧姆)和一个电容(通常为4.7 nF)构成的分离式总线终端类似于低通滤波器。高频信号转移至地,不会影响直流电压。测量结果表明,这可以提高抗噪能力并减少对外界的电磁干扰。
五种错误检测机制
为检测被破坏的报文,CAN协议定义了五种机制:位监控、报文格式监控(格式检查)、位编码监控(填充检查)、应答评估(ACK检查)以及校验场验证(循环冗余校验)。
发送方和接收方的任务
位监控和ACK检查由发送方执行。接收方执行格式检查、填充检查和循环冗余校验,这些检测针对总线上的所有报文,不受接收过滤器影响。
填充检查(接收方)
填充检查用于检查位流。CAN协议规定发送方传输五个相同位后必须传输相反的位,以便实现同步。如果连续接收到五个以上的相同位,则会出现填充错误。
位监控(发送方)
在位监控的框架内,发送方会将发送的位电平与实际的总线电平进行比较。如果发送方检测到两个电平之间存在差异,则会发生位错误。位监控可确保检测到发送方的所有全局错误和所有局部错误。
格式检查(接收方)
格式检查用于检查CAN报文的格式。所有CAN报文在某些位置始终呈现相同的位序列,即CRC界定符、ACK界定符和EOF。发送方始终以隐性电平传输这些报文部分。如果接收方在进行格式检查时在其中一个位检测到显性总线电平,则会发生格式错误。
循环冗余校验(接收方)
在循环冗余码中,与接收到的数据帧或远程帧关联的多项式R(x)应是ISO 11898-1指定的生成多项式G(x)的倍数。如果不是,就会产生CRC错误,说明数据帧或远程帧在传输期间遭到了破坏。
ACK检查(发送方)
CAN协议中定义的应答机制规定,所有接收方在完成循环冗余校验之后必须立即应答每一个接收的CAN报文。一个肯定应答足以告知发送方,至少一个接收方已正确接收了其发送的CAN报文。如果发送方没有接收到任何肯定应答,则发生了应答错误(ACK错误)。
数据一致性
为在网络范围内实现数据一致,CAN协议规定,如果有CAN节点检测到了总线错误,则必须通知CAN网络的所有CAN节点。为此,检测到错误的CAN节点会传输由六个显性位构成的错误信号主要(主要错误标志)。该操作故意违反位填充规则,从而产生位填充错误。
错误标志
传输错误标志可确保其他所有CAN节点会因为检测到总线错误而发送错误标志(次要错误标志),从而像主要错误标志的发送方一样终止常规数据传输。根据情况,主要和次要错误标志可能会有所重叠。
错误界定符
错误标志的传输由错误界定符来终止。错误界定符由八个隐性位构成,取代了常规报文传输的ACK界定符和EOF,连同CAN总线上的强制传输暂停(ITM - 帧间间隔),合计形成11个隐性位(总线空闲标识符)。
处理错误
错误处理由被中断CAN报文传输的发送方完成。在ITM后,发送方会尝试再次传输被中断的CAN报文。“Error Handling”图总结了检测到错误后CAN网络中采取的所有操作。“Bit Monitoring Error”动画以位监控错误为例展示错误处理。由于总线访问是基于优先级的,因此不能保证立即再次进行总线访问。最佳情况下,从错误检测到重新发送(主要错误标志、错误界定符、ITM)需要17个位时间。如果主要和辅助错误标志不存在重叠,则需要23个位时间。如果CAN节点处于被动错误状态,则需要31个位时间。在这种状态下,CAN节点必须等待8个位暂停传输时间,然后才能再次访问CAN总线。
避免总线拥堵
为在网络范围内确保数据一致,CAN网络中的每个节点都有权终止任何被认为是故障的CAN报文。将正确CAN报文错认为故障的CAN节点同样具有此权利。为防止传输介质发生拥堵,CAN协议规定了错误跟踪,用于确保CAN节点能够区分偶发干扰和持久性干扰。
TEC和REC
每个CAN控制器都有一个TEC(Transmit Error Counter,发送错误计数器)和一个REC(Receive Error Counter,接收错误计数器)。如果数据帧或远程帧传输成功,相关的错误计数器将递减(TEC=TEC-1;REC=REC-1)。错误标志的检测和后续传输会导致相关错误计数器根据特定规则递增。对于发送方,适用以下规则:TEC=TEC+8。检测到错误的接收方将其REC递增一个单位(REC=REC+1)。对于引起错误的接收方,适用以下规则:REC=REC+8。
主动错误(Error Active)
根据特定的错误计数,CAN控制器可以切换错误状态。CAN控制器启动后将进入“主动错误”正常状态。在该状态下,CAN控制器在检测到错误后发送六个显性位(主动错误标志)。超出限制(TEC>127;REC>127)时,CAN控制器将切换为“被动错误(Error Passive)”状态。
被动错误(Error Passive)
处于“被动错误”状态的CAN控制器只能通过发送六个相同的隐性位来指示检测到的错误。这可以防止检测错误的接收方将检测到的错误全局化。此外,发送两个连续的数据帧或远程帧时,处于“被动错误”状态的CAN控制器必须等待“暂停传输时间”(8个位)。
Bus Off
如果CAN控制器发生故障或错误累积过多,则会进入“Bus Off”状态,CAN控制器与CAN总线断开连接。只能通过软件恢复(强制等待时间为128 x 11位)或通过硬件复位来退出“Bus-Off”状态。
信号数量大量增加
引入CAN总线的数十年中,汽车嵌入式系统的结构发生了深远的变化,最明显的变化是数量:如果在引入CAN时只需传输数百个信号,那么今天这个数字已达到五位数。
新要求,新总线系统
数据流量的增加导致CAN总线上的总线负载率越来越高。除了对带宽的需求在不断增加,对确定性系统行为的需求也在不断增长,这刺激了新总线系统的开发。因此,出于信息娱乐目的,开发了带宽高达150 Mbit/s的MOST总线。确定性FlexRay总线可提供10Mbit/s的带宽,用于驾驶员辅助功能。在带宽范围的低端,引入了LIN作为低成本解决方案,用于完成传感器-执行器-区域中的任务。这些新的总线系统覆盖了各个领域,但CAN仍然是主流的汽车总线系统。
CAN不会被取代
只有极少数的CAN需要替换为传输速率更快的总线,例如FlexRay。但没有替换的主要原因是硬件成本较高以及将系统转化为新技术的开发工作巨大。
使用更多路CAN总线通常可以规避CAN带宽不足,但这需要网关在总线之间传输数据。
CAN性能限制
CAN带宽的限制因素源于自身的一个核心属性:在报文传输的特定阶段,多个网络节点可能同时处于传输模式。仲裁阶段传输开始时可能就是这种情况,并且在报文末尾的应答场中也是始终如此。这意味着一个位的传输时间不得短于其电压电平从总线一端的节点传播到另一端的节点再返回所需的时间。例如:在长度为40米的CAN总线上,若要满足一个位所需的传输时间,最大传输速率应约为1 Mbit/s。
更短的位时间也能满足
但在CAN报文仲裁阶段和应答场之间,仅允许一个发送节点。因此,这一部分对位时间的最小持续时间没有限制。那么在博世的工程师看来,如果在CAN报文这一部分提高传输速率会怎样?只需在两个不同的传输速率之间切换:在CAN报文的开头和末尾切换为慢速,在中间切换为快速。这就是CAN FD的基本概念。
CANFD协议介绍
更多数据,更低总线负载率
更快地传输CAN FD帧的有效负载可缩短传输时间,即总线负载率降低。另一方面,可以同时传输更长的数据场,即只需使用一个CAN FD帧。
例如,如果使用CAN FD以五倍的速度传输数据场,假设该帧包含的数据比普通CAN帧多五倍,则两者用时大致相同。因此,CAN FD帧可以传输五倍于CAN帧的信息,且不会增加总线负载率。
简化开发
引入CAN FD将为开发过程带来许多好处:
- 总线负载率问题将大大减少
- 不再需要使用多条CAN总线
- 即使未能消除对网关的需求,也会大大减少
- 由于每一帧可以承担更多的有效负载,因此需要的数据段更少
- 使用更少的帧,获得更理想的有效负载与开销数据比
新的通信控制器
为了确保CAN FD正常工作,需要新的CAN FD控制器。CAN FD控制器是向下兼容的,并且能够处理经典CAN (Classical CAN)。CAN总线上的ECU可以逐步替换为支持CAN FD的ECU。当然,只要有一个具有常规CAN控制器的ECU,就必须使用经典CAN。
新旧控制器并行使用
似乎只有总线上的所有ECU都升级为CAN FD控制器后,才能利用CAN FD的优势。这并不绝对。部分ECU支持CAN FD,能够以更高的速度通信,而其他ECU进入睡眠状态。较高的波特率有利于在维护期间更新ECU软件,因为更新过程往往需要数小时。
沿用现有的CAN知识
CAN FD的另一个优点在于,它不需要使用全新技术。工程师多年来使用CAN所获得的相关知识和经验仍然有效,并且可以在CAN FD中重复使用。这意味着从CAN升级到CAN FD的过程既不需要付出巨大的培训成本,也不会浪费经验。
标准格式和扩展格式
与经典CAN类似,CAN FD同样采用两种类型的数据帧格式:具有11位标识符的标准帧和具有29位标识符的扩展帧。这可确保对CAN FD进行部分调整后即可使用CANopen和SAE J1939等基于CAN的高层协议。
CAN FD没有远程帧
CAN FD没有为远程帧定义单独的格式。细想过后,您会发现这并没有任何影响。远程帧没有数据场,因此提高传输速率没有作用。所以,CAN FD协议允许经典CAN远程帧请求CAN FD帧。
RRS取代RTR
由于没有用于CAN FD的远程帧,因此RTR位不是必需的,所以被始终呈显性的RRS(Remote Request Substitution,远程请求替代位)所取代。帧起始(SOF)、标识符和标识符扩展位(IDE)保持不变。此外,CAN FD帧末尾的应答位(ACK)、相应的界定符(DEL)、帧结束(EOF)以及帧间间隔场(ITM)仍与经典CAN帧相同。
CAN FD相对于经典CAN在IDE位与应答位之间的部分进行了修改
用于区分的保留位
经典CAN帧的保留位成为经典CAN帧和CAN FD帧的区别标识。如果是显性值0,则表示经典CAN帧。如果是隐性值1,则表示CAN FD帧。
FDF - FD格式
该位的新名称是FDF(Flexible Data Rate Format,FD格式),它为传输更大的有效载荷创造了可能。实际的数据场长度以及是否切换为更快传输速率取决于FDF位的后面部分。
CAN FD控制器支持经典CAN
CAN FD控制器可以发送和接收经典CAN帧以及CAN FD帧,但经典CAN控制器接收到CAN FD帧时将始终使用错误帧进行响应:在经典CAN中,认为显性位的值为1是违反规则的。在经典CAN中将采用错误帧来回复该无效值。显而易见,传统的CAN控制器不支持CAN FD帧。
位速率切换(Bit Rate Switch)
CAN FD的保留位之后接位速率切换(BRS)位。当BRS位为显性时,波特率2等同于波特率1,因此不会加速传输。
如果BRS位是隐性时,则图中CAN FD帧的标红部分将以较高的波特率2传输。对于一条总线上的所有CAN FD控制器,必须统一配置这两个波特率。
波特率5MBit/s
在图中,波特率2定义为5 MBaud,相当于5 Mbit/s,位及其物理表示形式(即电压电平)的持续时间相同。该数值并不是凭空得出的,因为经实验室的实验证明,经典CAN所用的大多数收发器也能够处理5 Mbit/s的速率。如果收发器性能允许,还可支持更高的传输速率。真实情况下,具体的传输速率取决于实际车辆所处的复杂电磁环境影响。
BRS和CRC界定符之间采用更高的波特率
从波特率1到波特率2的转换发生在BRS的采样点,从波特率2回到波特率1的转换发生在应答位之前的CRC界定符的采样点。
为了使接收方即使在传输速率很高的情况下也可以与发送方完美同步,需要立即执行第二次硬同步。
错误状态指示位(Error State Indicator)
错误状态指示位(ESI)在位速率切换(BRS)位之后。如果该位为显性,则表明ECU处于主动错误状态。如果该位为隐性,则表明ECU处于被动错误状态。
该位旨在以更加透明的方式跟踪错误,并简化网络管理。网络节点的主动错误和被动错误状态会在整个网络上传播。
DLC CAN:9种可能的长度
在经典CAN中,数据长度代码(DLC)由四个位构成。因此,意味着数据场有九种可能的合法长度,即0到8个字节。
DLC CAN FD:16种可能的长度
在经典CAN的基础上,DLC中其余的七个值(即9到15)用于CAN FD。如果DLC > 8,DLC与字节数之间将不是线性对应的关系。下表显示了DLC对CAN和CAN FD中数据场大小的不同含义:
DLC | Data Field Bytes CAN | Data Field Bytes CAN FD |
---|---|---|
0 | 0 | 0 |
1 | 1 | 1 |
2 | 2 | 2 |
3 | 3 | 3 |
4 | 4 | 4 |
5 | 5 | 5 |
6 | 6 | 6 |
7 | 7 | 7 |
8 | 8 | 8 |
9 | 8 | 12 |
10 | 8 | 16 |
11 | 8 | 20 |
12 | 8 | 24 |
13 | 8 | 32 |
14 | 8 | 48 |
15 | 8 | 64 |
更多数据=更长的CRC
相较于经典CAN,CAN FD帧中出现位错误的可能性有所增加。之所以如此,一方面是因为波特率2的位时间更短,另一方面是因为数据场中的位数更多。解决此问题需要在CAN FD帧中实现更大的冗余,否则,接收方无法检测到错误的可能性就会增加。数据场不超过16个字节的CAN FD帧将由17个CRC位保护。数据场超过16个字节时,对应的CRC为21个位。
两个生成多项式分别是CRC17的0x3685B,以及CRC21的0x302899.
CAN的位填充
在传统的CAN帧中,从帧起始(SOF)到校验场末尾(CRC)添加填充位。在每五个相同的位之后插入一个相反的位。这些填充位不计入校验场。
CAN FD的位填充
在CAN FD中,从帧起始(SOF)到数据场末尾添加填充位。在计算校验场时,会将这些填充位也考虑进去。填充位计数器(对7取模)和奇偶校验位在帧中紧接在数据场后。
CAN FD CRC场中的其他位填充
CRC场本身也会被填充,且频率更高。以下是适用规则:CRC场始终以与前面的位相反的填充位开头。在接下来的每四个位(无论是否相同)之后,插入与前一位相反的填充位。
在CRC之后,不再插入填充位,这一点与经典CAN中相同。
本文从VECTOR官网CAN(Controller Area Network,控制器局域网)介绍整理而来,原文链接如下:
的位时间更短,另一方面是因为数据场中的位数更多。解决此问题需要在CAN FD帧中实现更大的冗余,否则,接收方无法检测到错误的可能性就会增加。数据场不超过16个字节的CAN FD帧将由17个CRC位保护。数据场超过16个字节时,对应的CRC为21个位。
两个生成多项式分别是CRC17的0x3685B,以及CRC21的0x302899.
[外链图片转存中…(img-P0vHRfzZ-1697007486232)]
CAN的位填充
在传统的CAN帧中,从帧起始(SOF)到校验场末尾(CRC)添加填充位。在每五个相同的位之后插入一个相反的位。这些填充位不计入校验场。
CAN FD的位填充
在CAN FD中,从帧起始(SOF)到数据场末尾添加填充位。在计算校验场时,会将这些填充位也考虑进去。填充位计数器(对7取模)和奇偶校验位在帧中紧接在数据场后。
CAN FD CRC场中的其他位填充
CRC场本身也会被填充,且频率更高。以下是适用规则:CRC场始终以与前面的位相反的填充位开头。在接下来的每四个位(无论是否相同)之后,插入与前一位相反的填充位。
在CRC之后,不再插入填充位,这一点与经典CAN中相同。
本文从VECTOR官网CAN(Controller Area Network,控制器局域网)介绍整理而来,原文链接如下:
CAN_C: CAN学习模块 (vector.com)