目录

一、CAN 简介

二.硬件连接

三、CAN在汽车网络上的应用

四、CAN总线的特性

五、OSI模型与CAN的关系 

六、CAN帧类型

七、CAN的仲裁方法

八、位填充

 

九、错误

十、错误的种类

 

十二、CAN速率

十三、CAN物理层常见故障与分析

 

一、CAN 简介

CAN:Controller Area Network,控制器局域网络,最早由德国 BOSCH(博世)开发,给出CAN2.0协议(分A,B2个部分);

  • ISO 11898 是通信速度为 5kbps - 1Mbps 的 CAN 高速通信标准。规范中同时定义了 数据链路层和高速物理层。
  • ISO 11519 是通信速度为 125kbps 以下的 CAN 低速通信标准,也就是容错CAN(LSFT CAN)。提供从5 Kbit/s到125 Kbits/s的波特率。该标准允许在CAN总线连线失败时CAN总线通信得以继续进行。

 

CAN总线主要用于汽车的检测和控制,目的为适应汽车的“减少线束的数量”、“通过多个网络进行大量数据的高速传输”的需求。

 

CAN是国际标准化的串行通信协议,采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(接收or丢弃)。

 

二.硬件连接

1. 一个节点一般包含3个部分微控制器CAN控制器CAN收发器。CAN 控制器通过2根线上的点位差来判断总线电平。

2. 有的微控制器内部已经包含了CAN控制器,只需要外加CAN收发器,收发器一般都是8个引脚的芯片。

3. 所有节点通过两条线连接起来。两条线分别称为CAN_HCAN_L。如果要求不高,一般用带屏蔽的双绞线就可以了。

所有的 CAN 节点单元都采用 CAN_H 和 CAN_L 这两根线连接在一起,CAN_H 接CAN_H、CAN_L 接 CAN_L。

 4. 网络的两端必须有120Ω的终端电阻。所以在设计线路板的时候都要有一个120欧的电阻。通过跳线或者拨码开关选择是否使用这个电阻。为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线,提高数据通信的抗干扰能力以及可靠性

如果不接电阻的话,CAN_H 与CAN_L 是短路状态,就无法产生电平。 

 

三、CAN在汽车网络上的应用

车用总线的速率跟相对车本

下面是车载总线的对比图

 

四、CAN总线的特性

1. 节点间采用 多主通信 方式

在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

2. 采用短帧结构 

3. 报文ID值越小, 优先级越高。报文id可以分成不同的优先级,进一步满足汽车网络报文的实时性要求。

4. 非破坏性 总线仲裁处理机制

5. 可靠的CRC校验方式

6. 报文仲裁失败或者传输期间有被破坏,有自动重发(机制

7. 节点在错误严重的情况下,具有自动脱离总线的功能,切断与总线的联系,不影响总线的正常工作。(当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。)

8. 通信速度较快,通信距离远。最高 1Mbps(距离小于 40M),最远可达 10KM(速率低于 5Kbps)

9. 具有错误检测、错误通知和错误恢复功能。

所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)

 

五、OSI模型与CAN的关系

ISO 11898 根据7层模型制定了CAN通信的物理层 与数据链路层上的通信规则。

 

5.1 CAN物理层

1. CAN收发器

差分电平:CAN_H 与CAN_L 的电平差

 

2. CAN总线上的电平信号

CAN 总线使用两根线来连接各个单元:CAN_H 和 CAN_L,CAN 控制器通过判断这两根线上的电位差来得到总线电平。CAN 总线电平分为显性电平(0)和隐性电平(1)两种。

 CAN标准有两个,即IOS11898和IOS11519,两者差分电平特性不同。

CAN 总线就通过显性和隐形电平的变化来将具体的数据发送出去,如图所示:

 

 

这里主要讲ISO11898: 

  • 如果CAN控制器发送逻辑1时,CAN收发器使CAN_H和CAN_L都为2.5V,这时,两条线上的电压差为0V。总线上称为隐性电平
  • 如果CAN控制器发送逻辑0时,CAN收发器使CAN_H为3.5V,CAN_L为1.5V,这时,两条线上的电压差为2V。总线上称为显性电平
  • 多个节点同时开始发送时,会涉及到总线仲裁(也就是谁可以继续发送)

 

