C/C++教程

控制器局域网CAN

本文主要是介绍控制器局域网CAN,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

        CAN2.0 技 术 规 范 是 在1991 年 制 定 并 发 布的,它包括AB两部分。
        2.0A给出了曾在CAN技术规范1.2版本中定义的CAN报文格式(标准格式),而2.0B则给出了
标准的和扩展的两种格式。
        ISO 11519-2 (未来的ISO11898-3)道路交通运载工具-数字信息交换-低速通讯控制器局域
(CAN)国际标准。
        ISO 11898道路交通运载工具-数字信息交换-高速通讯控制器局域网(CAN)国际标准。

        SAE J2284仅相当于将ISO 11898的位速率设定为500Kb/s进行通讯应用时的特例。SAE J1939是供卡车及其拖车、大客车使用的通信标准,其数据传输速率为250kb/s。其消息帧采用29位标识符的扩展帧。
        ISO15765 基于CAN的故障针对标准。IDB-C(Intelligent Data Bus-CAN)车载多媒体网络总线,其消息帧格式采用扩展帧格式。

        在欧洲,作为汽车动力系统和车身电子系统最主要的应用网络, CAN已经被汽车制
造商广泛接受。以往美国汽车制造商广泛使用J1850来构建车身网络,但目前各大汽车制造商已经
投入到CAN总线的开发之中,而J1850也正被CAN所逐步取代。
        在远东,日本和韩国汽车制造商也正在积极跟进。

 

        据 统 计 , 1998年全球共售出97百万个CAN节点,其中80%在欧洲使用,而德国又占了
欧洲使用量的80%。所售出的节点中80%应用于汽车网络。
        2002年,全球售出将近1亿8千万个CAN节点。
        2005年, CAN估计已占据整个汽车网络协议的63%CAN总线以其较高的可靠性和较低的价格优势,仍将占有汽车网络的较大份额。

 

 

CAN总线的基本特点:
(1)总线访问采用基于优先权的多主方式;
(2)非破坏性的基于线路竞争的仲裁机制;
(3)利用接收滤波对帧实现了多点传送;
(4)支持远程数据请求;
(5)配置灵活;

(6)数据在整个系统范围内具有一致性;
(7)有检错和出错通报功能
(8)仲裁失败、或传输期间被故障损坏了的帧能自动重发;
(9)能区分节点的临时故障和永久性故障并能自动断开故障节点。

帧的概念和定义

总线访问方法
总线空闲时,任何节点都可以开始发送帧。如果两个和两个以上的节点同时开始发送帧,由此引起的总线访问冲突是利用基于线路竞争的仲裁对标识符进行判别来解决的。仲裁机制可以保证既不会丢失信息,也不会浪费时间。优先权最高的帧的发送器将获得访问总线的权利。

信息路由
CAN系统中,节点不会用到任何有关系统配置(比如节点地址)的信息。接收器对信息的接受或拒收是建立在一种称为帧接收滤波的处理方法上的。该处理方法能判断出接收到的信息是否和接收器有关联。所以接收器没有必要辨别出谁是信息的发送器,反过来也是如此。

系统灵活性
CAN网络中增添节点时,如果要增添的节点不是任何数据帧的发送器、或者该节点根本不需要接收额外追加发送的数据,则网络中所有节点均不用作任何软件或硬件方面的调整。

远程数据请求
通过送出一个远程帧,需要数据的节点可以请求另外一个节点向自己发送相应的数据帧。 该数据帧的标识符被指定为和相应远程帧的相同。

错误检测
有下列几种检测错误的措施:
(1)发送/监听的位检测;
(2)15位循环冗余码校验;
(3)填充宽度为5的变值位填充;
(4)帧格式校验。

出错通报和恢复时间
任何正在发送数据的节点和任何正在正常接收数据的节点都能对出现了错误的帧作出标记。这些帧会立即被放弃,此后,遵循系统所采取的恢复计时机制,它们将被适时重发。从检测出错误开始、到可以着手发送下一个帧为止的这段时间称为恢复时间,此后如果再未出错的话,恢复时间一般占1723个位时间(在总线遭受严重干扰的场合,最多占29个位时间)

