汽车的中枢神经系统——CAN总线简介

汽车技术Wind

发布时间:19-08-1508:00

CAN总线是目前汽车上用的最广,技术最为成熟的一种总线。虽然当前已经有很多新的总线技术出现,但CAN总线在未来的十几年里,还会被大量使用。

From Vector: cost VS Data Rate

以上图表比较清晰的展示出,目前各个总线技术的开发费用和总线的传输速率的情况。对比可以看出,CAN总线是性价比最高的一种总线技术。

CAN总线的起源

CAN—Controller Area Network—是20世纪80年代初德国Bosch公司为解决现代汽车中众多控制单元、测试仪器之间的实时数据交换而开发的一种串行通信协议。

铜电缆时的电气架构

CAN总线的出现,很好的解决了众多功能模块控制单元之间的数据交换实时性和稳定性问题。在没有CAN总线出现之前,众多功能模块控制单元之间的数据交换只能通过一条条铜缆线传递单一的数据信号,实时性和稳定性都需要提高。

使用CAN总线后的电气架构

CAN总线的历史

1983年,Bosch开始内部开发车身网络(in-vehicle network)。

1986年,Bosch在SAE大会发布了CAN协议,开始了CAN总线的国际化。

1987年,Intel,Philips率先开发出CAN芯片。

1991年,Bosch发布了CAN 2.0,里面包含了A,B两部分(标准CAN,和扩展CAN)。

1992年,奔驰率先开发出基于CAN总线的汽车。

1993年,ISO 11898(data link(数据链路层),high-speed physical layer(高速物理层))发布。

1995年,ISO 11898 发布了扩展CAN的数据格式。

2003年,ISO 将原有的ISO 11898分成ISO 11898-1(数据链路层)和ISO 11898-2(高速物理层)两部分。

2004年,ISO 11898-4(TTCAN)发布。

2006年,ISO 11898-3(Low-power,low-speed physical layer)发布。

2007年,ISO 11898-5(low-power,high-speed physical layer)发布。

2011年,开始CAN FD协议的开发。

2013年,ISO 11898-6(physical layer with selective wake-up 功能)发布。

2015年,ISO 11898-1(Classical CAN和CAN FD)修订版发布。

From Vector ISO OSI VS ISO CAN

CAN的特性

1. 采用双线差分信号

CAN_H, CAN_L差分信号示意图

因为采用了差分信号,CAN总线的抗干扰能力非常强。高速CAN传输速率可达1Mbps,总线长度<40m。

2. 协议本身对节点数量没有限制,总线上节点的数量可以动态改变

From Vector Structure of CAN ECU

3. 广播发送报文,所有节点都可以接受

4. 多主站结构,各节点平等,由每个报文ID(ID在网络中唯一)确定优先级

5. 数据的一致性

CAN提供了一套复杂的错误检测于错误处理机制,如CRC校验,错误报文自动重发。

fev.com CAN总线在车上的应用

此图中,各个模块之间的连接有低速CAN,高速CAN,LIN总线。正是通过CAN/LIN总线,各个模块完成数据的交换,安全认证,命令执行等一些列复杂的动作。一般而言,低速CAN用于舒适系统(如中控屏,仪表,门窗控制器等);高速CAN用于Powertrain,底盘等安全件。

使用示波器查看CAN消息,会有类似如下图所示的波形。

CAN 总线的数据帧格式

CAN 数据帧格式

1. 帧起始位:SOF Start of Frame

· 标识一个数据帧的开始,也用于数据的同步

· 是一个显性位‘0’

· 在CAN总线空闲期间,SOF才能被发送

2. 仲裁场(CAN Identifier,RTR,IDE,SRR):

CAN Identifier是CAN唯一的标识符,表明报文的优先级和报文含义。

标准帧的ID是11位,而扩展帧ID是29位。

扩展数据帧VS标准数据帧:

通过比较,可以发现,IDE用来分区标准帧/扩展帧。IDE=0 --> 标准帧;IDE=1 --> 扩展帧。

3. 控制场(r0,r1,DLC)

r0, r1保留位,保持为0。

DLC表示数据长度:

0000b~1000b 有效

1001b~1111 无效

4. 数据场

数据场是数据帧需要传输的数据,有效的长度是0-8个字节。

5. CRC校验

CRC校验码用于判断数据帧的有效性。发送节点在发送数据帧之前会自动计算一个CRC校验值。接收节点收到此数据帧的时候,会根据接收到的数据计算一个CRC,并和数据帧里的CRC比对。如果对比结果一致就认为该数据帧有效。否则判断该数据帧无效。

CRC

6. CRC界定符

CRC界定符用于界定CRC的结束位。CRC界定符是固定的1个隐性位‘1’。

7. ACK

ACK用于确定报文是否被至少一个节点正确接收。

如果ACK依旧为隐性位‘1’,那么表示ACK错误。

ACK错误机制

8. EOF 帧结束

EOF用于表示数据帧的结束。EOF是7个连续的隐性位‘1’。

节点在检测到11个连续的隐性位‘1’会认为总线空闲。

错误帧

错误帧分为主动错误帧和被动错误帧。

主动错误帧,被动错误帧

主动错误帧由6个显性位‘0’标识,但最多由12个显性位‘0’,8个隐性位‘1’组成。

被动错误帧由12个隐性位‘1’组成。

错误帧的发送:

位错误,填充错误,格式错误或ACK错误-->下一位开始;CRC错误-->ACK界定符后开始。当错误帧发送后,总线空闲时重发出错的数据帧。

节点错误状态:

· 主动错误状态-->可收可发

· 被动错误状态-->可收可发

· 总线关闭状态(Bus off)à不参与总线活动

如果总线上只有一个节点,该节点发送数据帧后不会有应答。此时该节点就会进入被动错误状态,但不会进入总线关闭状态(bus off)。

返回顶部