CAN总线
转载自:https://www.cnblogs.com/alantu2018/p/9209863.html
CAN总线特点
CAN总线是一种串行数据通讯协议,其中包含了CAN协议的物理层以及数据链路层。可以完成对数据的位填充,数据块编码,循环冗余效验,帧优先级的判别等工作。其主要特点如下:
(1)多主机方式工作,网络上任意一个节点(未脱离总线)均可以随时向总线网络上发布报文帧。
(2)节点发送的报文帧可以分为不同的优先级,满足不同实时要求。
(3)采用载波侦听多路访问/冲突检测(CSMA/CD)技术,当两个节点同时发布信息时,高优先级报文可不受影响地传输数据。
(4)节点总数实际可达110个。
(5)采用短帧结构,每一帧最多有8个有效字节。
(6)当某个节点错误严重时,具有自动关闭功能,切断与总线的联系,致使总线上的其他操作不受影响。
CAN总线有两种逻辑电平状态,即显性与隐性。
-
CAN总线使用两根线(CAN_H 和 CAN_L)的电压差来传递信号。
-
“隐性”和“显性”:
-
隐性:代表逻辑‘1’。此时总线处于空闲状态,所有节点都可以开始发送消息。
-
显性:代表逻辑‘0’。当有节点需要发送数据时,它会用“显性”位来覆盖“隐性”位。
-
关键:“显性”的优先级高于“隐性”。只要有一个节点发送“显性”,总线状态就是“显性”。
-
高速CAN在传输隐性位时,CAN_H与CAN_L上的电平位均为2.5V;在传输显性位时分别为3.5V与1.5V。
低速CAN在传输隐性状态位时,CAN_H上的电平为0V,CAN_L上的电平位5V。在传输显性状态位时,CAN_H上的电平位3.6V,CAN_L的位1.4V。

1. 高速CAN(ISO 11898-2)
这是汽车中最常见的类型,用于发动机、变速箱、ABS等关键高速通信。
| 特性 | 逻辑 ‘1’(隐性) | 逻辑 ‘0’(显性) |
|---|---|---|
| CAN_H 电压 | 2.5V | 3.5V |
| CAN_L 电压 | 2.5V | 1.5V |
| 电压差 | 0V | 2V |
解读:
-
当总线空闲或传递逻辑‘1’时,CAN_H 和 CAN_L 电压均为2.5V,差值为0V。这就是“隐性”状态。
-
当需要传递逻辑‘0’时,CAN_H 被拉高至3.5V,CAN_L 被拉低至1.5V,产生2V的电压差。这就是“显性”状态。
-
总结:高速CAN通过检测 CAN_H 和 CAN_L 之间的电压差 来判定信号。差分为0V是‘1’,差分约2V是‘0’。
2. 低速/容错CAN(ISO 11898-3)
这种类型用于舒适性系统,如车门、车窗、座椅等,特点是即使一根线断路也能继续工作。
| 特性 | 逻辑 ‘1’(隐性) | 逻辑 ‘0’(显性) |
|---|---|---|
| CAN_H 电压 | 0V | 4V |
| CAN_L 电压 | 5V | 1V |
| 电压差 | -5V | +3V |
解读:
-
隐性状态:CAN_H 为0V,CAN_L 为5V,电压差为 -5V。
-
显性状态:CAN_H 被拉高至4V,CAN_L 被拉低至1V,电压差为 +3V。
-
容错能力:因为它使用独立的电压水平,而不是单纯的差分。如果CAN_H或CAN_L其中一根线对地短路或断路,控制器仍然可以通过监测另一根线的电压来解读信号,从而实现“容错”。
CAN报文帧结构
在CAN总线上,报文是以“帧”来发送的,每一帧都包含以下几个部分:
(1)帧起始
在总线空闲时,总线为隐性状态。帧起始由单个显性位构成,标志着报文的开始,并在总线上起着同步作用。
(2)仲裁段
仲裁的主要是定义了报文的标识符,也俗称ID。在CAN2.0A规范中,标识符为11位,而在CAN2.0B中变为了29位。这意味着在2.0B中可以存在更多不同类型的报文,但是也降低了总线的利用率。
(3)控制段
主要定义了数据域字节的长度。通过数据长度码,接收节点可以判断报文数据是否完整。
(4)数据域
包含有0~8个字节数据。
(5)CRC域
CRC又称循环冗余码效验(Cyclical Redundancy Check),是数据通信中常见的查错方法。
(6)ACK域
用于接收节点的反馈应答。
(7)帧结束
由一串7个隐性位组成,表示报文帧的结束。

在CAN总线的开发中,核心的关注点就是CAN报文ID以及其数据域。根据客户的要求,ECU接收自己感兴趣的ID报文的同时,也向外发送别的ECU所需要的ID报文。

浙公网安备 33010602011771号