自动重发
仲裁失败或在发送过程中被错误干扰了的帧将会在下次总线空闲期间被自动重发。要被重发的帧处理起来与别的帧完全一样。这意味着,为了获得对总线进行访问的权利,它还是要参与仲裁过程。

故障界定
CAN节点能够区分出短期干扰和永久性故障。出故障的节点会被断开。 断开意味着该节点脱离了与总线逻辑上的连接,因此它既无法发送、也无法收到任何帧。错误-激活处于错误-激活状态的节点可以正常参与总线通信活动,而且可以在检测到错误时送出活动错误标志。活动错误标志由连续的6个显性位构成,它不受位填充规则及正常帧所具有的各种规定的约束。

错误-认可
处于错误-认可状态的节点不能送出活动错误标志。它参与总线通信活动,但在检测到错误时
送出的是认可错误标志。认可错误标志由连续的6个隐性位构成。发送完毕后仍处于错误-认可状态,直至下一次发送初始化。离线节点因故障界定实体的要求而从总线上断开后就进入离线状态。处于离线状态的节点既无法发送、也无法接收任何帧。只有用户请求才能使该节点结束离线状态。

CAN总线传输距离及其位速率

 

CAN的分层结构及功能

 

媒体访问控制子层(MAC)的功能

 

CAN的标准消息帧

 

CAN的扩展消息帧

 

非破坏性按位仲裁
CAN总线上的数据采用非归零( NRZ)编码,数据位可以具有两种互补的逻辑值, 显性电平用
逻辑“0”表示, 隐性电平用逻辑“1”表示。总线按照线与机制对其上任一潜在的冲突进行仲裁,显性电平覆盖隐性电平。发送隐性电平的竞争节点和发送显性电平的监听节点将失去总线访问权而变为接收节点。
CAN总线上发送的每一条报文都具有唯一的一个11位或29位数字的IDCAN 总线状态取决于
二进制数“0”而不是“1”,所以ID号越小,则该报文拥有越高的优先权。

 

 

位填充
CAN总线采用多种抗干扰措施以减少消息帧在传送过程中的出错,位填充技术是其中很
重要的一种。在CAN的消息帧中,帧起始、仲裁场、控制场、数据场和CRC序列帧段均以位填充方法进行编码。数据帧或远程帧的其余位场( CRC界定符、 ACK场和帧结束)为固定形式,不进
行位填充。当发送器在发送位流中检测到5个极性相同的连续位时,它在实际发送时,自动插入一个补码位。

位填充过程

 

CRC校验
 

CRC场,包括CRC序列和CRC界定符。用于检验的CRC序列特别适用于位数小于127位帧的循环冗余码校验驱动。为实现CRC计算,被除的多项式被定义为这样一个多项式,其系数由帧起始、仲裁场、控制场、数据场和15位系数为0的解除填充的位流给定。此多项式除以下列生成多项式 (系数按模-2计算)
X15+X14+X10+X8+X7+X4+X3+1
相除的余数即为发送至总线的CRC序列。接收器接收数据时,按照同样的规则对所接收到的数据进行CRC计算,然后把两个CRC序列进行比较,以判定数据是否出错。

 

CAN消息帧的分类
CAN的消息帧根据用途分为四种不同类型:
数据帧用于传送数据;
远程帧用于请求发送数据;
错误帧用于标识探测到的错误;
超载帧用于延迟下一个信息帧的发送。

 

数据帧
 

 

帧起始
标志数据帧和远程帧的开始,它仅由一个显性位构成,只有在总线处于空闲状态时,才允许开始发送。所有节点必须同步于首先开始发送的那个节点的帧起始前沿。

 

仲裁场
 

RTR位(远程传输请求位):在数据帧中, RTR位必须是显性电平,而在远程帧中, RTR位必须是隐性电平。
SRR位(替代传输请求位):在扩展格式中始终为隐性位。
IDE位(标识符扩展位): IDE位对于扩展格式属于仲裁场;对于标准格式属于控制场。 IDE在标准格式中为显性电平,而在扩展格式中为隐性电平。

 

控制场
 

6位组成。在标准格式中,一个信息帧中包括DLC、发送显性电平的IDE位和保留位r0。在
扩展格式中,一个信息帧包括DLC和两个保留位r1r0,这两个位必须发送显性电平。
DLC(数据长度码):数据场的字节数目由数据长度码给出。数据长度码为4位,在控制场中
被发送。

