CAN通讯简介

发布于 2023-2-21 15:31
浏览
0收藏

前言:为什么要写《CAN通讯系列》文章

随着现代汽车不断向前发展,汽车各个控制器相互通讯的内容越来越多,速度越来越快,采用合理的通讯方式非常重要。1983年博世公司提出了基于CAN总线的通讯方案,传输快速且准确等优势,仍会经久不衰。因此我们仍然十分有必要深入掌握这种通讯方式,不仅是当今的需要,也可以依此触类旁通,掌握更多有用的通讯方式,比如以太网。

本系列专注于CAN通讯的分享,不仅会涉及CAN通讯的基本原理,比如总线结构,仲裁机制,数据格式,位定时等概念;也会包括CAN通讯的软硬件实现,比如相关寄存器介绍,驱动器,底层软件等。其中软硬件实现的分享将侧重于软件部分,尤其是基于AUTOSAR 架构的CAN通讯实现,将会详细分析底层软件(BSW)部分的实现。

CAN通讯简介

1. 什么是通讯

为了更好地理解CAN通讯概念,我们借助人与人之间的通讯形式来了解汽车的这种内部通讯模式。当然,首先我们得清楚什么是通讯:


“通讯是两个或两个以上参与者之间交换信息的有意识活动,目的是通过符号和语义规范的共享系统来发送或接收信息。通讯的基本步骤包括通讯意图的形成,信息的组成,信息的编码,信号的发送,信号的接收,信息的解码以及最终的信息解释,这一系列步骤也称之为协议。”

CAN通讯简介-汽车开发者社区

图1 通讯的概念,引自[1]

2. CAN通讯的引入

比较人与汽车之间的交流/通讯行为后发现:两者概念基本相同。当人们想在一个小组中交流时,通常有几种交流的可能性。一种可能性是:如果一个人想与几个人共享某些信息,则他可以以特定的方式发送该信息,并向每个感兴趣的人重复相同的信息,始终遵循某种协议,即确保所发送信息的通信规则。我们可以将这个概念应用于汽车。


过去,如果控制单元,传感器或执行器要发送某些信息,则必须通过特定的通信通道(电缆)将其发送给每个相关方。例如,如果发动机控制单元要与变速箱控制单元共享信息,则它必须对要发送的每个数据使用特定的介质(电缆)。如果后者想向前者发送信息,情况也是如此,这样就导致需要很多电缆,如图2形式。

CAN通讯简介-汽车开发者社区

图2 传统的多线通讯,引自[2]


这样的通讯系统的缺点是什么?大量的接线和连接,这意味着重量,复杂性,潜在的故障和额外的成本。此外,未明确连接以接收该信息的其他单元无法知道该信息。随着控制单元数量的增加也会使其可靠性成为噩梦。所以为了克服所有的这些问题,引入了串行通信,这样电缆连接的数量远少于共享信号所需的数量,所以所需的信息会在数据包中一个接一个地发送信息。

CAN BUS发展历史可参考:en.wikipedia.org/wiki/C

CAN通讯简介-汽车开发者社区

图3 CAN总线通讯,引自[2]

CAN通讯简介-汽车开发者社区

图4 引入串行通信图1的变化,引自[1]

3. CAN通讯的概念

如果我们将串行通信比喻为人类交流,则可以说一个人使用相同的交流通道将其信息发送给其他人,并且每个人都可以根据各自需要获取信息。例如,一个人可能会向一群人大声说“明天会下雨”。这群人都将听到并且也理解该信息,但并非所有人都对此信息感兴趣,因此他们将丢弃它并等待下一条消息。这篇文章也是如此,我通过知乎和公众号发布,您和阅读它的任何人都会收到该信息,并且每个人都决定如何处理它,无论他们是否感兴趣。


这样我们就可以定义有关CAN总线的第一个理论概念,CAN通讯的数据传输方式类似于电话会议或视频会议。一个人(控制单元)发送其数据,将其输入网络,而其他人“共同收听”该数据。其中一部分人对此数据很有趣,因此他们使用它。另一部分人可能对该特定数据不感兴趣并将其丢弃。

