细说汽车电子通信总线之CAN2.0总线协议详解

CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应"减少线束的数量"、"通过多个LAN,进行大量数据的高速通信"的需要,1986年德国汽车电子巨头--博世(BOSCH)公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,在欧洲乃至全球已成为汽车网络的标准协议,也是目前汽车电子应用中使用最广泛的通信协议。

CAN经过30多年的发展,其高性能和可靠性早已被市场所验证和认可,除汽车电子外,还被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

本文就为大家详细梳理一下CAN总线中,目前使用最为广泛的CAN2.0A/B协议,该版本也被称作传统CAN(ClassicCAN)协议,希望能够让大家对CAN总线协议有一个比较全面深入的了解,从而厚积薄发、让CAN总线开发变得更easy,事倍功半!

1.CAN总线发展历史与ISO规范

控制器局域网CAN(ControllerAreaNetwork),最初是由德国Bosch公司设计的,应用于汽车的监测和控制。

作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN总线被广泛应用到各种电磁辐射强和振动大的工业环境和控制领域。

1991年9月,Philips半导体公司制定并发布CAN技术规范:CAN2.0A/B。CAN协议经ISO标准化后有ISO11898标准和ISO11519-2标准两种。ISO11898和ISO11519-2标准对于数据链路层的定义相同,但物理层不同。

CAN总线是唯一成为国际标准的现场总线,也是国际上应用最广泛的现场总线之一。

CAN总线规范(Version2.0)

CAN2.0A:CAN标准报文格式

CAN2.0B:CAN标准报文格式和扩展报文格式

CAN总线技术规范的目的

定义数据链路层

定义CAN协议在周围各层中所发挥的作用

2.CAN总线主要功能特性

CAN总线控制器中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。

CAN总线网络中通信节点个数在理论上不受限制

各节点之间可实现自由通信

CAN总线采用了多主竞争式总线结构,具有多主站运行和分散仲裁的串行总线以及广播通信的特点。CAN总线上任意节点可在任意时刻主动地向网络上其它节点发送信息而不分主次,因此可在各节点之间实现自由通信。CAN总线协议已被国际标准化组织认证,技术比较成熟,控制的芯片已经商品化,性价比高,特别适用于分布式测控系统之间的数据通讯。CAN总线插卡可以任意插在PCATXT兼容机上,方便地构成分布式监控系统。

CAN2.0总线具有如下显著功能特性

多主(master)架构依据优先权进行总线访问

无破坏性的基于优先权的逐位仲裁

借助验收滤波器的多地址帧传递

远程数据请求

全系统数据相容性

错误检测和出错信令

很远的数据传输距离(长达10Km@5Kbps)

高速的数据传输速率(高达1Mbps)

高度实时性:每帧报文允许传输最高8个字节的数据

发送期间丢失仲裁或出错而遭到破坏的帧可自动重发

暂时错误和永久性故障节点的判别以及故障节点的自动脱离

脱离总线的节点不影响总线的正常工作

3.CAN2.0总线协议的物理层电气特性

MCU硬件只能提供3.3V/5V的TTL/CMOS电平信号,而CAN总线上传输的是差分信号。因此CAN2.0总线规范的物理层规定了CAN总线通信的物理层(PhysicalLayer,CAN收发器)实现要求:

使用双绞线通信,一根为CAN_H,另一根为CAN_L.

总线上的电平有显性电平和隐性电平两种。

总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。

“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)

在一个CAN网络的最远两个节点需要端接120Ω的匹配电阻,才能保证信号传输,进行正常通信;

ISO11898和ISO-11519-2两个不同的CAN总线标准在物理层上规范的通信电平对比如下:

常用的SO11898规范规定:

逻辑“1”时,总线呈现“隐性”状态。VCAN-H和VCAN-L固定在平均电压2.5V,即Vdiff近似为0。

逻辑“0”时,总线呈现“显性”状态。VCAN-H为3.5V,VCAN-L为1.5V,即Vdiff为2V

Tips:ISO11898和ISO-11519-2两个不同的CAN总线标准的差别还包括:

ISO11898是通信速度为5kbps-1Mbps的CAN高速通信标准。

ISO11519是通信速度为125kbps以下的CAN低速通信标准,也就是容错CAN(LSFTCAN)。提供从5Kbit/s到125Kbits/s的波特率。该标准允许在CAN总线连线失败时CAN总线通信得以继续进行。在低速/容错CAN网络,每种设备都有它自己的终端。