数据场和CRC场:数据场由数据帧中被发送的数据组成,可包括08个字节。

CRC场包括CRC序列和CRC界定符。

应答场
 

应当场包括两位,即应答间隙和应答界定符。在应答场中发送节点送出两个隐性位。一个正
确接收到有效报文的接收器,在应答间隙期间,将此信息通过传送一个显性位报告给发送器。
此时,总线被接收节点强置为显性状态,发送节点检测到这个状态就知道传送的数据至少已经被
一个节点正确接收。应答界定符是应答场的第二位,并且必须是隐性位。

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

 

 

 

 

 

远程帧
 

接收数据的节点可以通过发送远程帧要求源节点发送数据。它由6个域组成:帧起始、仲裁场、控制场、 CRC场、应答场和帧结束。它没有数据场,其RTR位为隐性电平。

 

出错帧(1)
 

 

出错帧由错误标志和错误界定符两个域组成。

出错帧(2)
接收节点发现总线上的报文有错误时,将自动发出活动错误标志,它是6个连续的显性位。由于其格式违背了位填充规则,其他节点检测到错误条件后发送错误标志,因此这个
显性位的序列就是各节点发送的错误标志的叠加的结果,可能由612显性位组成。检测到错误条件的错误认可节点通过发送认可错误标志来指示错误,它由6个连续的
隐性位组成。错误界定符由8隐性位组成。

超载帧(1)
 

超载帧包括两个位场:超载标志和超载界定符。超载标志由6显性位组成,超载界定符由8个连续的隐性位组成。

 

超载帧(2)
导致发送超载标志的超载条件类型:
(1)接收器内部原因,要求延迟下一个数据帧或远程帧;
(2)在间歇场的第一和第二位上检测到显性位;
(3)如果在错误界定符和过载界定符的第八位(最后一位)采样到一个显性位,节点就会发一个过载帧而不是错误帧。
由于过载标志的格式破坏了间隙场的固定格式,因此,所有其它节点检测到过载帧后,也同时发出过载标志。

 

帧间空间(1)
数据帧及远程帧与其前面帧的分隔是通过帧间空间来实现的,无论前面是何种类型的帧(数据帧、远程帧、出错帧或超载帧)。而超载帧和出错帧的前面不用帧间空间分隔,多个超载帧之间也不用帧间空间进行分隔。

帧间空间(2)
帧间空间由间歇和总线空闲,及暂停发送等位场构成,其中暂停发送只用于错误认可状态下的节点或刚完成接收动作的节点。

 

帧间空间(3)
间歇由3个隐性位构成。间歇期间,不允许任何节点发送数据帧或远程帧。但可以发送超载信息。总线空闲时间长短不限。总线一经辨认处于空闲状态,则任何节点都可以访问总线来传送信息。因另一帧正在传送而延期发送的帧是从间歇之后的第一位开始送出的。通过对总线进行检测,出现在总线空闲期间的显性位将被认为是帧起始。暂停发送是指处于错误认可状态的节点完成其发送动作后,在被允许发送下一帧以前,它要在间歇之后送出8隐性位。如果与此同时一帧报文由另一个节点开始发送,此节点将会变成正被发
 

位定时(1)
CAN总线的数据传输速率最高可达1Mb/s,通常用石英晶振体作为时钟发生器。但网络中的晶振的频率不是绝对稳定的,温度、电压以及器件的异常都会导致微小的差别,但只要将其稳定在振荡器容差范围之内,总线上的节点会通过再同步进行弥补。


标称位速率
显示了理想发送器在不经再同步化处理的情况下每秒钟送出的位数。

位定时(2)
标称位时间
标称位时间=1/标称位速率。
标称位时间可划分成几个互不重叠的分立时段。这些区段组成位时间的情形如图所示:
同步段(Sync_Seg);传播时间段(Prop_Seg);相位缓冲段1(Phase_Seg1);相位缓冲段2(Phase_Seg2)。

