CAN总线基础知识

Posted 芯途之旅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAN总线基础知识相关的知识,希望对你有一定的参考价值。

CAN总线基础知识(一)

 

1.1 CAN总线是什么?

    CANController Area Network)是ISO国际标准化的串行通信协议。广泛应用于汽车、船舶等。具有已经被大家认可的高性能和可靠性。

    CAN控制器通过组成总线的2根线(CAN-HCAN-L)的电位差来确定总线的电平,在任一时刻,总线上有2种电平:显性电平和隐性电平。

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

    总线上执行逻辑上的线""时,显性电平的逻辑值为"0",隐性电平为"1"

    下图显示了一个典型的CAN拓扑连接图。

    连接在总线上的所有单元都能够发送信息,如果有超过一个单元在同一时刻发送信息,有最高优先级的单元获得发送的资格,所有其它单元执行接收操作。

1.2 CAN总线的特点

     CAN总线协议具有下面的特点:

 

    1) 多主控制

    当总线空闲时,连接到总线上的所有单元都可以启动发送信息,这就是所谓的多主控制的概念。

    先占有总线的设备获得在总线上进行发送信息的资格。这就是所谓的CSMA/CRCarrier Sense MultipleAccess/Collosion Avoidance)方法

    如果多个设备同时开始发送信息,那么发送最高优先级ID消息的设备获得发送资格。

    2) 信息的发送

    CAN协议中,所有发送的信息要满足预先定义的格式。当总线没有被占用的时候,连接在总线上的任何设备都能起动新信息的传输,如果两个或更多个设备在同时刻启动信息的传输,通过ID来决定优先级。ID并不是指明信息发送的目的地,而是指示信息的优先级。如果2个或者更多的设备在同一时刻启动信息的传输,在总线上按照信息所包含的ID的每一位来竞争,赢得竞争的设备(也就是具有最高优先级的信息)能够继续发送,而失败者则立刻停止发送并进入接收操作。因为总线上同一时刻只可能有一个发送者,而其它均处于接收状态,所以,并不需要在底层协议中定义地址的概念。

    3) 系统的灵活性

    连接到总线上的单元并没有类似地址这样的标识,所以,添加或去除一个设备,无需改变软件和硬件,或其它设备的应用层软件。

    4) 通信速度

    可以设置任何通讯速度,以适应网络规模。

    对一个网络,所有单元必须有相同的通讯速度,如果不同,就会产生错误,并妨碍网络通讯,然而,不同网络间可以有不同的通讯速度。

    5) 远程数据请求

可以通过发送"遥控帧",请求其他单元发送数据。

    6) 错误检测、错误通知、错误恢复功能

所有单元均可以检测出错误(错误检测功能)。

检测到错误的单元立刻同时通知其它所有的单元(错误通知功能)。如果一个单元发送信息时检测到一个错误,它会强制终止信息传输,并通知其它所有设备发生了错误,然后它会重传直到信息正常传输出去(错误恢复功能)。

    7) 错误隔离

CAN总线上有两种类型的错误:暂时性的错误(总线上的数据由于受到噪声的影响而暂时出错);持续性的错误(由于设备内部出错(如驱动器坏了、连接有问题等)而导致的)。CAN能够区别这两种类型,一方面降低常出错单元的通讯优先级以阻止对其它正常设备的影响,另一方面,如果是一种持续性的错误,将这个设备从总线上隔离开。

    8) 连接

CAN总线允许多个设备同时连接到总线上且在逻辑上没有数目上的限制。然而由于延迟和负载能力的限制,实际可连接得设备还是有限制的,可以通过降低通讯速度来增加连接的设备个数。相反,如果连接的设备少,通讯的速度可以增加。

1.3错误

1.3.1 错误状态

    设备总是处于下面三个状态之一:

    1)主动错误状态

    在此状态下,设备能够参加总线上的正常通讯。如果处于主动错误状态的设备检测到一个错误,它会发送一个主动错误标志,更细节见第6章的"CAN协议"

    2)被动错误状态

    是指易于引起错误的状态。

    尽管处于被动错误状态的设备能够参加总线上的通讯,但是在接收期间,它不可能主动地向其它设备发送错误通知,以避免影响它们的通讯。处于被动错误状态的设备即使检测到一个错误,如果其它处于主动错误状态的设备没曾检测到错误,那么也认为在总线上未曾出现过任何错误。

    当处于被动错误状态的设备检测到一个错误的时候,它发送一个被动错误标志。

    另外,处于被动错误状态的单元在发送结束后不能立刻再次开始发送。在开始下次发送前,在间隔帧期间内必须插入"暂停发送期"(由8个位的隐性位组成)。