电平不同,匹配电阻不同。由于终端的类型不同,因此高速和低速/容错CAN设备不能在同一个网络中使用。

Tips:不仅是ISO,SAE(SocietyofAutomotiveEngineers)等其它的组织、团体、企业也对CAN协议进行了标准化。其他标准介绍下:

Tips:通常使用CAN收发器都是符合ISO11898规范的,比如NXP的TJA1040/2/3/4/5/6以及TJA1050/1/2等;而符合ISO1111519-2规范的CAN收发器使用介绍,只有NXP的TJA1055T;

Tips:两个CAN节点即使时同一个MCU中的两个CAN控制器)间(通信必须使用CAN收发器,并连接匹配的端接电阻,否则无法完成CAN报文传输;

4.CAN2.0总线协议消息报文详解

4.1CAN2.0总线的通信报文帧格式(MessageFrameFormat)

CAN2.0总线有两种不同的CAN帧格式

具有11位标识符的CAN帧称为:标准帧(StandFrame)

具有29位标识符的CAN帧称为:扩展帧(ExtendFrame)

CAN规范2.0B中引入了第二种报文格式--扩展帧,同时兼容CAN规范2.0A的标准帧:

CAN控制器必须完全支持标准帧(收/发),半双工通信

CAN控制器必须支持接收扩展帧

4.2CAN2.0总线的通信报文帧类型(MessageFrameType)

CAN2.0总线规定了4种不同的通信报文帧类型,用于不同的通信目的:

4.3CAN2.0总线的通信报文之标准/扩展数据帧

CAN2.0总线的通信报文的数据帧是使用最大的帧类型,一帧完整的CAN2.0总线数据帧报文包含如下7个场(Field,也有译作域):

帧起始(StartOfFrame)

仲裁场(ArbitrationField)

控制场(ControlField)

数据场(DataField)

CRC场(CRCFiled)

应答场(ACKField)

帧结尾(EndOfFrame)

CAN2.0总线标准数据帧(StandardDataFrame)结构如下:

帧起始:标志数据帧和远程帧的起始,它仅由一个“显性”位构成。

仲裁场:由标识符(ID)和远程发送请求(RTR)位组成。

标识符(Identifier)的长度为11位。这些位以ID-10至ID-0的顺序发送,最低位为ID-0,其中最高7位(ID-10~ID-4)必须不是全“隐性”。

RTR位(RemoteTransmissionRequestBit)在数据帧中,必须是“显性”的,而在远程帧中,RTR位必须是“隐性”的。

控制场:由6位组成,包括两个用于将来扩展的保留位和4位数据长度码

数据场:由数据帧中被发送的数据组成,它可包括0至8个字节,每个字节包括8位,其中首先发送最高有效位(MSB)。

CRC场:包括CRC序列、CRC界定符。

参加CRC校验的位场包括帧起始、仲裁场、控制场、数据场(假若存在)在内的无填充位流。CRC序列后随CRC界定符,它只包括一个“隐性”位。

应答场:为两位长度,包括应答间隙和应答界定符。

在应答场中发送站送出两个“隐性”位。一个正确地接收到有效报文的接收器,在应答间隙期间,通过传送一个“显性”位将此信息报告给发送器(接收器发送“应答”)。所有接收到匹配CRC序列的站,在应答间隙期间通过把“显性”位写入发送器的“隐性”位来报告此信息。应答界定符是应答场的第二位,并且必须是“隐性”位。因此,应答间隙被两个“隐性”位(CRC界定符和应答界定符)包围。

帧结束:每个数据帧和远程帧均是由7个“隐性”位组成的标志序列界定的。

CAN2.0总线扩展数据帧(ExtendDataFrame)结构如下:

相比标准数据帧,扩展数据帧的ID为29-bit,控制场的IDE-bit为1:

Tips:两种帧格式的区别通过“控制场”(ControlField)中的“识别符扩展”位(IDEbit)来实现;

Tips:两种帧格式可出现在同一总线上。

4.4CAN2.0总线的通信报文之标准/扩展远程帧

CAN2.0总线的通信报文的远程帧是用于请求远程CAN节点发送本节点所需的数据,一帧完整的CAN2.0总线远程帧报文包含如下6个场(Field,也有译作域):

与数据帧一样,远程帧也有二种--标准远程帧、扩展远程帧;

除了没有数据场(Datafield),以及RTR位是隐性(“1”)以外,远程帧与数据帧完全一样。

数据帧和远程帧的不同

远程帧的RTR位为隐性位,没有数据段。

没有数据段的数据帧和远程帧可通过RTR位区别开来。

远程帧没有数据段,数据长度码该如何表示?

远程帧的数据长度码以所请求数据帧的数据长度码表示;

4.5CAN2.0总线的通信报文之错误帧

CAN2.0总线协议中规定:当节点检测到一个或多个由CAN标准所定义的错误时,就产生一个错误帧。

错误帧由错误标志和错误界定符构成。

错误标志包括主动错误标志和被动错误标志两种:

主动错误标志:6个位的显性位。

被动错误标志:6个位的隐性位。

错误界定符

错误界定符由8个位的隐性位构成。

4.6CAN2.0总线的通信报文之过载帧

CAN2.0总线协议中规定:过载帧用于在先行和后续的数据帧(或远程帧)之间提供一附加的延时。

过载帧由过载标志和过载界定符构成。

过载标志

6个位的显性位。过载标志的构成与主动错误标志的构成相同。

过载界定符

8个位的隐性位。过载界定符的构成与错误界定符的构成相同。

4.7CAN2.0总线的通信报文之帧间空间

帧间空间是用于分隔数据帧和远程帧。数据帧和远程帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、远程帧、错误帧、过载帧)分开。

