首页>>科技 >>内容

can总线和485总线区别,CAN总线通信协议的基础知识

发布时间:2023-09-17 12:26:38编辑:温柔的背包来源:

很多朋友对can总线和485总线区别,CAN总线通信协议的基础知识不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

can总线和485总线区别,CAN总线通信协议的基础知识

引言本文将介绍CAN总线通信协议的基础知识。目前内容只是通用协议部分,暂时不涉及具体外围模块的使用。通信协议的具体内容主要是看建立通信的物理环境(信号和总线拓扑),通信过程的对象(通信帧)和交互过程(通信或握手过程)。

在后面的文章中,本文所描述的协议的实现将会是需求,结合具体的IP外设和支持软件,基于具体的硬件电路来实现功能。CAN总线应用有两个ISO国际标准:ISO11898和ISO11519。其中包括:

ISO11898定义了高速CAN通信标准,通信速率为125 kbps~1Mbps,属于传输速率为1Mbps,总线长度 40米的闭环总线。ISO11519定义了低速CAN通信标准,通信速率为10 ~ 125 kbps,属于开环总线。当传输速率为40kbps时,总线长度可达1000米。

温馨提示:总线的传输速率,也称总线的通信速率,是指比特率,或称比特速率(与波特率不一样),表示单位时间内在通信线路上传输的二进制比特数,其基本单位是bps或b/s(比特每秒)。波特率强调传输数据的同步载波信号的速率。

为了满足汽车车载系统的不同要求,主要采用高速CAN和低速CAN。两条总线以不同的总线速度工作,以获得最佳的性价比,CAN网关用于连接两条总线。

高速CAN总线(power bus)的传输速率范围从125 kbit/s到1 mbit/s,主要用于传输系数的实时性要求(如发动机控制、自动变速箱控制、行驶稳定系统、仪表组等。).低速CAN总线(舒适总线)的传输速率范围从5kbit/s到125kbit/s.主要用于舒适系统和车身系统(如空调控制、座椅调节、车窗升降等)的实时数据传输需求。).图1-车内can网络

图十车辆CAN网络示意图CAN总线是一种串行数据通信协议,包括CAN协议的物理层和数据链路层。它可以完成数据位填充、数据块编码、循环冗余校验、帧优先级判别等。其主要特点如下:

工作在多主机模式下,网络上的任何节点(不离开总线)都可以随时向总线网络释放消息帧。节点发送的消息帧可以分为不同的优先级,以满足不同的实时性要求。使用CSMA/CD技术,当两个节点同时发布信息时,高优先级消息可以不受影响地传输数据。节点总数实际上可以达到110。使用短帧结构,每帧最多有8个有效字节的数据负载。

短帧的优点是收发速度快,实时性好,干扰概率低,抗干扰能力强。当一个节点出现严重错误时,它具有自动关机功能,切断与总线的连接,使总线上的其他操作不受影响。CAN总线信号和拓扑(物理层)CAN总线采用双线差分传输,两条线分别作为CAN_H和CAN_L,端子配有120的电阻。

当CAN收发器接收到总线信号时,将信号电平转换为逻辑状态,即减去CAN_H和CAN_L电平后,得到差分电平。各种干扰(如点火系统)对两条线的影响是一样的,相减后得到的插值电平可以过滤这些干扰(共模抑制)。

图-CAN总线-连接图x CAN总线连接CAN总线时有两种逻辑电平状态,即显式和隐式。显性水平代表“0”,隐性水平代表“1”。采用不归零编码,即在两个相同的电平之间不强制插入零状态电平。

高速CAN传输隐性状态位时,CAN_H和CAN_L上的电平位均为2.5V;发送主状态位时分别为3.5V和1.5V。当低速CAN发送隐性状态位时,CAN_H上的电平为0V,CAN_L上的电平为5V。当发送主状态位时,CAN_H上的电平为3.6V,CAN_L上的电平为1.4V。图-CAN-电压-高速图X高速CAN总线上的信号电平图-CAN-电压-低速

图X低速CAN总线上的信号电平为了保证通信的正确性,总线信号必须在一定时间内出现在总线上,并被正确采样。总线信号传输存在一定的时间延迟,最大可靠总线波特率与总线长度有关。各种总线长度在ISO11898定义如下:

