CAN总线学习笔记:CAN总线的相关概念编程 在这信息爆炸的年代,学习同样新的知识,尤为是IT技术的学习,网络是必不可少的。一阵狂搜事后,发现基于CAN总线的介绍确实很多,可是大多好像都雷同了,也许是不断转贴的结果吧。并且这些知识点也都太零散了,让人看了,尤为是初学者有点找不着北的感受。因此,本着谦虚好学脚踏实地的菜鸟精神,决定把网上搜的,书上看的,再添油加醋的作一番比较系统的整理。算是为学习CAN总线理清思路,快速上手打基础吧。安全 1、什么是CAN总线?网络 CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最普遍的现场总线之一。最初,CAN被设计做为汽车环境中的微控制器通信,在车载各电子控制装置ECU之间交换信息,造成汽车电子控制网络。好比:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。dom 一个由CAN 总线构成的单一网络中,理论上能够挂接无数个节点。实际应用中,节点数目受网络硬件的电气特性所限制。例如,当使用Philips P82C250做为CAN收发器时,同一网络中容许挂接110个节点。CAN 可提供高达1Mbit/s的数据传输速率,这使实时控制变得很是容易。另外,硬件的错误检定特性也加强了CAN的抗电磁干扰能力。模块化 2、CAN 总线是如何发展的?函数 CAN最初出如今80年代末的汽车工业中,由德国Bosch公司最早提出。当时,因为消费者对于汽车功能的要求愈来愈多,而这些功能的实现大可能是基于电子操做的,这就使得电子装置之间的通信愈来愈复杂,同时意味着须要更多的链接信号线。提出CAN总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通信,减小不断增长的信号线。因而,他们设计了一个单一的网络总线,全部的外围器件能够被挂接在该总线上。1993年,CAN 已成为国际标准ISO11898(高速应用)和ISO11519(低速应用)。性能 CAN是一种多主方式的串行通信总线,基本设计规范要求有高的位速率,高抗电磁干扰性,并且可以检测出产生的任何错误。当信号传输距离达到10Km时,CAN 仍可提供高达50Kbit/s的数据传输速率信盈达嵌入式企鹅要妖气呜呜吧久零就要。学习 因为CAN总线具备很高的实时性能,所以,CAN已经在汽车工业、航空工业、工业控制、安全防御等领域中获得了普遍应用。编码 3、CAN 总线是如何工做的?设计 CAN通信协议主要描述设备之间的信息传递方式。CAN层的定义与开放系统互连模型(OSI)一致。每一层与另外一设备上相同的那一层通信。实际的通信发生在每一设备上相邻的两层,而设备只经过模型物理层的物理介质互连。CAN的规范定义了模型的最下面两层:数据链路层和物理层。下表中展现了OSI开放式互连模型的各层。应用层协议能够由CAN用户定义成适合特别工业领域的任何方案。已在工业控制和制造业领域获得普遍应用的标准是DeviceNet,这是为PLC和智能传感器设计的。在汽车工业,许多制造商都应用他们本身的标准。
7 |
应用层 |
最高层。用户、软件、网络终端等之间用来进行信息交换。如:DeviceNet |
6 |
表示层 |
将两个应用不一样数据格式的系统信息转化为能共同理解的格式 |
5 |
会话层 |
依靠低层的通讯功能来进行数据的有效传递。 |
4 |
传输层 |
两通信节点之间数据传输控制。操做如:数据重发,数据错误修复 |
3 |
网络层 |
规定了网络链接的创建、维持和拆除的协议。如:路由和寻址 |
2 |
数据链路层 |
规定了在介质上传输的数据位的排列和组织。如:数据校验和帧结构 |
1 |
物理层 |
规定通信介质的物理特性。如:电气特性和信号交换的解释 |
表1 OSI开放系统互连模型 CAN可以使用多种物理介质,例如双绞线、光纤等。最经常使用的就是双绞线。信号使用差分电压传送,两条信号线被称为“CAN_H”和“CAN_L”,静态时均是2.5V左右,此时状态表示为逻辑“1”,也能够叫作“隐性”。用CAN_H比CAN_L高表示逻辑“0”,称为“显形”,此时,一般电压值为:CAN_H = 3.5V 和CAN_L = 1.5V。 4、CAN 有哪些特性? CAN具备十分优越的特色,令人们乐于选择。这些特性包括: 一、低成本; 二、极高的总线利用率; 三、很远的数据传输距离(长达10Km); 四、高速的数据传输速率(高达1Mbit/s); 五、可根据报文的ID决定接收或屏蔽该报文; 六、可靠的错误处理和检错机制; 七、发送的信息遭到破坏后,可自动重发; 八、节点在错误严重的状况下具备自动退出总线的功能; 九、报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。 5、Philips制造的CAN芯片有哪些?
类别 |
型号 |
备注 |
CAN微控制器 |
P87C591 |
替代P87C592 |
CAN独立控制器 |
SJA1000 |
替代82C200 |
CAN收发器 |
PCA82C250 |
高速CAN收发器 |
|
PCA82C251 |
高速CAN收发器 |
|
PCA82C252 |
容错CAN收发器 |
|
TJA1040 |
高速CAN收发器 |
|
TJA1041 |
高速CAN收发器 |
|
TJA1050 |
高速CAN收发器 |
|
TJA1053 |
容错CAN收发器 |
|
TJA1054 |
容错CAN收发器 |
LIN收发器 |
TJA1020 |
LIN收发器 |
表2 CAN芯片一览表 6、CAN总线如何进行位仲裁? CSMA/CD是“载波侦听多路访问/冲突检测”(Carrier Sense Multiple Access with Collision Detect)的缩写。 利用CSMA访问总线,可对总线上信号进行检测,只有当总线处于空闲状态时,才容许发送。利用这种方法,能够容许多个节点挂接到同一网络上。当检测到一个冲突位时,全部节点从新回到‘监听’总线状态,直到该冲突时间事后,才开始发送。在总线超载的状况下,这种技术可能会形成发送信号通过许多延迟。为了不发送时延,可利用CSMA/CD方式访问总线。当总线上有两个节点同时进行发送时,必须经过“无损的逐位仲裁”方法来使有最高优先权的的报文优先发送。在CAN总线上发送的每一条报文都具备惟一的一个11位或29位数字的ID。CAN总线状态取决于二进制数‘0’而不是‘1’,因此ID号越小,则该报文拥有越高的优先权。所以一个为全‘0’标志符的报文具备总线上的最高级优先权。可用另外的方法来解释:在消息冲突的位置,第一个节点发送0而另外的节点发送1,那么发送0的节点将取得总线的控制权,而且可以成功的发送出它的信息。 7、CAN的高层协议 CAN的高层协议(也可理解为应用层协议)是一种在现有的底层协议(物理层和数据链路层)之上实现的协议。高层协议是在CAN规范的基础上发展起来的应用层。许多系统(像汽车工业)中,能够特别制定一个合适的应用层,但对于许多的行业来讲,这种方法是不经济的。一些组织已经研究并开放了应用层标准,以使系统的综合应用变得十分容易。 一些可以使用的CAN高层协议有: 一、制定组织主要高层协议 二、CiA CAL协议 三、CiA CANOpen协议 四、ODVA DeviceNet 协议 五、Honeywell SDS 协议 六、Kvaser CANKingdom协议 8、什么是标准格式CAN和扩展格式CAN? 标准CAN的标志符长度是11位,而扩展格式CAN的标志符长度可达29位。CAN 协议的2.0A版本规定CAN控制器必须有一个11位的标志符。同时,在2.0B版本中规定,CAN控制器的标志符长度能够是11位或29位。遵循CAN2.0B协议的CAN控制器能够发送和接收11位标识符的标准格式报文或29位标识符的扩展格式报文。若是禁止CAN2.0B,则CAN 控制器只能发送和接收11位标识符的标准格式报文,而忽略扩展格式的报文结构,但不会出现错误。 目前,Philips公司主要推广的CAN独立控制器均支持CAN2.0B协议,即支持29位标识符的扩展格式报文结构。 9、CAN的报文格式: (关于这部份内容,对于我下一步要进行编程实验控制CAN总线是很重要的一个知识点。很郁闷的是搜了老半天只看见有文字叙述这部份内容的,不只说得不系统完整,并且远没有贴图说明来的具体直观。不过还好,搜到了一份E文版的CAN总线资料,再把这个资料详细看了下,再作了整理,仍是用图来讲明CAN传输的报文格式比较容易理解。老外写的东西确实比国内的好,这个不是我吹出来的,有兴趣下了看看就知道了,见附件下载。) CAN通讯是一种点对多点的传输协议,不是基于地址的传统的点对点传输协议。当一个点传输数据时,总线上的其它点均可觉得接受方,它们能够经过ID来做出对总线上传送数据的处理(接收或者丢弃)。而且当数据被正确接收到之后,接收方便会做出应答响应。CAN协议还有一个很实用的功能,就是总线上的任一个节点能够请求其它节点向其发送数据,这被称做远程发送请求(RTR)。除此之外,CAN协议还有一个优势,当总线新加入一个节点进行通讯时无需更改原有的程序,新节点只要经过ID就能够知道是接收仍是丢弃数据。 CAN协议定义了四种不一样的帧。 一、数据帧,这个帧被用于当一个节点把信息传送给系统的任何其它节点。数据帧由7个不一样的位场组成,即帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结束。 二、远程帧,此帧是基于数据帧格式,只要把RTR位设置成远程发送请求(Remote Transmit Request),而且没有数据场。总线上发送此帧后,表示请求接收与该帧ID相符的数据帧。远程帧由6个不一样的位场组成,即帧起始、仲裁场、控制场、CRC场、应答场、帧结束。 三、错误帧,任何单元监测到错误时就发送错误帧。错误帧由两个不一样的场组成。第一个场是错误标志,用作为不一样站提供错误标志的叠加;第二个场是错误界定符。 四、超载帧,节点须要增长时间来处理接收到的数据时便发送过载帧。超载帧包括两个位场:超载标志和超载界定符。  图1 帧起始位 CAN总线传输的起始帧如图1。帧起始标志数据帧或远程帧的起始,由一个单独的“显性”位(0)组成。由控制芯片完成。  图2 标准数据帧格式  图3 扩展数据帧格式 由图2和图3能够看到数据帧的两种不一样格式,两种格式的差异只是它们的ID位数不一样。 一、帧起始。 二、仲裁场,仲裁场包括标识符和远程发送请求位(RTR)。 对于CAN2.0A标准,标识符的长度为11位。RTR位在数据帧中必须是显性位,而在远程帧必须为隐性位。 对于CAN2.0,标准格式和扩展格式的仲裁场不一样。在标准格式中,仲裁场由11位标识符和远程发送请求位组成。在扩展格式中,仲裁场由29位标识符和替代远程请求位(SRR) 、标志位(IDE)和远程发送请求位组成。 仲裁场的做用之一是说明数据帧或远程帧发送目的地;之二是指出是数据帧仍是远程帧。 三、控制场,控制场由6个位组成,说明数据帧中有效数据的长度。标准帧的最高位是IDE位,扩展帧的最高位是保留位RB1,它们的次高位都是保留位RB0。低四位是DLC(Data Length Code)位,标识传送的数据字节数(0-8字节)。 四、数据场,数据场由数据帧中的发送数据组成。它能够为0-8个字节。 五、CRC场,CRC场包括CRC序列,这部分由SJA1000控制芯片完成。 六、应答场,应答场长度为两个位,包括应答间隙和应答界定符。由SJA1000控制芯片自动完成。 七、帧结束,每个数据帧和远程帧均由一标志序列界定,这个标志序列由7个“隐性”位组成。这部分由SJA1000控制芯片自动完成。 仲裁场、控制场、数据场由软件编程配置SJA1000完成;帧起始、CRC场、应答场、帧结束由CAN总线控制芯片SJA1000自动完成。 10、CAN的数据错误检测: 不一样于其它总线,CAN协议不能使用应答信息。事实上,它能够将发生的任何错误用信号发出。CAN协议可以使用五种检查错误的方法,其中前三种为基于报文内容检查。 一、循环冗余检查(CRC) 在一帧报文中加入冗余检查位可保证报文正确。接收站经过CRC可判断报文是否有错。 二、帧检查 这种方法经过位场检查帧的格式和大小来肯定报文的正确性,用于检查格式上的错误。 三、应答错误 如前所述,被接收到的帧由接收站经过明确的应答来确认。若是发送站未收到应答,那么代表接收站发现帧中有错误,也就是说,ACK场已损坏或网络中的报文无站接收。CAN协议也可经过位检查的方法探测错误。 四、总线检测 有时,CAN中的一个节点可监测本身发出的信号。所以,发送报文的站能够观测总线电平并探测发送位和接收位的差别。 五、位填充 一帧报文中的每一位都由不归零码表示,可保证位编码的最大效率。然而,若是在一帧报文中有太多相同电平的位,就有可能失去同步。为保证同步,同步沿用位填充产生。在五个生。在五个连续相等位后,发送站自动插入一个与之互补的补码位;接收时,这个填充位被自动丢掉。例如,五个连续的低电平位后,CAN自动插入一个高电平位。CAN经过这种编码规则检查错误,若是在一帧报文中有6个相同位,CAN就知道发生了错误。 若是至少有一个站经过以上方法探测到一个或多个错误,它将发送出错标志终止当前的发送。这能够阻止其它站接收错误的报文,并保证网络上报文的一致性。当大量发送数据被终止后,发送站会自动地从新发送数据。做为规则,在探测到错误后23个位周期内从新开始发送。在特殊场合,系统的恢复时间为31个位周期。 但这种方法存在一个问题,即一个发生错误的站将致使全部数据被终止,其中也包括正确的数据。所以,若是不采起自监测措施,总线系统应采用模块化设计。为此,CAN协议提供一种将偶然错误从永久错误和局部站失败中区别出来的办法。这种方法能够经过对出错站统计评估来肯定一个站自己的错误并进入一种不会对其它站产生不良影响的运行方法来实现,即站能够经过关闭本身来阻止正常数据因被错误地当成不正确的数据而被终止。 六、CAN可靠性 为防止汽车在使用寿命期内因为数据交换错误而对司机形成危险,汽车的安全系统要求数据传输具备较高的安全性。若是数据传输的可靠性足够高,或者残留下来的数据错误足够低的话,这一目标不难实现。从总线系统数据的角度看,可靠性能够理解为,对传输过程产生的数据错误的识别能力。 残余数据错误的几率能够经过对数据传输可靠性的统计测量得到。它描述了传送数据被破坏和这种破坏不能被探测出来的几率。残余数据错误几率必须很是小,使其在系统整个寿命周期内,按平均统计时几乎检测不到。计算残余错误几率要求可以对数据错误进行分类 ,而且数据传输路径可由一模型描述。若是要肯定CAN的残余错误几率,咱们可将残留错误的几率做为具备80~90位的报文传送时位错误几率的函数,并假定这个系统中有5~10个站,而且错误率为1/1000,那么最大位错误几率为10—13数量级。例如,CAN网络的数据传输率最大为1Mbps,若是数据传输能力仅使用50%,那么对于一个工做寿命4000小时、平均报文长度为 80位的系统,所传送的数据总量为9×1010。在系统运行寿命期内,不可检测的传输错误的统计平均小于10—2量级。换句话说,一个系统按每一年365 天,天天工做8小时,每秒错误率为0. 7计算,那么按统计平均,每1000年才会发生一个不可检测的错误。 |