位定时(3)
SYNC_SEG
位时间的这一段用来使总线上的各个ECU同步。预计在该段内会出现一个跳变沿。
PROP_SEG
位时间的这一段用来对出现在网络内部的物理延迟时间进行补偿。该延迟时间由信号在总线上的传播时间和ECU内部的延迟时间组成。
Phase_Seg 1Phase_Seg 2
位时间的这两段用来补偿跳变沿的相位误差。这两段可以被再同步处理延长或缩短。

位定时(4)
采样点
采样点是读取总线电平并将它转化为对应位值的时刻。在该点上,仲裁电平被读取,并被理解为各位的数值,它位于Phase_Seg1的结尾。
信息处理时间
信息处理时间是从采样点开始留出的一段用于计算后续位电平的时间。

时间份额
时间份额是从振荡器周期派生出来的一种定长时间单元。它存在一个可编程的分度值,它们都是整数,最小范围为132。从最小时间份额开始,时间份额的长
度可以是时间份额=m×最小时间份额。其中m为分度值。

时段长度
Sync_Seg为一个时间份额长度。
Prop_Seg可设定为18个时间份额长度。
Phase_Seg1可设定为18个时间份额长度。
Phase_Seg2长度为Phase_Seg1和信息处理时间中的最大值。
信息处理时间小于或等于2个时间份额长度。一个位时间内时间份额的总数目起码要做到可以在825这一范围内进行选择。必须协调不同ECU中振荡器的频率,使其产生一个能在全系统内有效的时间份额。

同步的作用
总线上绝大多数的同步都是由仲裁引起的,总线上的所有节点都要同步于最先开始发送的节点,但是由于总线延迟,节点的同步不可能达到理想的要求。如果最先发送的节点没有赢得总线仲裁,那么所有的接收节点都要重新同步于获得总线仲裁的节点。

同步规则
1. 一个位时间内仅允许一种同步。
2. 只要在先前采样点上监测到的数值与总线数值不同,沿过后立即有一个沿用于同步。
3. 总线空闲期间,只要出现从隐性显性的跳变沿,就执行硬同步操作。
4. 其它情况下,所有从隐性显性的跳变沿都将用于再同步处理。例外:对于具有正相位误差的跳变沿,只要从隐性显性的跳变沿用于再同步处理,发送显性位的节点将不执行再同步处理。

硬同步
经过一次硬同步处理后,内部位时间从同步段重新开始。因此,硬同步强迫由于硬同步引起的沿处于重新开始的位时间同步段之内。
在帧起始时,总线会进行一次硬同步。

再同步
当引发再同步的跳变沿的相位误差小于或等于再同步跳变宽度的预定值时,再同步会通过位时间的延长或缩短以使采样点被调整到正确的位置。
当相位误差大于再同步跳变宽度
——且相位误差e为正时,则Phase_Seg 1被延长的时间为再同步跳变宽度;
——且相位误差e为负时,则Phase_Seg 2被缩短的时间为再同步跳变宽度。

再同步跳变宽度
再 同 步 会 导 致 Phase_Seg1 延 长 或Phase_Seg2缩短。再同步跳变宽度规定了相缓冲段的延长量和缩短量的上限。再同步跳变宽度可以从1min(4,Phase_Seg1)个时间份额内选择。
时钟信息可由一位数值到另一位数值的跳转获得。由于位填充,总线上出现连续相同位的位数的最大值是确定的,这提供了在帧期间重新将总线单元同步于位流的可能性。可被用于再同步的跳变之间的最大长度位29个位时间。

同步沿的相位误差
一 个 跳 变 沿 的 相 位 误 差 e 由 该 沿 与Sync_Seg的相对位置确定,度量单位为时间份额。定义相位误差的符号如下:
e0,跳变沿位于Sync_Seg之内;
e > 0,跳变沿位于采样点之前;
e < 0,跳变沿位于前一位采样点之后。

 

CAN同步
 

 

物理层
 

 

总线连接
总线两端均串有一个负载电阻,这些电阻用来抑制反射作用。

总线电平

 

终端电阻
所用终端电阻必须仅限于表中规定的范围。


 

故障界定目标
故障界定的目标是实现数据传输系统即使在节点发生故障的情况下也能维持很高的可用性。因此故障界定策略必须证明
在以下方面是可靠的:
——区分短期故障和永久性故障;
——找到并断开故障节点。

 