1Mbit/s总线长度为40m(规格)。500kbit/s总线的最大长度为100m(推荐值)。250kbit/s总线的最大长度为250m。125kbit/s总线的最大长度为500m。40kbit/s总线的最大长度为1000m。连接到CAN总线的设备需要满足某些条件:

CAN通信电缆是传输数据的通道,实现了节点的互联。主要有:普通双绞线、同轴电缆、光纤。CAN微控制器,一种嵌入了部分或全部CAN控制模块和相关接口的通用微控制器。现在很多芯片都配有CAN接口。CAN收发器,转换绝对电平信号表示的数据帧和差分信号表示的通信帧。集成有CAN外设模块的微控制器连接到CAN总线,如图X所示.数字传输器

图x 微控制器通过CAN收发器接入CAN总线在这块电路中,CAN外设同CAN收发器之间的两根信号线CAN_TX和CAN_RX是单方向的位数据流,分别对应发送数据和接收数据,用绝对电平表示数据位;CAN收发器同总线之间的两根信号线CAN_H和CAN_L的数据方向是双向的,走的是差分电平信号。用逻辑分析仪可以观察CAN_TX和CAN_RX上的数据帧,如图x所示。

至于CAN_H和CAN_L上的差分信号,可以通过示波器直接观察,或者通常会使用“CAN分析仪”,一种可以抓CAN通信帧的抓包工具,将在后续文章中介绍。

figure-can-tx-line-waveform

图x CAN_TX线上的信号波形## CAN通信帧格式

在CAN总线上,报文是以“帧”来发送的,每一帧都包含以下几个部分:

SOF帧起始:在总线空闲时,总线为隐性状态。帧起始由单个显性位构成,标志着报文的开始,并在总线上起着同步作用。仲裁段:仲裁段定义了报文的标识符,俗称ID。在CAN2.0A规范中,标识符为11位,而在CAN2.0B中扩展到了29位。这意味着在2.0B中可以存在更多不同类型的报文,但是也降低了总线的利用率。仲裁段还包含RTR远程帧/数据帧控制位。

DLC控制段:定义了数据域字节的长度。通过数据长度码,接收节点可以判断报文数据是否完整。DATA数据域:包含有0~8个字节数据。实际有效的数据负载。此处仅是基本CAN协议的定义,在CAN FD协议的通信帧中,有效数据负载可以达到64字节,在更高速的CAN XL协议中,定义有效数据负载可达2048字节。

CRC域:CRC又称循环冗余码校验(Cyclical Redundancy Check),是数据通信中常见的查错方法。ACK域:用于接收节点的反馈应答。EOF帧结束:由一串7个隐性位组成,表示报文帧的结束。CAN标准帧结构如图x所示。

figure-can-frame-standard

图x CAN标准帧格式CAN2.0B中新增了扩展帧,扩展帧相对于标准帧,ID标识符字段从11位扩展到29位,可以容纳更多的消息种类。如图x所示。

figure-can-frame-ext

图x CAN扩展帧格式注意,扩展帧的29位ID不是连续的,其中前11位同标准帧相同,之后紧跟着SRR和IDE位(均为1),然后才是接下来的18位ID。

开发CAN总线的过程中,主要关注CAN报文ID和数据域。根据客户的要求,ECU接收自己需要的ID报文的同时,也向外发送别的ECU所需要的ID报文。一般不同整车厂在开发自己的CAN协议规范的同时,也会有自己的校验机制,不满足校验规则的报文,数据将被ECU所遗弃。

CAN网络通信CAN网络将多个CAN节点设备通过总线连接在一起,在通信过程中传递报文消息。通信过程以帧为基本通信单元。总线上节点之间的通信过程大体有节点向总线发送消息,和节点向总线请求消息。

CAN报文帧种类CAN总线报文传输有4种不同的格式:

数据帧:由发送节点发出,包含0 - 8个数据字节。主要用于本节点向总线主动发送数据。远程帧:发送远程帧向网络节点请求发送某一标识符的数据帧。主要用于本节点向总线发出数据请求,被能够提供数据的节点捕获到后,再通过数据帧把消息发送到总线上。错误帧:总线节点发现错误时,以错误帧的方式通知网络上的其他节点。