问题1: 为什么采用双绞线的差分电平信号?

原因:双绞线传输差分信号时收到共模信号干扰后,电平差值不变,信号解码正常。

 

3. CAN信号电平高低的控制原理

单个can节点

 

多个can节点

 

 CAN 总线上没有节点传输数据的时候一直处于隐性状态,也就是说总线空闲状态的时候一直处于隐性

 

4. CAN总线终端电阻

 

 

 

 六、CAN帧的类型

每一个节点都可以主动发送帧。(帧是CAN协议规定的发送或接收的单位) 。帧由段组成,段由二进制位组成

通过 CAN 总线传输数据是需要按照一定协议进行的,CAN 协议提供了 5 种帧格式来传输数据,其中错误帧过载帧帧间隔都是由硬件完成的,没有办法用软件来控制。对于一般使用者来说,只需要掌握数据帧遥控帧

数据帧和遥控帧有标准格式(标准帧)扩展格式(扩展帧)2种格式。标准格式有11位标识符,扩展格式有29位标识符。

 

6.1 数据帧

数据帧由 7 段组成。

 

如下数据帧的构成:

 

 

图中 D 表示显性电平 0、R 表示隐性电平 1,D/R 表示显性或隐性,也就是 0 或 1。

 

我们来简单分析一下数据帧的这 7 个段:

  • 帧起始(1 bit, 显性“0”):标准格式和扩展格式一样,都是由一个位的显性电平 0 来表示帧起始

 

     

 

  • 仲裁段(11+1 or 29+2+1 bit):表示帧的优先级(越小优先级越高), 标准格式和扩展格式的仲裁段不同,从图可以看出,
    • 标准格式的 ID 为 11 位,发送顺序是从 ID10 到 ID0,最高 7 位 ID10~ID4 不能全为隐性(1),也就是禁止 0X1111111XXXXX这样的 ID。随其后的是RTR位,用于表明此帧是数据帧还是远程帧IDE位用于表明此帧是标准帧还是扩展帧
    • 扩展格式的 ID 为 29 位,基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0,基本ID 与标准格式一样,禁止最高 7 位都为隐性。随其后的是RTR位,用于表明此帧是数据帧还是远程帧。IDE位用于表明此帧是标准帧还是扩展帧。

         仲裁段里含有CAN通信中一项非常重要的信息(ID),你可以把它当成是每一个报文的名字,每个CAN device可以发送多条不同的ID报文。每一个总线节点的CAN控制器中都有一个东西叫过滤器,通过设置相关寄存器能够配置它一旦设置好,CAN控制器会根据你的设置,自动去判断要不要接收报文,这部分完全由硬件实现,这个判断要不要接收的过程,也叫过滤,判断的依据就是每个报文的ID。扩展格式的ID具有比标准格式更多的位数,从而有更高的ID容量。

           

 

  • 控制段(6 bit) :控制段由 6 个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同。
    • 标准格式:控制段含有IDE、保留位与数据长度码(DLC)
    • 扩展格式:保留位(r0、r1) 与数据长度码(DLC), 保留位(r0、r1) 必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
    • 数据长度码(DLC) 与数据的字节数的对应关系下表所示。数据的字节数必须为 0~8字节。但接收方对 DLC=9~15的情况并不视为错误

         

        

 

  • 数据段(0-64 bit): 数据段就是你需要发送的数据(帧的有效数据),标准格式和扩展格式相同,可包含字符0~8个字节数据,CAN控制器有对应的寄存器,只需要把数据直接填进去就可以了。  

      

  • CRC段(16 bit:CRC 段保存 CRC 校准值,用于检查帧传输错误,标准格式和扩展格式相同。
    • CRC 段由 15 位的 CRC 值与 1 位的 CRC 界定符组成。CRC 值的计算范围包括:帧起始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用计算得到的 CRC 值与此 CRC 段进行比较,如果不一致的话就会报错。

        

 

  • ACK段(2 bit) ACK 段用来确认接收是否正常,标准格式和扩展格式相同。ACK 段由 ACK 槽(ACK Slot)和 ACK 界定符两部分组成。
    • 发送单元的 ACK,发送 2 个隐性位
    • 接受单元的ACK,接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。

       发送 ACK 的是所有接收单元中接收到正常消息的单元,所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息,这些接收单元既不处于总线关闭态也不处于休眠态的所有接收单元中。 

      

 

  • 帧结束段(7 bit):  由 7 位隐性位构成, 标准格式和扩展格式相同.    

       

 

         

 

6.2 遥控帧(远程帧)

接收单元向发送单元请求数据的时候就用遥控帧。

  • 帧起始,表示数据帧开始的段。
  • 仲裁段,表示该帧优先级的段。
  • 控制段,表示数据的字节数及保留位的段。
  • CRC 段,检查帧的传输错误的段。
  • ACK 段,表示确认正常接收的段。
  • 帧结束,表示数据帧结束的段。

遥控帧的构成:

 

七、CAN的仲裁方法

 

1. 在总线空闲时,最先开始发送的节点获得发送权,一旦开始发送,不会被其他节点抢占。

2. 多个节点同时开始发送时,各发送节点从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的节点可继续发送。(Dominant :显性优先)

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

 

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

5. 两个以上的单元同时开始发送消息时,对各消 息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的 单元则立刻停止发送而进行接收工作。 

 

八、位填充

 

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。 

(1) 发送单元的工作
在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则 要插入 1 位与前 5 位反型的电平。

(2) 接收单元的工作
在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个 位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。 

 

九、错误

 

错误状态的种类

单元始终处于 3 种状态之一。

(1) 主动错误状态 主动错误状态是可以正常参加总线通信的状态。 处于主动错误状态的单元检测出错误时,输出主动错误标志。

(2) 被动错误状态
被动错误状态是易引起错误的状态。 处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。 处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被 认为是没有错误的。
处于被动错误状态的单元检测出错误时,输出被动错误标志。 另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内 必须插入“延迟传送”(8 个位的隐性位)。

(3) 总线关闭态
总线关闭态是不能参加总线上通信的状态。
信息的接收和发送均被禁止。 这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关 系如表 

 

 

十、错误的种类

 

错误共有 5 种。多种错误可能同时发生。

  • 位错误
  • 填充错误
  • CRC错误
  • 格式错误
  • ACK错误 

 

 

 

十一、错误帧的输出

检测出满足错误条件的单元输出错误标志通报错误。

处于主动错误状态的单元输出的错误标志为主动错误标志;处于被动错误状态的单元输出的错误标志为被动 错误标志。

发送单元发送完错误帧后,将再次发送数据帧或遥控帧。 

 

 

 

十二、CAN速率

CAN 总线以帧的形式发送数据,但是最终到总线上的就是“0”和“1”这样的二进制数据,这里就涉及到了通信速率,也就是每秒钟发送多少位数据,前面说了 CAN2.0 最高速度为 1Mbps/S。对于 CAN 总线,一个位分为 4 段:

①、同步段(SS)

②、传播时间段(PTS)

③、相位缓冲段 1(PBS1)

④、相位缓冲段 2(PBS2)

这些段由 Tq(Time Quantum)组成,Tq 是 CAN 总线的最小时间单位。帧由位构成,一个位由 4 个段构成,每个段又由若干个 Tq 组成,这个就是位时序。1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如图所示:

1 个位的构成如图所示:

图中的采样点是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1结束处。根据这个位时序,我们就可以计算 CAN 通信的波特率了。具体计算方法,我们等下再介绍,前面提到的 CAN 协议具有仲裁功能,下面我们来看看是如何实现的。

在总线空闲态,最先开始发送消息的单元获得发送权。

当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。实现过程,如图所示:

 图中,单元 1 和单元 2 同时开始向总线发送数据,开始部分他们的数据格式是一 样的,故无法区分优先级,直到 T 时刻,单元 1 输出隐性电平,而单元 2 输出显性电平,此时单元 1 仲裁失利,立刻转入接收状态工作,不再与单元 2 竞争,而单元 2 则顺利获得总线使用权,继续发送自己的数据。这就实现了仲裁,让连续发送显性电平多的单元获得总线使用权。

 

十三、CAN物理层常见故障与分析

 

 本文部分内容引用:

https://zhuanlan.zhihu.com/p/514535745