故障界定策略
每个节点都有两种计数以便故障界定:发送错误计数和接收错误计数。前者记录发送帧期间发生的错误数目,后者则记录接收帧期间发生的错误数目。如果帧被正确发送或接收,计数就减少。发生错误引起的计数增加量要比没发生错误引起的计数减少量来得多。计数增量与减量之比取决于总线上可承受的出错帧与正确帧之比。在任何时刻,错误计数的情况都反映着在此以前干扰出现的相对频繁程度。通过预定计数值,可以调整节点针对错误的行为。可以调整的范围是从禁发出错标志以取消送出帧的操
 

错误处理
CAN定义了五种互不包含的错误。
1、 位错误:向总线送出一位的某个节点同时也在监视总线,当监视到总线的位数值与送出的位数值不同时,则在该位时刻检测到一个位错误。例外情况是,在仲裁场的填充位流期间或应答间隙送出隐性位而检测到显性位时,不视为位错误。送出认可错误标志的发送器,在检测到显性位时,也不视为位错误。
2、填充错误:在应使用位填充方法进行编码的报文中,出现了6个连续相同的位电平时,将检出一个位填充错误。

3CRC错误: CRC序列是由发送器CRC计算的结果组成的。接收器以与发送器相同的方法计算CRC。如果计算结果与接收到的CRC序列不同,则检出一个CRC错误。
4、形式错误:当固定形式的位场出现一个或多个非法位时,则检出一个形式错误。
5、应答错误:在应答间隙,发送器未检测到显性时,则由它检出一个应答错误。

检测到出错条件的节点通过发送错误标志进行标定。当任何节点检出位错误、填充错误、形式错误或应答错误时,由该节点在下一位开始发送出错标志。当检测到CRC错误时,出错标志在应答界定符后面那一位开始发送,除非其它出错条件的错误标志已经开始发送。

对故障界定而言,一个节点,根据错误计数结果的不同,可以处于以下3种状态之一:
——“错误激活
——“错误认可
——“离线

故障界定规则
a)接收器检测到一个错误时,如果该错误不是发送活动错误标志或超载标志期间的位错误,接收错误计数器将加1
b)接收器在送出出错标志后检测到第一个显性位时,接收错误计数器将加8
c)发送器送出一个出错标志时,发送错误计数器将加8
d)如果发送器在发送活动错误标志或超载标志期间检测到一个位错误,发送错误计数器将加8

e) 如果接收器在发送活动错误标志或超载标志期间检测到一个位错误,接收错误计数器将加8。
f) 任何节点在送出一个活动错误标志、或认可错误标志、或超载标志之后,至多允许连续出现7个显性位。在检测到一连串显性位中的第14个,或检测到认可错误标志随后的一连串显性位中的第8个之后,每个发送器的发送错误计数器加8,同时每个接收器的接收错误计数器也加8。

g) 成功送出一帧(收到应答,并且直到送完帧结束都没检测出错误)之后,发送错误计数器减1,除非它原先就等于0
h) 成功接收一帧(接收过程直到应答间隙都没出错,并且顺利送出应答位)之后,如果接收错误计数结果原来在1127之间,计数器减1。如果计数结果原来是0,它依然为0。如果计数
结果原来大于127,则将计数器设为119127之间的某个值。

i) 如果某个节点的发送错误计数器或接收错误计数器超过了127,监控器就请求MAC子层让该节点进入错误认可状态。
j)当发送错误计数器值大于或等于256时,该节点处于总线关闭状态。
k) 错误认可状态下的节点的发送错误计数 器 及 接 收 错 误 计 数 器 均 小 于 或 等 于127时,该节点就回到错误激活状态。

l) 在总线上检测到128次出现11个连续隐性位之后, 总线关闭的节点可以变成错误激活,它的两个错误计数器值也被设置为0
注意:错误计数器值大于96时表明总线被严重干扰,最好能够预先采取措施测试这个条件。若启动/睡眠期间,只有一个节点在线,其发送报文将得不到应答,并检测到错误且重复发
送报文,由此,该节点变为错误认可,但不会成为总线关闭

 

节点状态转换图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

这篇关于控制器局域网CAN的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!