更细节见第6章的"CAN协议"

    3)总线切断状态

    处于此状态下时,设备不能参加总线的通讯。设备所有的收发操作都被禁止。

    这些状态是通过发送错误计数器和接收错误寄存器来管理,相关错误状态由这些计数器值的组合来标识,错误状态和计数器值之间的关系见表1和图4

 

1.3.2 错误计数器的值

    发送和接收错误计数器的值按照规定的条件来改变。

    2小结了错误计数器值改变的条件。

    在一个数据收发操作中可能会发生多个条件重叠。

    错误计数器增加的时间发生在错误标志的第一bit位置。

1.4CAN协议的基本概念

    CAN协议包括OSI参考模型的传输层、数据链路层、物理层。图5显示了CAN协议每个层的定义。

    数据链路层划分为MACMedium Access Control媒体存取控制)和LLCLogical Link Control罗辑链路控制)。MAC子层组成CAN协议的核心。数据链路层的功能是将从物理层接收到的信号组织成有意义的信息,提供如传输错误控制等数据传输控制流程。更具体来说,包括:信息如何封装成一帧,数据冲突仲裁、应答、错误的检测或通知。数据链路层的这些功能通常由CAN控制器硬件来实现。

    物理层定义信号的实际传输方式、位的时序、位的编码、同步的过程步骤,然而,CAN协议并没有定义了信号电平、通讯速度、采样点值、驱动器和总线电气特征、连接器形式。对每个系统,这些特征由用户自行确定。

    BOSCH公司的CAN协议中,并没有关于收发器和总线的电气特征的定义,而在ISO CAN协议中,如ISO11898ISO11519-2却对此有明确的定义。

 

CAN总线基础知识(二)

 

2.CAN协议和标准规范

2.1 ISO标准化的CAN协议

    CAN协议已经由ISO标准化,有2个版本,如ISO11898ISO11519-2,它们之间在数据链路层没什么不同,但是在物理层有些区别。

    (1)   关于ISO11898:这个标准用于高速CAN通讯。开始的时候,数据链路层和物理层都在标准ISO11898中规定,后来被拆分为ISO11898-1(仅涉及数据链路层)和ISO11898-2(仅涉及物理层)

    (2)   关于ISO11519:这个标准用于低速(最高125kbpsCAN通讯

2.2  ISO11898ISO11519-2之间的不同

    6显示了CAN规范的规定范围。三个物理层的子层:PLS(Physucal Signaling Sublayer物理信号子层)子层,PMAPhysical Medium Attachment物理介质连接)子层,MDIMedium Dependent Interface介质相关接口)子层,PMAMDI子层的定义是不一样的。

    3列出了ISO11898ISO11519-2之间的物理层上的不同,图7现实了通讯速度和总线长度之间的关系。

通讯速度和总线长度需要由用户按照系统要求进行设置。

     总线拓扑:

     CAN总线通常有2根线(CAN_HighCAN_Low)组成,CAN控制器通过一个收发器连接到总线上,总线的电平由CAN_HighCAN_Low的电位差来确定,总线有2个电平:显性和隐性,在任一给定的时间内,总线总是处于这2个电平之一。对于逻辑上"线与"的总线,显性和隐性电平被看作逻辑0和逻辑1,一个发送单元能够通过改变总线电平来送一个信息给接收单元。

    ISO11898ISO11519-2规定的物理层终端阻抗、显性电平、隐性电平差分电压是不同的。

    8显示了ISO11898ISO11519-2物理层的特点,注意ISO11898ISO11519-2要求一个收发器满足对应的标准,表4列出了满足ISO11898ISO11519-2的主要收发器IC

 

2.3  CAN和标准规范

    除了ISOCAN规范由工业标准组织如SAE标准化,以及由一些私立研究机构和公司进行了标准化。

5类除了一些基本的标准规范,图9显示了通讯协议用于汽车按照通讯速度分级

 

 

 

CAN总线基础知识(三)

3.1CAN协议

3.1.1 帧类型

通讯时使用下面5个类型的帧:

    数据帧

    遥控帧

    错误帧

    过载帧

    帧间空隙

    在所有这些帧中,数据帧和遥控帧由用户设置,而其它帧则由CAN硬件设置。

    数据和遥控帧有两种格式:标准和扩展格式。标准格式有11bitID,而扩展格式则是29bitID

    每个帧的用处见表6,每个帧的结构见图10到图14