过载帧:发送过载帧,表示当前节点不能处理后续的报文(如帧延迟等)。Ps:为了保持总线的利用率,在车载CAN总线上数据帧的报文一般均为8字节。

其中关于错误帧监测的错误情况详加说明。CAN总线将错误分为临时性错误和长期性错误。前者主要由外部因素引起,如总线上驱动电压波形不规整、有尖峰或毛刺时,其数据传输性能会受到一定程度的短期干扰。长期性错误则主要由网络组建非正常状况引起,比如接触不良、线路故障、发送器或接收器失效等。

CAN中每个具有数据通信能力的网络单元内部都集成有一个发送错误计数器和接收错误计数器,当该单元在数据发送阶段出现一次错误时,其发送错误计数器自加8;在数据接收阶段出现一次错误时,其接收错误计数器自加1。

在相应计数器内容非0的情况下,网络单元每成功发送一帧,发送错误计数器自减1;每成功接收一帧,接收错误计数内容原本小于127时自减1,大于127时被置为119 - 127之间任意值。这样,如果某个网络单元的错误计数在不断增长,就说明该单元的数据通信在频繁发生故障。当计数器内容超过一定阈值时,可以认为该故障是由长期性错误引起的。

这种机制保证了当某一个节点出现故障的时候,不会造成总线长时间瘫痪。

仲裁机制仲裁是CAN总线应用中一个重要的概念。在CAN总线采用载波侦听多路访问/冲突检测(CSMA/CD)技术。如果总线空闲(隐性位),那么每一个节点都可以开始发送报文。报文以显性位(报文帧开始位)开始,接着是标识符。

如果多个节点同时开始发送报文,那么将使用“线与”仲裁机制(仲裁用逻辑“与”)来解决总线冲突,低电平(显性位)将获得仲裁,从而确定优先级最高的报文,而不需要损失高优先级报文的通信时间或数据(非破坏性仲裁)。仲裁机制使用标识符ID为判断依据,不仅代表报文帧的内容,还代表报文帧发送的优先级。二进制数越小的标识符,优先级越高;反之亦然。

关于报文的标识符ID,这里要强调一个特别有用的知识点。CAN总线仲裁的是报文消息的优先级,而不是节点的优先级(CAN总线上的节点没有优先级)。例如,某个CAN总线节点发送低优先级的报文时,可能被正在进行的高优先级报文通信抢占,但同一个节点发送更高优先级的报文时,就可以获得总线的使用权。

报文的优先级,也就是报文的标识符ID,是由消息的表示的内容决定的。这里面体现了一个“公平”合作的系统,合作的开发者人人不分贵贱,只以任务的重要性获取更多的资源,并且多个开发者可以共同做一个任务,一个开发者也可以做多个不同的任务。整个总线上所有节点构成的系统作为整体调度多任务。

总结本文试图用最简约的描述总结出CAN总线通信协议的要点。CAN总线是一个共享介质的总线结构,因此具备典型的总线型通信方式,例如通信过程建立在总线与节点之间(而不是点对点直连的通信),存在冲突检测和仲裁等。

需要注意的是,CAN总线通信的帧结构,包括各个字段的位置以及含义,这些数据位将以位流的方式出现在总线上,后续使用微控制器上的CAN外设模块,也是在芯片内部的缓冲区按照这些字段组织好数据,交由外设收发引擎将位流转变成电平信号接入总线。

关于CAN总线协议,仍有很多细节尚未在本文中记录,例如CAN总线为了确保电平信号是“中和”的,会将超过连续5个相同的位流电平信号翻转,或是更详细的错误检测判定机制,这些电路系统中的设计,通常已经固化在常规的集成电路中了,对于开发者来说,不需要直接操作。

但如果仍有兴趣继续探究,可以参见标准化文档ISO11989和ISO11519,通读协议有注意读者了解CAN总线通信的全貌,便于理解设定一些规则的来由,对于调试环节也大有裨益。

以上知识分享希望能够帮助到大家!