车载高速 CAN(HighSpeed CAN) 通信基本原理讲解
本文主要以普及 CAN 通信基本原理为目的,如有从事相关领域或者有意从事车载嵌入式开发的读友们欢迎留言探讨。
本文含有关键字如下。
CAN 通信应用,CAN 的概要规格,CAN 特征,CAN 数据通信机制,CAN 数据帧
CAN 通信应用
CAN 是 Controller Area Network(控制器区域网络)的缩写,它是一种串行总线协议,旨在代替用于连接组成车载应用程序的系统和传感器的传统多线配置方法。 CAN 于 1986 年在 SAE 世界代表大会上正式发布,此后于 2008 年被要求在美国销售的车辆上使用 CAN。 在开发 CAN 时,请记住,车载微控制器和设备可以在不通过主机的情况下进行通信。 单线或双线网络数据总线用于组件间通信,并且最高可以达到 1 Mbps 的通信速度。
CAN 网络由多个 ECU(电子控制器单元)组成并且通过事先在 ECU 中写好的代码与所定义好的 ECU 进行互动并且实现汽车制造商所定义好的某一类功能(如汽车上的仪表盘就通过多个 ECU 互动将信息反映在仪表盘上)。车辆内部 CAN 参考图如下。
图 1 CAN 通信应用参考图
CAN 的概要规格
常用到的高速 CAN(HighSpeed CAN)在 ISO11898-2 中的定义如下。
CAN 特征
连接到网络的通信设备一般称为节点,但在 CAN 中,它是电子控制单元(ECU)。通信线路称为总线,向总线传输数据称为总线访问。
图 2 线型总拓扑概念图
ECU(电子控制器单元)是由微控制单元(Microcontroller Unit;MCU) 与收发器(Transceiver)组成。ECU 使用电子控制控制器不仅控制发动机和底盘控制之类的核心,而且还控制诸如前灯,汽车音响和空调之类的电气设备,从而为汽车的电气化和自动化提供支持。
电子控制单元(ECU)一般由 MCU 和 CAN 收发器组成,CAN 收发器向 CAN 总线或者 MCU 负责传输和接收 CAN 帧(CAN Frame),MCU 则按照 CAN 通信协议进行进一步处理。
图 3 ECU 组成概念图
CAN 的特性如下所示。
1. 线型总线拓扑
连接多个节点的网络拓扑结构(对网络的形状进行建模)有环型、星型和线型,但 CAN 采用线型。 它具有简单的结构,可以轻松添加和删除节点以及设计网络。
图 4 CAN 线型总拓扑概念图
2. 多主竞争式总线结构,其中所有电子控制单元 (ECU) 都充当主站
只要总线空闲,就可以从任何单元开始通信。
无需指定电子控制单元(ECU)即可发送,任何电子控制单元(ECU)都可以成为主站。
3. 通过 CSMA/CA 方法根据优先级访问总线
提前访问总线的单元可以获得发送权。
如果多个单元同时开始发送,则发送优先级高(ID 值较小)的报文的电子控制单元(ECU)获得发送权。在 CSMA/CA 方式中,尽量避免在使用总线的同时从其他节点传输数据,但现实中存在多个节点同时传输数据而发生冲突的情况。CAN 具有确定其优先级的通信仲裁机制。
4. 使用差分电压传输提高抗噪性能
通过两条通信线(双绞线)产生的电压差传输数据。
CAN 使用称为 CANH / CANL 的通信线路执行传输和接收。没有电位差的信号称为隐性(Recessive)信号,其逻辑值为 1。具有电位差的信号称为显性(Dominant)信号,其逻辑值 0。如果通信总线上发生显性和隐性(Recessive)冲突,则显性(Dominant)优先。
由于从外部施加的噪声是相同的,因此不会产生电压差,即使产生噪声也不易受到影响。
图 5 CAN 差分电压原理图
5. 错误检测和处理
所有电子控制单元(ECU)都可以检测到错误。
检测到错误的电子控制单元(ECU)立即将错误通知所有其他电子控制单元(ECU)。当发送消息的电子控制单元(ECU)检测到错误时,它会强制终止传输并重复传输,直到消息正常传输为止。
CAN 数据通信机制
CAN 通信以称为帧(Frame)的单位进行。
每个祯·(Frame)的作用如下所示。
l 数据帧(Data Frame)
发送单元向接收单元发送数据的帧。
l 远程帧(Remote Frame)
接收单元请求发送单元发送数据的帧。
l 错误帧(Error Frame)
当在传输/接收过程中检测到某些错误时,用于通知其他单元错误的帧。
l 超载帧(Overload Frame)
接收单元通知它未准备好接收的帧。
在 CAN 中,通过从需要数据的 ECU 发送远程帧并从具有该数据的 ECU 返回数据帧来建立通信。 排除数据帧中的控制位,实际可传输的最大数据量为 8 个字节(CAN FD 最多 64 个字节)。
近年来,各个 ECU 之间的信息交换量变得非常大,因此为了降低总线占用率,很少使用远程帧,常见的是周期性地向各个 ECU 传输数据帧的方法。
CAN 数据帧
数据帧有两种帧格式:标准格式(Standard Format)和扩展格式(Extended Format)。
在扩展格式中,在 Base ID 11bit 的基础上增加了 ID Extension 18bit,可以表示一个总长度为 29bit 的 ID。
如果标准格式和扩展格式同时发送相同的 ID,则标准格式优先。
l 标准格式(Standard Format):
图 6 标准格式(Standard Format)数据帧
SOF(Start Of Frame),是一个 1 位显性区,用于通知数据帧的开始。
Arbitration Field(仲裁领域),判断帧优先级的区域。
Base ID:设置标准 ID 11 位
RTR:区分数据帧和远程帧
Control Field(控制领域),由 IDE、FDF、DLC 组成的区域。
IDE:区分标准格式和扩展格式
FDF:区分 CAN 和 CAN FD 的位
DLC:代表数据长度
Data Field(数据字段),储存数据的区域。
CRC Field(CRC 字段),判断帧传输错误的区域。
ACK Field(确认字段),表示正常接收信号的区域。
EOF(End Of Frame),用于通知数据帧结束的区域。
l 扩展格式(Extended Format) :
图 7 扩展格式(Extended Format)数据帧
仲裁字段和控制字段在扩展格式上不同于标准格式,其余部分与标准格式相同。
扩展格式是一种常用于公共汽车和卡车等大型车辆的 CAN 通信的格式。
Arbitration Field(仲裁领域),判断帧优先级的区域。
Base ID:设置标准的 11 位 ID
SRR:1 位隐性固定,带替代远程请求位
IDE:标识符扩展位用于区分 1 位隐性固定、标准格式和扩展格式。
ID Extension:可设置 18 位扩展 ID,与 Base ID 共可显示 29 位 ID。
RTR:区分数据帧和远程帧
Control Field(控制领域),由 FDF、r0、DLC 组成的区域。
FDF:区分 CAN 和 CAN FD 的位
R0:保留区域
DLC:表示数据长度
作者:嵌入式攻城狮
文章来源:上汽零束 SOA 开发者论坛
原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7531
评论