6 帧类型和每种类型帧的作用

3.1.2 数据帧

数据帧由发送单元使用,用来发送信息给接收单元,这是用户操作的基本帧。

数据帧有7个域组成。图15显示了数据帧的结构。

1)帧开始(SOF):这个域表示数据帧的开始。

2)仲裁域:这个域表示一个帧的优先级

3)控制域:这个域表示保留位和数据字节数

4)数据域:这是数据内容,0-8个字节的数据能被发送

5CRC域:这个域用于检查帧的传输错误。

6ACK域:是对帧已经被正常接收的一个证实。

7)帧结束:指示数据帧结束

   

1)帧开始(SOF),对标准的或扩展的格式都是一样的。它指示一帧的开始,由1bit的显性位组成。

    显性电平和隐性电平:

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

    总线上执行逻辑上的线""时,显性电平的逻辑值为"0",隐性电平为"1"

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

   

2)仲裁域,这个域表示数据的优先级别。这个域的结构,对标准和扩展的格式是有差别的。

1:关于ID

    标准格式的ID11bit,从ID28ID18被依次发送,禁止高7位全为隐性。(禁止设定:ID=1111111xxxx)。这样总共有(2048-16)个ID能被使用。

    扩展格式的ID29bit。基本IDID28ID18,扩展IDID17ID0表示,基本ID和标准格式ID相同,禁止高7bit全都为隐性,(禁止设定:基本ID=1111111xxxx)。这样总共有(2048-16)个ID能被使用。

    在任何情况下,总线上不可能有多个设备在同一时刻使用同一个ID传输数据帧。

3)控制域,占6bit,指示要传输信息的数据字节数,这个域的结构,对标准和扩展的格式是有差别的。如图18所示

    1:保留位(r0r1),保留位必须以显性电平传送,然而,在接收侧可以接收显性、隐性集任意组合的电平。

    2:数据长度码(DLC),数据长度码与数据的字节对应关系见表7所示。数据的字节数必须是0-8个字节,但接收方对DLC=9-15的情况并不视为错误。

4)数据域,对标准的或扩展的格式都是一样的。这个域是传输的数据,可以是08个字节,字节数载控制域中指明。数据输出开始于MSB。如图19所示:

5CRC域,对标准的或扩展的格式都是一样的。这个域用来检查帧是否有传输错误,它由15bit CRC码和一个bitCRC定界符(delimiter)(separating bit分隔bit

    CRC的产生方法是采用下面的多项式:,CRC的计算范围是SOF、仲裁域、控制域、数据域。在接收侧,会对接收到的数据帧的这些域进行CRC计算,如果计算结果与收到的CRC不一致,则表明存在传输错误。

6ACK域,是对一帧已被正常接收的一个确认信号,由2bit组成,一个是ACKslot,一个是ACK的定界符(delimiter),如图21所示:

    1:发送单元的ACK域,发送单元以隐性bit发送ACK slotACK delimiter

    2:接收单元的ACK域,正确接收到信息的接收单元在接收帧的ACK slot里发送一个显性bit,以通知发送单元其已经正确接收完毕,这又称"sending ACK""returning ACK"

"Returning an ACK"

    所有接收单元只要不是处于bus-off或休眠状态,只有正确接收信息的单元才能发送ACK。发送单元并不发送ACK。如果总线上除了发送单元,没有其它单元能接收信息,则No ACK被返回。为了通讯的建立,除了发送单元外,至少需要有一个单元能够接收信息。如果总线上有2个或更多个单元能接收到信息,如果它们中任意一个正常接收到信息,则会有ACK被返回。

7)帧结束,指示一帧结束,由7个隐性位组成。如图22

 

3.1.3 遥控帧

    遥控帧是接收单元请求发送单元发送一个信息,遥控帧有6个域组成。如图23显示的那样,除了没有数据域外其它与数据帧的结构是一样的。

(1) 帧开始(SOF):这个域表示数据帧的开始。

(2) 竞争域:这个域表示数据的优先级,具有同样ID的数据帧被请求。

(3) 控制域:这个域表示保留位和数据字节数

(4) CRC域:这个域用于检查帧的传输错误。

(5) ACK域:是对帧已经被正常接收的一个证实。

(6) 帧结束:指示遥控帧的结束

   

遥控帧和数据帧: