分享

CAN基本知识(三)

 lianteng 2011-06-19
CAN基本知识(三)(2010-04-04 15:27:03)

一、BasicCAN and PeliCAN

   CAN 以两种形式存在,一种是具有11位ID标识符的BasicCAN,另一种是带有扩展成29位ID标识符的高级形式PeliCAN。内部的验收滤波器、屏蔽滤波器可通过标识符ID来接收需要的报文,屏蔽不相关的报文,即只向CPU 提交合适的报文。Philips、Intel、Siemens均支持BasicCAN 和PeliCAN。同时,PeliCAN 协议允许两段长度的标识符:A部分使用11位报文标识符,能够识别出2032个不同的标识符(保留十六位),此部分兼容BasicCAN;而PeliCAN (B部分)有29位,能够产生536870912个不同的标识符。
   PART A 的设备只能用标准的CAN 协议发送和接收。如果在29位ID的扩展CAN 系统中使用,设备会发生错误并破坏网络。SIEMENS 81C90 和81C91 是相类似的PART A (11位ID)设备,但可在扩展CAN 上使用而不会引起总线错误。原因很简单,因为它们忽略了扩展CAN帧,而是被认为是PART B设备。PART B 的设备(PeliCAN)则可由设定工作于其中一种模式下。
   数据链路层定义了报文传输的格式和定时协议,这里有两种描述符,都能达到8字节的数据。描述符是非常重要的,因为它们定义了报文的优先权以及报文传输的类型。
   标识符场有11位,并用来识别报文以及决定总线访问的优先权。标识符的二进制值越小,其优先权就越高。报文的优先权分配是CAN 总线的特征之一,特别在一个强大的实时控制环境里,这一点尤其吸引人。
   标识符场中所有的位都能够决定报文的优先权,这意味着,在一个11位系统里面,报文的优先权编号(号码)可以从16(高优先权)到2032 (低优先权)。CAN 规范保证了优先权与延时是相关联的。
二、报文冲突的处理

    如前所说, CAN的一个基本特征是越低的报文编号(号码),其优先权越高----一个标识符如果全部是零的话,那么它具有最高优先权。因而,两个节点同时开始传送报文,第一个发送零而另一个发送1的话,那么发送零的那个就能够先分配到CPU并完成报文发送。这种非破坏性的逐位仲裁与每一个节点都可以监控自己发送的能力联合使用。因而,如果一个发送器A被另一个发送器B 发送有更高优先权的报文支配(overrule), 回读的报文和A企图发送的报文不一致,A 将暂停发送。一旦总线空闲,另一个请求就会马上发送。这是第一层的部分功能,它完全包含在CAN 控制器里,因此它对CAN 用户来说是透明的。
三、交互的通讯

    它可以发送一个数据请求到特定的地址,远程发送请求RTR位定义了报文发送数据请求还是发送实际数据。数据长度代码告诉接收器报文里面包含了多少个数据字节。如果是数据请求则没有数据字节随传,那么数据长度代码就不会与数据字节数有直接关系。
    在CAN总线中最大的节点数典型是32个,但是最终的数量是由物理层的特性决定。在总线为250KB传送速率的CAN系统中,根据每个报文的字节数系统每秒钟大约能发送2000个到5000个报文。
四、物理层
    CAN能够使用很多物理介质,例如双绞线、光纤等。只要物理驱动器是在开集电极,而且每个节点都能够监听到它自己以及其他所有节点,那么CAN就能够工作。最常用的就是双绞线。一个信号能够使用差分电压传送,
CAN驱动器能够因此而避免噪声和容错。这两条信号线被称为CAN_H 和CAN_L,静态时是2.5V,用CAN_H 比CAN_L 高表示的逻辑0,被称为显形位,而用CAN_H比CAN_L高表示的逻辑1,叫做隐性位。

   差分的电压令CAN网络即使在一条信号线断开或者在噪声极大的环境中也能够工作,只需要一对双绞线,差分的CAN输入就能够很有效地抵偿噪音,只需要该噪音是在通常的波段里。
  CAN线收发器提供便宜的接口,把5V的逻辑电平转换成CAN要求的对称(线)电平。
五、CAN总线协议
    CAN总线被设计为具有最大传输速率1Mbit/sec 的多主结构。CAN不像传统的网络,它不会点到点地传送报文,例如从A节点到B节点。在CAN报文中,标识符是给予数据而不是节点;报文在网络中广播,任何对报文有兴趣的节点都能够接收这个数据。例如在车上一个节点可能传送了车轮的速度,这个数据可能会同时被ABS单元、设备组INSTRUMENT CLUSTER以及引擎管理系统所接收,而这些部件会知道这个信息是从哪里发出。
    在一个典型的嵌入式系统中,传送少量的重要数据是必要的。这些数据必须在一个实时的时间帧内到达,这与非实时的网络譬如在PC LAN 中传输一个文件不同。一般来说,CAN报文包允许传输最高8个字节的数据,而总线仲裁的方法保证了一个重要的数据能够在一个保证的时隙内到达。
    CAN 是特别设计用于电噪声很大的环境,这个环境中的报文最容易被丢失或破坏。CAN协议提供了五种错误检测和修正的方法,因此如果报文被破坏,它能够检测出来而且网络中的所有节点会忽略这个报文;该报文会一直被传送到被准确接收为止。
    从一个设计者的观点来看,CAN协议主要的吸引之处在于整个协议都是由一块芯片以及程序来运行,它看起来就像一个增强的多信道UART,所有的错误检测传送和接收技术都能够用CAN 控制器芯片的硬件透明地执行。
    CAN 控制器要通过线驱动器和总线接口。总线典型是双绞线,两端都接上一个120欧的电阻。CAN有发送和接收两端,因此它能够同时读写总线,这个功能对于错误检测与总线仲裁都很重要。CAN收发器和物理层并不由CAN规范来定义,但是只要它符合上述的要求就可以使用例如RS485驱动器和OPAMPS (运算放大器)等工具。
