电动汽车CAN总线(电动汽车动力总成解读)
电动汽车CAN总线(电动汽车动力总成解读)4.1 CAN报文/信号/物理量4. CAN总线报文是如何传输的?(传输方式)1. 什么是CAN总线技术?2. 为什么需要CAN总线?3. 为什么是Can总线被广泛应用?
本文为臭皮匠试验室(同微信号)观点。转载请请注明出处。
之前在文章《电动汽车动力总成解读︱模拟世界与数字世界》中提到的,我们所处的世界,是一个由用无限多种颜色、无数种音调,无数种气味绘制而成的世界,所有的这些元素都可以理解成一个模拟信号,他们是构建这个世界的元素。而CAN总线技术(Controller Area Network),类似于我们的神经系统,遍布于我们身体的各个部分,通过某种规则,与身体的各个节点之间交互,接收和发送信息,从而感受世界、改造世界。今天我们就来聊聊上80年代由BOSCH公司开发的CAN总线技术。
▼
文章结构如下:
1. 什么是CAN总线技术?
2. 为什么需要CAN总线?
3. 为什么是Can总线被广泛应用?
4. CAN总线报文是如何传输的?(传输方式)
4.1 CAN报文/信号/物理量
4.2 模拟信号与数字信号
4.3 CAN总线物理结构
4.4 传输方式
5. CAN协议帧结构
6. OSI网络结构与AUTOSAR架构
6.1 OSI网络结构
6.2 AUTOSAR架构
7. CAN报文的发送、确认和接收
7.1 报文的发送、确认
7.2 报文的接收
1. 什么是CAN总线技术?
CAN,即Controller Area Network,二十世纪八十年代由BOSCH公司为解决现代汽车中众多ECU之间的数据交换而开发的一种单工穿行通信协议。
可以将CAN总线理解成我们的神经系统,它遍布于我们身体的各个部分,通过某种规则,与身体的各个节点之间交互,发送或接收消息。
也可以将其理解成电话会议,一旦某一节点有发送请求,该信息将输入网络,其他节点共同接收,接收节点判断是否使用该信息。
备注: 单工 , 指 同一时间,只能有一个ECU单元向总线发送数据,而其他ECU只能做为接收节点。
2. 为什么需要CAN总线?
正如之前在文章《电动汽车动力总成解读︱模拟世界与数字世界》中提到的,我们所处的世界,是一个由用无限多种颜色、无数种音调,无数种气味绘制而成的世界,所有的这些元素都可以理解成一个模拟信号,他们是构建这个世界的元素。
而人类,作为高级动物,正式通过相互交流、合作,对这个世界进行了改造。将这一概念放到汽车上:人类通过文字、声音、图像来交流,为了提升交流效率,诞生了“网络”技术;汽车不同部件之间则通过线束来实现,同样,为了提升信息交换的效率、简化系统,诞生了“总线”技术。
3. 为什么是CAN总线被广泛应用?
早期的网络结构有很多,为什么CAN总线技术得以推广应用,主要以下几点原因:
- 低成本
- 中央集成控制
- 鲁棒性高
- 高效(仲裁机制)
- 灵活性高
4. CAN总线报文是如何传输的?(传输方式)
4.1 CAN报文/信号/物理量
介绍之前先对CAN报文/信号/物理量的概念做下区分,三句话概括:
- 任何报文都可以在总线的节点之间传递
- 任何报文的数据字节都可以分解成信号
- 信号可以用物理量形式表示
4.2 模拟信号与数字信号
之前我们介绍过模拟信号与数字信号,详见文字《电动汽车动力总成解读︱模拟世界与数字世界》。
我们所处的世界,是一个由用无限多种颜色、无数种音调,无数种气味绘制而成的世界,所有的这些元素都可以理解成一个模拟信号,他们是构建这个世界的元素。ECU之间通过CAN总线的通讯过程,与人类通过音频、视频的过程是一样的,即数字量与模拟量之间的转换。
4.3 CAN总线物理结构
如下图所示为CAN总线物理结构,基本形式为: CAN_H CAN_L 各个节点(Nodes)。
其中,
CAN_H/CAN_L:以双绞形式缠绕;
节点:CAN收发器(Transceiver) CAN控制器(Controller),控制器的 Tx 发送端脚、Rx 接收端脚,而收发器直接连接在双绞线上。
CAN总线上的信号,即为电压形式表现的差分信号,由 CAN_H和CAN_L两根信号线组成,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1,如下图所示。
4.4 传输方式
当CPU需要发送数据时候,CAN Controller给Transceiver传送需求的数据,CAN Transceiver将其发送给CAN 总线,通过CAN_H和CAN_L两根线实现整车各ECU节点之间的串联,接收数据类似过程。
综上,整车ECU各节点之间CAN总线的通讯方式,简单理解如下:
- 发送 :Transceiver 将上层传递的数据进解析成电压信号 (根据ISO 11898/ISO11519定义),并传递至BUS。
- 接收 : Transceiver 将BUS信号转变为二进制信号给CAN Controller;CPU将CAN Controller传送的数据进行解析、提取,经过相应运算,控制传感器和执行器。
了解了CAN总线上报文的传递方式和逻辑电平序列的应用,那么这些逻辑电平序列要如何使用呢?
5. CAN协议帧结构
为了说明上述逻辑电平序列的使用方式,需要了解CAN协议帧的结构。
CAN协议标准里对这些逻辑点评序列做了定义,使这些数据字段有了灵魂,标准中对CAN协议帧的定义有以下4种类型:
- 数据帧:用于发送单元向接收单元传输数据的帧
- 遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧
- 错误帧:用具当检测出错误时,向其他单元通知错误的帧
- 过载帧:用于接收单元通知其尚未做好接收准备的帧
简单来讲,正式通过上述对报文信号协议帧的规范,使我们ECU之间的通讯定位准确、逻辑清楚、信息完善、响应及时、鲁棒性高,限于篇幅,具体帧结构的展开形式和应用方法本文不做详细介绍,感兴趣的可以自行搜索,如有时间我也会再做总结。
通讯逻辑和方法已大致了解,那么具体要怎么实现CAN通讯功能呢?
6. OSI网络结构与AUTOSAR架构
为了满足软件的可以执行、可扩展性和安全性能等,我们引入基于OSI网络结构的AUTOSAR架构,如下图所示。
6.1 OSI网络结构
OSI网络结构定义如下,其核心目的时为了将协议、服务和接口明确区分,解决异种节点互联时的兼容性问题。
对于车规级CAN网络通讯,只对 物理层、数据链路层、应用层 做了逻辑上定义,其他暂无需关注。
- 物理层: 利用传输介质对数据链路层提供物理连接,负责数据流的物理传输,传输单位是0和1。
- 数据链路层: 在通信实体间建立数据链路联接,传输的基本单位为“帧”,可分为两部分MAC(介质访问控制子层) LLC(逻辑链路控制子层)。
- 其中,MAC——规定如何在物理线路上传输帧,LLC——对在同一条网络链路上的设备之间的通信进行管理。
- 应用层:实现对物理层数据层数据的解析,即VCU通过哪些ID通信,报文长度,数据所代表的信号,信号含义等。
6.2 AUTOSAR架构
下图为基于OSI网络结构的AUTOSAR架构中的通讯站。可以看出,HW访问只有通过Driver实现,CAN If模块与其对接,同时,CAN If统一管理与service层的通讯,通过PDUR路由到更多上层模块,减少了接口。
7. CAN报文的发送、确认和接收
7.1 报文的发送、确认
简单来讲,报文发送的过程,即用户向服务提供者发出请求(request),然后提供者向用户确认请求结果(confirm)的过程,如下图所示:
详细说明下这一过程:
- Step1. BSW通过Com_SendSignal周期性调度Com模块中的Com_MainFunctionTx函数,Com模块从缓存中读取需要发送的数据;
- Step2. Com模块的Com_MainFunction_Tx函数将调用PduR模块的PduR_ComTransmit函数,将数据传递给PduR
- Step3. PduR模块路由到下层模块,调用CanIf模块的CanIf_Transmit函数,数据被传递至下层CanIf
- Step4. CanIf模块调用Can Driver模块Can_Write函数
- Step5. Can_Write函数将访问仲裁、数据长度和数据寄存器,通过Can Driver访问Can HW,将数据写入相应寄存器(通过数数据协议单元PDU)
- Step6. 以POLLING作为CAN 发送的处理方式(三种,详见标准),BSW Scheduler周期性调度Can Driver模块的Can_MainFunction_Write函数
- Step7. Can Driver 通过Can_MainFunction_Write函数访问Can HW中相关寄存器,读取数据供上层确认
- Step8. 读取后,调用CanIf的CanIf_TxComfirmation函数,将数据上传至CanIf
- Step9. CanIf调用PduR模块的PduR_TxConfirmation函数,将数据传到PduR模块
- Step 10. PduR模块路由到Com模块,调用Com_TxConfirmation函数,确认发送状态。
其中1~5为发送阶段,6~10为确认阶段,其中具体的函数调用规则和定义可参见《AUTOSAR- Specification of CAN Interface》。
7.2 报文的接收
报文接收的过程,即服务提供者通知所服务用户的过程(indication),过程与上述确认过程类似,这里不做赘述。
以上就是关于CAN总线技术的基本内容,实际应用中会涉及很多细节,标准中对应章节有规范,对某一方面感兴趣或者有疑问的读者可以后台留言,欢迎交流。