
控制器局域网路或 CAN 协议是嵌入在车辆内的电子设备之间通信的一种方法,如发动机管理系统、主动悬架、中央锁定、空气调节、安全气囊等。
这个想法是由罗伯特·博世有限公司于1983年提出的,目的是提高汽车的质量和安全性,提高汽车的可靠性和燃油效率。
博世的 CAN 协议于1986年首次发布,也提供了通信方面的进步。
这一点意义重大,因为当时电子和半导体行业的发展带来了新技术,但也给汽车行业的工程师带来了挑战。
例如,电子产品提供了更多的功能和复杂性,包括设备之间“通信”的能力。
汽车工程师经常被赋予合并这些设备的任务,以确保他们工作时没有错误。
CAN 简化了这一过程,不同的电子模块可以通过使用一条共同的电缆相互通信。
对 CAN 的需求汽车包含一个电子设备网络,这些设备相互之间共享数据和信息。
例如,一个火花点火,需要一个火花来启动燃烧室。
在这里,时机很重要。
为了确保这种情况的准确发生,它与车辆的发动机控制单元“沟通”,选择理想的点火时间,以提供动力和燃油效率。
设备间通信的另一个例子包括汽车变速器控制单元的通信。
它利用来自发动机控制单元和系统中各种传感器的数据,自动改变车辆的齿轮与其速度的关系。
每个电子设备都有一个 ecu/MCU (电子/微控制器控制单元) ,它有自己的一套规则来共享和传输信息。
然而,对于两个或更多的设备进行交互,它们必须配备硬件和软件以正确地进行通信。
在 CAN 应用于汽车之前,每个电子设备都是通过电线(或者更具体地说,点对点布线)连接到另一个设备上的。
当功能是基本的时候,这种方法就足够有效了。
但随着电子技术的进步,汽车工程师面临的主要问题之一是如何将不同设备的 ecu 连接起来,以便实时信息交换。
CAN 协议就是为解决这个问题而设计的。
CAN 协议中点对点布线连接的一个示例。
该协议设定了电子设备可以通过公共串行总线彼此交换信息的规则。
它减少了线路连接和整个系统的复杂性。
显示使用 CAN 协议的设备之间连接的算法图。
时间异步发射/接收的标准技术不能支持多域通信。
域是一组电子设备,它们具有在系统中正常工作的类似要求。
例如,CD/DVD 播放器、 GPS 以及监视器和显示器形成一个域。
同样,仪表板,空调系统(或气候控制) ,雨刷,灯,门锁形成另一个领域。
汽车上的电子设备可以分为不同的领域,CAN 总线方便了多领域的通信,对汽车工程师有很大的帮助。
汽车上的电子设备可以分为不同的领域,CAN 总线方便了多领域的通信,对汽车工程师有很大的帮助。
CAN 协议支持的车辆多域通信。
CAN 协议是在电子设备网络中发送和接收消息的一套规则。
它定义了数据如何在网络中从一个设备传输到另一个设备。
有趣的是,CAN 是以汽车工业为特定重点发展起来的,但它的架构和优势已经导致其他几个行业(如铁路、飞机和医疗部门)也采用了该协议。
CAN 协议的简化版本。
通过 CAN 协议进行通信的每个电子设备(或节点)都通过一个公共串行总线相互连接,从而允许消息的传输。
为了进行这种数据交换,节点首先需要必要的硬件和软件。
CAN 网络中的各种节点。
如上图所示,一个典型的 CAN 网络由几个节点组成。
每个设备都有一个主机控制器(ECU/MCU) ,它负责特定节点的功能,以及 CAN 控制器和收发器。
CAN 控制器根据 CAN 协议从节点转换消息,然后通过 CAN 收发器在串行总线上传输消息,反之亦然。
控制器是嵌入在节点的主机控制器中或单独添加的芯片。
CAN 协议没有遵循主从结构,这意味着每个节点都可以在 CAN 总线上读写数据。
当节点准备发送数据时,它检查总线的可用性并将 CAN 帧写入网络。
帧是一种在网络中承载有意义的位或字节数据序列的结构。
有两种类型的协议: 地址协议或基于消息的协议。
在基于地址的协议中,数据包包含消息所针对的设备的地址。
在基于消息的协议中,每个消息都由预定义的 ID 而不是地址来标识。
CAN 传输帧通常是一个基于消息的协议。
消息是一个包含信息的数据包。
CAN 消息由10个字节的数据组成,这些数据组织在一个特定的结构(称为帧)中。
每个字节中的数据是在 CAN 协议中定义的。
所有使用 CAN 协议的节点都会接收到一个帧,CAN 根据节点的 ID 来“决定”是否接受它。
如果多个节点同时发送消息,优先级最高的节点(即仲裁 ID 最低的节点)将接收总线访问。
低优先级节点必须等到总线可用。
好处低成本: 由于 CAN 串行总线使用两条线(具有高容量和低成本的生产) ,它提供了一个良好的性价比。
可靠性: CAN 提供了优秀的错误检测和错误处理机制,提供了高度可靠的传输,并且在很大程度上对电磁干扰免疫。
灵活: CAN 节点不受协议的限制,可以很容易地连接或断开。
快速: CAN 支持1mbit/s@40m 总线长度的数据速率。
多主通信: 任何节点都可以访问总线故障限制: 故障节点不干扰通信。
广播能力: 消息可以发送到一个/多个/所有节点。
标准化: ISO 通过 ISO-dis 11898(用于高速应用)和 ISO-dis 11519-2(用于低速应用)标准化了 CAN 协议。
CAN 协议也被工业组织标准化,例如汽车工程师协会。
CAN 体系结构CAN 协议使用现有 OSI 参考模型在网络中连接的节点之间传输数据。
OSI 参考模型表示一组七个层,在连接设备之间的通信过程中数据通过这些层。
OSI 模型的七层结构是可靠的,广泛应用于多种通信协议。
CAN 体系结构。
每个层都有其特定的功能,支持上面和下面的层如下所述应用层它是用户和应用程序访问网络服务的窗口。
其共同功能包括资源共享、远程文件访问、网络管理、电子消息等。
表示层该层最重要的功能是定义 ASCII 文本、 EBCDIC 文本 BINARY、 BCD 和 JPEG 等数据格式。
它充当数据的转换器,将数据转换成应用层在接收端使用的格式。
会话层它允许在两个不同设备上运行的进程之间建立、通信和终止会话,执行安全性、名称识别和日志记录。
传输层传输层确保消息按顺序无差错地传递,并且没有丢失或重复。
它解除了较高层与他们之间的数据传输的任何关注。
网络层它提供端到端逻辑寻址系统,以便一个数据包可以跨越多个层进行路由,并建立、连接和终止网络连接。
数据链路层它将原始数据打包到从物理层传输的帧中。
这一层负责将帧从一个设备传输到另一个设备而不出错。
发送帧后,它等待接收设备的确认。
数据链路层有两个子层:{ C1.MAC 层: 它执行帧编码、错误检测、信令、序列化和反序列化。
LLC (逻辑链路控制)层: LLC 子层提供了多路复用机制,使得多个网络协议(IP、 Decnet 和 Appletalk)可以在多点网络中共存并通过相同的网络媒介传输。
它在接收和提供节点到节点的流量和差错控制时,完成 MAC 层传输的多路复用协议的传输和解码功能。
物理层物理层从一个设备向另一个设备传输位,并调节位流的传输。
它定义了用于传输协议的特定电压和电缆类型。
它提供了在定义电缆、卡和物理方面的载波上发送和接收数据的硬件方法。
CAN 协议使用较低的 OSI 两层,即物理层和数据链路层。
其余五层是通信层,博世 CAN 规范为系统设计人员提供了可以根据需要进行优化和调整的通信层。
图7: 使用 CAN 协议显示网络各层的框图每个部分的功能如下图所示。
图8: 显示 CAN 网络各部分功能的框图CAN 协议的概念可以用上图来理解。
每个节点都有一个主机控制器,也称为微控制器,这是一个小型低成本的计算机。
主机控制器实现 OSI 模型的应用层。
微控制器从其他电子控制单元(如刹车、转向、电动窗等)收集信息,与其他节点进行通信,并传输到 CAN 控制器。
CAN 控制器结合了数据链路层的逻辑链路控制和 MAC 介质访问控制。
LLC 允许使用每条消息的唯一 ID 对消息进行过滤,然后 MAC 子层帧消息。
一旦构架完成,接下来是仲裁、错误检测和确认,所有这些都来自数据链路的 MAC 子层。
该帧传输到 CAN 传输接收机进行编码和解码。
最后 CAN 传输接收机与 CAN 总线同步,将消息发送到另一个节点。
与 CAN 协议相关的术语。
总线值CAN 协议中的二进制值分为显性位和隐性位。
CAN将逻辑“0”定义为主位。
CAN将逻辑“1”定义为隐性位。
CAN 系统中显性位总是覆盖隐性位。
基于消息的通信消息是一个数据包,它携带着节点之间交换的信息。
CAN 中的每条消息都有一个唯一的标识号。
标识号根据消息的内容指定,并存储在消息标识符中。
这个标识号在网络中也是唯一的,因此当传输节点将数据放在网络上以访问所有节点时,它会检查唯一的 ID 号,以允许消息通过过滤器并忽略其余部分。
这样做是为了节省分类的时间。
使用基于消息的协议,其他节点可以添加而不需要重新编程,因为连接到总线的单元没有像节点寻址那样的识别信息。
因此,总线上连接的任何单元的软件和硬件都不需要更改。
图9: 基于消息的网络 CAN 协议通信示意图信息框架CAN 中的消息是以一种称为帧的格式发送的。
帧是定义的结构,在网络中承载有意义的位或字节数据序列。
数据链路层的 MAC 子层负责消息的帧构建。
有两种类型的帧标准或扩展。
这些帧可以根据标识符字段进行区分。
具有11位标识字段的 CAN 帧称为标准 CAN,具有29位标识字段的 CAN 帧称为扩展帧。
标准框架图10: 图展示了如何在标准 CAN 帧中构建信息标准 CAN 中的各个字段如下-{ c SOF-帧位起始。
它指示消息的开始并用于同步总线上的节点。
字段中占主导地位的位标志着帧的开始。
IDENTIFIER-它有两个用途,一个用来确定哪个节点可以访问总线,另一个用来标识消息的类型。
远程传输请求。
它可以识别数据帧还是远程帧。
RTR 在数据帧时为显性,在远程帧时为隐性。
{ c }{ IDE-标识符扩展。
它用于指定帧格式。
标准框为显性位,延伸框为隐性位。
{ c } R0-反向位。
目前没有使用并保存以备将来使用。
{ c } DLC-数据长度码。
它是包含正在传输的字节数的4位数据长度代码。
{ c } DATA-用于存储最多64个要传输的应用程序数据位。
{ c } CRC-循环冗余校验。
16位(15位加分隔符)循环冗余校验(CRC)包含前面用于错误检测的应用程序数据的校验和。
ACK-Acknowledge (ACK)字段。
它兼顾了 ACK 插槽和 ACK 分隔符。
当数据被正确接收时,接收者将 ACK 槽中的隐性位改写为显性位。
c } EOF-帧结束(EOF)。
7位字段标志着 CAN 帧(消息)的结束并禁用位填充,指示占优时的填充错误。
{ c } IFS-帧间空间,指定分隔连续消息的最小位数。
它提供两帧之间的间歇,由三个隐性位组成,称为间歇位。
这个时间允许节点在下一帧开始之前进行内部处理。
扩展 CAN图11: 扩展的 CAN 网络部件及其功能它与11位标识符相同,只是添加了一些字段{ c SRR-替代反向请求。
SRR 位总是作为隐性位传输,以确保在标准数据帧和扩展数据帧之间进行仲裁的情况下,如果两个消息具有相同的基(11位)标识符,则标准数据帧总是具有优先权。
{ R1-这是另一个当前没有使用的位,保存以备将来使用。
消息框架有四种不同的框架可以在公共汽车上使用。
数据帧——这是最常用的帧,当一个节点向系统中的任何或所有其他节点传输信息时使用。
数据帧由字段组成,这些字段提供有关 CAN 规范定义的消息的附加信息。
数据帧内嵌仲裁字段、控制字段、数据字段、 CRC 字段、2位应答字段和帧结束字段。
图12: CAN 网络中使用的数据帧远程帧-远程帧的目的是为了从另一个节点寻求数据传输的许可。
这类似于没有数据字段的数据帧,RTR 位是隐性的。
例如,控制汽车中央锁定的微处理器可能需要从动力传动控制器了解变速器齿轮选择器的状态。
错误帧——如果发送节点或接收节点检测到错误,它将立即中止传输并发送错误帧,错误帧包括由六个显性位组成的错误标志和由八个隐性位组成的错误标志定界符。
CAN 控制器通过重复发送错误帧,保证节点不会占用总线。
图13: CAN 网络中使用的错误帧重载帧-它类似于错误帧,但用于提供额外的延迟之间的消息。
当一个节点变得太忙而没有准备好接收时,它会生成一个重载帧。
图14: CAN 网络中的过载帧它是一种当两个或多个节点同时发送消息时解决冲突的机制。
在这种技术中,只要总线是空闲的,任何单元都可以传输消息。
如果两个或两个以上的单元同时开始传输,那么总线的访问是冲突的,但是这个问题可以通过使用标识符进行仲裁来解决。
在仲裁过程中,每个发射机都会在总线上比较传输位的值和总线上的位值。
如果位值相同,则节点继续发送位。
但是在任何时候,如果传输的比特值与总线值不同,显性比特就会覆盖隐性比特。
CAN 消息的仲裁域由一个11位或29位 identi? er 和一个远程传输(RTR)位组成。
具有最低数值的标识符具有最高的优先级。
RTR 只是简单地区分 RTR 为隐性的远程帧和 RTR 为显性的数据帧。
如果同时启动具有相同标识符的数据帧和远程帧,则数据帧优先于远程帧。
有了仲裁这个概念,信息和时间都不会丢失。
CSMA 协议的 CANCSMA 是一种载波检测、多址接入协议,其中节点在共享媒体(如电子总线)上传输之前验证没有流量。
在 CSMA 中,总线上的每个节点在发送消息之前等待一个特定的时间。
一旦这个等待期结束,每个节点都有平等的机会发送消息。
根据标识符字段中每个消息的预编程优先级,即优先级最高的标识符获得总线访问权。
它在 OSI 模型的物理层上实现。
让我们用一个例子来理解 CSMA。
在讨论中,每个人都有平等的机会表达自己的想法,但是当一个人说话时,其他人保持安静,倾听并等待他们说话的机会。
但是如果两个或者两个以上的人同时开始说话,那么他们就会发现事实并停止说话(碰撞侦测)。
错误控制错误检查与故障限制这是 CAN 的属性之一,使其更加健壮。
CAN 协议有五种错误检测方法,其中三种在消息级,另外两种在位级。
网络中的每个节点同时接受或拒绝每个帧。
如果一个节点检测到一个错误,它向每个节点发送一个错误标志并销毁发送的帧,发送节点重新发送帧消息级别循环冗余校验在这个阶段,通过发送节点计算一个15位的循环冗余校验,然后在 CRC 字段中发送。
此值由所有节点接收。
然后所有节点计算 CRC 值,并将结果与传输值进行匹配。
如果值不同,则生成错误帧。
由于其中一个节点没有正确接收消息,因此将重发消息。
应答槽当发送节点发送消息时,在确认槽中发送隐性位。
在接收到消息后,应答槽被主位替换,主位将确认至少有一个节点正确地接收到消息。
如果这个位是隐性的,那么所有节点都没有正确地接收到消息。
表单错误帧结束、帧间空间、确认分隔符是始终隐性的字段,如果任何节点在这些字段中检测到显性位,而 CAN 协议将其称为违规,并在一定时间后生成一个表单帧并重新发送原始消息。
位级填写错误比特填充——在通信和数据传输中使用的一种非常常见的技术,通过插入非信息比特来获得相同的比特率或者填充帧。
这些额外的比特被数据链路层删除以检索原始消息。
Can 总线不会因为使用了 NRZ 方法而处于空闲状态。
在同一值的连续五个位之后,带有补码或相反值的位被填充到位流中。
如果在 SOF 和 CRC 分隔符之间检测到相同值的六位,则生成错误帧。
检测到错误后,终止传输并重复帧。
如果错误继续,那么车站或节点可能会自行关闭,以防止总线被绑定。
位错误发送比特的节点总是监视总线。
如果发送端发送的比特值与总线上的比特值不同,则生成错误帧。
但是,在仲裁场或者确认槽中,一个隐性位被发送,一个显性位被接收,这是一个例外。
那么当监视主位时就不会发生位错误。
CAN 协议最初是为汽车车载组网而开发的,现在已经扩展到其他各个行业。
豪华轿车的应用程序已经开始在卡车、公共汽车、火车和有轨车辆等重型车辆上使用。
CAN 总线的独特功能使得各种电子设备之间可以相互通信,这使得它在医疗领域占有重要地位。
例如重症监护病房和手术室,时间和沟通是最重要的。
娱乐业还利用 CAN 协议改进演播室的灯光和门系统控制功能,控制剧院、活动厅等舞台。
赌博机和玩具是娱乐领域的其他例子。
在科学领域,高能实验和天文望远镜都采用 CAN 嵌入式网络。
白纪龙老师从事电子行业已经有15个年头,到目前为止已开发过的产品超上百款,目前大部分都已经量产上市,从2018年开始花了5年的时间,潜心录制了上千集的实战级电子工程师系列课程,该课程从元器件到核心模块到完整产品老白的初心是“愿天下工程师 不走弯路”其中,就有详细讲解MOS管和IGBT的课程