过载帧和错误帧前不能插入帧间隔。

帧间空间的组成:

间歇场:3个位的隐性位。

总线空闲场:隐性电平,无长度限制(0亦可)。

本状态下,可视为总线空闲,要发送的节点可开始访问总线。

暂停发送场发送暂时停止):8个位的隐性位。

只在处于被动错误状态的节点刚发送一个消息后的帧间隔中包含。

5.CAN2.0总线协议的总线仲裁(BusArbitration)

总线空闲时,任何节点可以开始发送报文;总线上每条报文都具有唯一的一个11位或29位标识符;报文标识符的值越小,报文具有越高的优先权;

多个节点同时发送时,总线在“仲裁场”进行“逐位仲裁”;传送高优先级报文的节点赢得仲裁,并继续传输报文;失去仲裁的节点在总线空闲时重新传送。

在总线空闲态,最先开始发送消息的单元获得发送权。多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。

具有相同ID的数据帧和远程帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,可继续发送。

标准格式ID与具有相同ID的远程帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR位为显性位的具有优先权,可继续发送。

6.CAN2.0总线协议的位流编码(BitCoding)与位填充(BitStuffing)

各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。接收单元则根据总线上电平的变化进行同步并进行接收工作。

另外,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。

为了保证通信过程中时钟有足够的跳边沿以实现总线各节点重新同步;要求CAN控制器采取“位填充”(BitStuffing):

当发送器检测到位流里有5个连续相同值的位,便会自动在位流里插入一补充位,接收器会自动删除这个补充位。

能够通过总线上的错误标志(ErrorFlag6个连续相同的位)反映发送错误。

在固定的位场中不使用位填充,只对在发送数据帧和远程帧时,SOF~CRC场间的数据进行位填充。

下图为一个具体的位填充实现结果,在发送系列的BIT8和BIT16分别自动加入了一个隐性位(逻辑"1"):

7.CAN2.0总线协议的错误检测机制

为了保证通信的正常,CAN2.0总线协议总线中各节点需要采取以下措施进行错误检测:

监视(对发送位的电平与被监控的总线电平进行比较)

循环冗余检查

位填充

报文格式检查

CAN2.0总线协议的错误检测机制具有以下属性:

检测到所有的全局错误

检测到发送器所有的局部错误

可以检测到报文里多达5个任意分布的错误

检测到报文里长度低于15-bit的突发性错误

检测到报文里任一奇数个错误

对于没有被检测到的错误报文,其剩余的错误可能性概率低于:报文错误率4.7x10-11

7.1CAN2.0总线节点的错误类型

CAN2.0总线协议定义参与通信的CAN节点错误类型如下:

位错误(BitError)

发送的位值和总线监视的位值不相符合时,检测到一个位错误(除仲裁场、应答场外);