CAN通讯简介-汽车开发者社区

图4 CAN通讯方式示意,引自[1]

4. CAN总线架构

在汽车的CAN总线系统中,上述概念已应用于大多数控制单元,能够在某些特定系统之间创建“本地网络”,从而建立不同级别的重要性和传输速度,如下图5。

CAN通讯简介-汽车开发者社区

图5 车辆CAN通信系统示意,A-CAN, B-ECU, C-gateways. 引自[3]


这样有什么好处呢?它是一种可扩展的通讯方法,能够根据需要进行较大且复杂的通讯。


那么这些“本地网络”(图5中powertrain, chassis等)怎么实现?总的来说,通过ISO 的串行通讯协议 ISO-11898 和 ISO-11519所规定的CAN总线架构来实现。


ISO-11898 定义了通信速率为 125 kbps ~1Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米,如图6。
ISO-11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米,如图6。

CAN通讯简介-汽车开发者社区

图6 两类CAN总线,引自[4]


这里CAN通讯速率(位速率)是指单位时间内总线上传输的信息量,即每秒能够传输的二进制位的数量,单位是bit per second,bps。比如位速率为125kbps,意思为一秒传输了125,000 bit,包含了125,000 个二进制事件的信息量。注意位速率与波特率不是同一概念。


位速率与总线长度的关系大致如下图:

CAN通讯简介-汽车开发者社区

上述的高低速CAN总线架构广泛应用于汽车,比如动力网采用高速CAN总线架构,舒适网采用低速CAN总线架构,如下图7所示。

CAN通讯简介-汽车开发者社区

图7 总线应用,引自[5]

5. CAN总线结构

了解了高低速CAN两种总线架构的基本概念后,再了解CAN总线的具体结构。将上图6细化,我们可以看到两种CAN总线结构都有CAN_H,CAN_L两根线和多个节点。其中CAN_H和CAN_L线是以双绞形式缠绕,每个节点都有CAN收发器(transceiver)和CAN控制器(controller),CAN收发器和CAN控制器可能集成在芯片(on-chip),也可能是独立于芯片(off-chip)。(图7列举了两种CAN收发器--TJA1054和82C250)

CAN通讯简介-汽车开发者社区

图8 两类CAN总线的具体结构,引自[6]

CAN通讯简介-汽车开发者社区

双绞线如何抗干扰,参考:zhuanlan.zhihu.com/p/26

6. CAN总线信号

CAN总线上,信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1。其具体定义可通过下图9来理解。

CAN通讯简介-汽车开发者社区

图9 ISO-11898 (高速CAN)和ISO-11519(低速CAN)的CAN信号定义,引自[6]


具体说,如上图第1幅图:当CAN_H和CAN_L的电压均为2.5v,两者电压差为0,就规定CAN信号为隐性电平;当CAN_H的电压为3.5v,CAN_L的电压为1.5v,两者电压差为2V,就规定CAN信号为显性电平。这里实际的规定是:电压差满足定义的一定范围,就可以认为是显性电平或者隐性电平,比如电压差在1.5-2.5v范围,都认为是显性电平。


为了加深理解,看了一段实际采集的电压形式的CAN信号:

CAN通讯简介-汽车开发者社区

图10 高速CAN总线实际电压状态

7. CAN总线信号的传输

上述的电位差(差分电平)与逻辑电平由CAN收发器实现。在发送过程,CAN控制器将CPU传来的信号转换为逻辑电平。CAN收发器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。

CAN通讯简介-汽车开发者社区

图11 CAN信号发送,引自[6]


在接收过程,CAN收发器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

CAN通讯简介-汽车开发者社区

图12 CAN信号接收,引自[6]


通俗地讲,就是发送方通过CAN收发器使总线电平发生变化,将其信息传递到CAN总线上。接收方通过监听总线电平,将总线上的消息读入自己的CAN收发器。


文章转载自公众号:汽车电子与软件

分类
收藏
回复
举报
回复
相关推荐