六、CAN报文帧类型
    在CAN总线中有四个通讯对象:带有应用数据的报文帧,向网络请求数据的远程帧,能够报告每个节点错误的出错帧,如果节点的接收器电路尚未准备好就会延迟传送的过载帧。
    报文帧在标识符前面具有一个帧起始(START OF FRAME)场。标识符可以有29位(扩展CAN或者CAN 2.0B)或者11位(CAN 2.0A)。当节点接收到一个报文与所使用的CAN 结构有关的标识符,就会与验收滤波器或者用户在CAN 控制器定义的标识符列表相比较。如果标识符通过了验收过滤器,或者与列表的标识符匹配,它就会被节点接收并产生CPU中断,因而相同的报文能够被设计者要求的节点所接收。
    标识符同样可以用于仲裁场中,如果标识符的编号越低,那么报文的优先权就越高。标识符后面是控制场,
控制场包含数据长度场,其中的DLC规定了数据场中字节的数量,RTR场将在稍后讨论。剩下的场是由CAN 控制器产生包含了15位循环冗余检查(对前面的场进行计算)和一个应答隙(ACK场)。
    应答隙是报文包中的一个间隙,它允许一个已经正确接收报文的节点插入一个应答。这等于告诉了发送器报文已经被正确接收。如果发送节点没有得到应答,它会继续重新发送报文直到得到应答为止。
    远程请求帧是报文帧的简短形式,它用于向网络请求数据。传送数据请求的标识符时,远程传输请求位RTR 要置位。与标识符相配的节点这时就会将请求的数据用报文帧传送。有一点要注意的是,DLC在远程帧中并不是为零,而是被设定成期望接收到的数据字节的数量。一般来说,远程帧是用在低总线负荷的网络中,这种情况下主机会向网络查询数据,这就简化了正个系统的设计并避免了总线冲突。
    以上的帧都服从位填充规则。这个规则中如果有超过五个连续的1或0,将插入一个极性相反位以
防止纯DC(直流)电平。这种错误违背规则我们将在介绍总线仲裁后再介绍错误处理。
七、总线仲裁
    CAN总线物理层通常是双绞线。当逻辑1被写进总线里,两条线的电平是2.5V,并被定义为隐性位。当逻辑0 被写进总线里,一条线被上拉到为5V(CAN高),另一条线被下拉到地(CAN低),这叫做显形位。但是如果显形位和隐性位都被不同的节点同时写进总线里,总线显示显形位,所以显性位覆盖了隐性位。这些都是CAN网络冲突检测的基础。

    当节点开始传送它们各自的报文时,标识符的每一个位都被写到总线里,而且能够被每一个节点读回。如果一个节点写进了隐性位而读回显性位,它会知道另一个较低标识符号码的(高优先权节点)正在访问总线它会停止传送报文并继续接收更重要的报文。这种技术叫做非破坏性逐位仲裁。它保证了如果发送一个高优先权报文,它将会赢得仲裁并能够在一个保证的时间限度里到达它的目的节点,这些都由系统设计者来控制。

必须注意:如果两个节点用同样的标识符发出数据,两个都会得到总线的仲裁并开始传输数据。在某一点,数据会不同并产生错误。两个节点都会后退并且重新开始整个传输过程,在最坏的情况下它会锁死网络。
八、CAN错误检测
    CAN协议有五种错误检测的方法:三个是报文级的,而两个是位级的。如果一个报文出错,那么错误检测的任何一个方法使节点不接收这个报文,并产生一个出错帧,使所有的帧都忽略它,并使发送节点重新发送这个报文。
    在报文级检查中,有CRC检查和应答隙。CRC检查是一个15位CRC,它计算描述符场和数据字节的CRC。应答场有两位,包括一个应答位和一个应答界定符。这个发送器将会把一个隐性位放在应答场。任何一个正确接收报文的节点在应答场写一个显性位,如果发送器在应答场没有读回一个显形位,它将产生一个出错帧,并重新传送报文。最后在报文级还有一个形式检查,它检查那些总是隐性位的报文场,如果检测到显形位就会产生错误,它检查帧起始、帧结束、应答界定符以及CRC界定符位。
    在位级检查中,每一个位都由发送器监控,如果一个位被写进总线但读到的是它的反,错误就会产生。只有标识符场用于仲裁和应答隙是除外的,它要求显性位覆盖隐性位。
    最后的一种错误检测方法是通过位填充规则,当一个报文没有被填充,即如果在逻辑电平相同的连续5位后下一位不是前面的反,则产生一个错误。
    活动错误帧包括六个显形位,它们违背了位填充规则。所有的CAN节点都认为它是一个错误并产生自己的错误帧,所以错误帧的长度可以在6位和12位之间,错误帧后是8位隐性位界定符场,而总线在重发被破坏的报文前是空闲的。要注意报文在被成功接收之前仍要争取仲裁。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多