填充错误(StuffError)

如果在使用位填充编码的位流中,出现了第六个连续相同的位电平,将检测到一个位填充错误;

形式错误(FormError)

当一个固定形式的位场含有一个或多个非法位时,将检测到一个形式错误;

应答错误(AcknowledgmentError)

在应答间隙(ACKSLOT)所监视的位不为“显性”,则会检测到一个应答错误;

CRC错误(CRCError)

如果接收器的CRC结果和发送器的CRC结果不同,将检测到一个CRC错误。

7.2CAN2.0总线节点的故障界定

CAN2.0总线节点使用两种错误计数器进行故障界定:

发送错误计数(TEC)

接收错误计数(REC)

CAN2.0总线协议规定了12条错误计数规则:

节点发送时产生错误,将导致TEC加8;

节点成功发送1帧报文后,TEC将减1,直到0;

节点接收时检测到错误,将导致REC加8;

节点成功接收1帧报文后,REC将减1,直到0;

。。。

7.3CAN2.0总线节点的状态

根据以上错误检测机制和故障界定方法,CAN2.0总线节点存在以下三种状态:

错误主动(ErrorActive):“错误主动”的节点可以正常地参与总线通讯,并在错误被检测到时发出主动错误标志。

错误被动(ErrorPassive):“错误被动”的节点不允许发送主动错误标志。“错误被动”的单元参与总线通讯,在错误被检测到时只发出被动错误标志。

总线关闭(BusOff):“总线关闭”的单元不允许在总线上有任何的影响(比如,关闭输出驱动器)。

Tips:一个特例:如果CAN总线上只有一个节点,该节点发送数据帧后得不到响应(ACK),其发送计数器TEC最大只能计到128,即该节点只能进入错误被动状态,而不会进入总线关闭状态;

CAN通信节点的状态分为暂时错误(Erroractive和ErrorPassive)和永久性故障(BusOff);

永久性故障节点自动脱离总线,防止网络锁定。

处于暂时错误(Erroractive和ErrorPassive)状态的CAN2.0总线节点,其状态可以根据其发送错误计数器(TEC)和接收错误计数器(REC)值的变化,自动切换,而进入永久性故障(BusOff))状态的节点,必须进入重新初始化才能恢复:

Tips:BusOff恢复需要满足于以下两个条件:

①在busoff发生后,总线上已经检测到了128次11个连续的隐性位(逻辑"1");

②用户程序请求恢复,通常MCU中的CAN控制器都可以支持自动恢复和手动恢复两种方式。CAN总线的busoff恢复需要满足整车的网络管理规范。

8.CAN2.0总线协议的位定时与同步

同步段用于同步各节点,正常情况下跳变沿落在此段内;

传播段用于补偿网络内的传输延时;

采样点时刻读取的电平代表这个位的电平;

8.2CAN2.0总线协议的同步机制

CAN2.0总线协议定义位同步的规则如下:

(1)在总线空闲时,只要检测到一个隐性到显性的边沿,就执行一次硬同步(以该边沿作为同步段)

(2)在总线不空闲时,若边沿落在同步段以外,则按其与同步段之差执行再同步:

再同步情况①:边沿落在同步段以后,则把所差份额加到相位缓冲段1

再同步情况②:边沿落在同步段以前,则从相位缓冲段2减去所差份额

总结

本文详细介绍了BOSCH的CAN2.0总线协议,主要包括CAN总线主要特性、物理层电气特性、帧格式与帧类型、总线仲裁机制、位流编码、位填充、错误检测机制、错误类型、故障界定与节点状态以及位定时与同步等。

除了CAN2.0外,BOSCH还定义了一种与之兼容的CAN-FD总线协议--能够提供更高的速率(数据场通信速率可达8/10Mbit/s)和更大的报文帧有效载荷(支持最大64字节),以满足汽车电子日益发展对ECU间高速通信的需求

THE END
1.汽车CAN总线详解汽车CAN总线详解 汽车CAN总线详解 概述 CAN(Controller Area Network)总线协议是由 BOSCH 发明的?种基于消息?播模式的串?通信总线,它起初?于实现汽车内ECU之间可靠的通信,后因其简单实?可靠等特点,泛应?于?业?动化、船舶、医疗等其它领域。相?于其它?络类型,如局域?(LANhttps://wenku.baidu.com/view/4797fccf6194dd88d0d233d4b14e852458fb3939.html
2.一文读懂汽车CAN总线控制器局域网CAN( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络。是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于汽车业、航空业、工业控制、安全防护等领域。 https://www.dongchedi.com/article/7172192771733029407
3.什么是汽车can总线CAN(Controller Area Network)即控制器局域网,是一种汽车内部各个控制模块之间通信的数据传输技术。它采用分布式多节点系统结构,实现了汽车中各个控制模块之间的数据交换和信息共享。 简单来说,汽车CAN总线就是一种连接汽车各种控制单元的通信协议和数据传输标准。通过这种网络,汽车的发动机、刹车、转向灯等各个部分可以相互https://m.yiche.com/baike/528334.htm
4.汽车CAN总线12篇(全文)汽车CAN总线 第1篇 1 汽车网络总线开发流程 CAN总线技术在车身的广泛应用, 使人们更加关注CAN总线的整体开发流程。车身CAN总线网络的开发流程主要包括系统整体设计和具体实现方法。系统整体网络设计包括了所有要遵循的设计方法。使用网络拓扑形式的设计方法时, 首先要分析CAN总线的系统功能要求、整体结构的设计与仿真, 制https://www.99xueshu.com/w/ikey8k1a8ki8.html
5.一文详解汽车电子CAN总线江阴雨辰互联CAN总线(控制器区域网络)是一个中央网络系统,连接不同的电子控制单元(ECU),车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。 1.CAN总线流行的背景 集中式:CAN总线系统允许对连接到网络的ECU进行集中控制,使控制ECU变得容易。 https://www.yc00.com/web/1701578789a1121517.html
6.汽车CAN总线故障怎么解决?CAN总线故障查找方法汽车CAN总线故障怎么解决?CAN总线故障查找方法 汽车CAN线称为汽车控制器局域网络。CAN总线就相当于汽车的中枢神经系统,是汽车里的一种通讯协议。 打开有驾APP 看高清速腾大图 遇到汽车CAN线故障一般有三种情况,分别是ECU故障、CAN总线损坏故障、CAN总线上的某个节点数据发送异常或者掉线。通过分析来看,ECU和CAN总线如果https://m.yoojia.com/ask/3-9612273633984423761.html
7.汽车CAN总线系统故障诊断技术浅析随着这个能将整个汽车控制系统联系起来统一管理,实现数据共享和相互之间协同工作的汽车CAN 总线系统的广泛应用,CAN 总线系统的故障诊断技术已经成为现代汽车维修技术人员必备的知识,作为现代汽车维修技术人员,必须掌握总线的结构与控制原理,与此同时还必须理解总线网络知识,才能排除汽车上的各种疑难杂症.随着汽车市场的迅猛发https://www.sh-yuy.com/news/3643.html
8.实用的汽车电子CAN总线开发测试方案CAN总线多用于汽车领域,在CAN总线的开发测试阶段,需要对其单节点性能,多节点组网通讯,网络拓扑结构等进行开发测试,需要虚拟、半虚拟、全实物仿真测试平台,并且必须测试各节点是否符合ISO11898中规定的错误响应机制等,所以CAN总线的开发需要专业的开发测试工具,并且在生产阶段也需要一批简单易用的生产线测试工具。CAN总线开发https://www.zlg.cn/can/article/detail/id/764.html
9.供应CAN协议盒,汽车canbus协议盒,汽车总线协议解码,2013款天籁主营产品:其他汽车影音、诊断仪 -- 供应CAN协议盒,汽车canbus协议盒,汽车总线协议解码,2013款天籁专用 产品标签|CAN协议盒总线协议解码canbus协议盒 <上一个 价格 订货量 ¥65.00 100 - 499 ¥60.00 500 - 999 https://binarytek.cn.china.cn/supply/3092307123.html
10.车联网安全入门一:了解CAN总线及环境模拟准备打工了,工作内容和车联网安全相关,本来想着和app分析有较大关系,但是还涉及到很多关于汽车渗透测试相关的知识,由于之前并没有接触过,就借此机会和大家来学习一下。 ## CAN基础知识 ### CAN(Controller Area Network) 上图是CAN总线的拓扑结构,其中左边是高速CAN总线的(典型应用包括车辆电子系统中的发动机控制、https://xz.aliyun.com/t/14262