CAN总线协议

本文介绍了CAN总线的基本概念、协议内容及其特点。CAN最初应用于汽车领域,现已拓展至过程工业等多个领域。文中详细阐述了CAN的媒体访问控制子层概念、报文传输结构以及位定时要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CAN 即控制器局域网,最初是德国 BOSCH 公司为汽车的监测与控制而设计的,以解决汽车众多控制设备与仪器仪表之间的大量数据交换用硬件接线带来的问题。当今 CAN 的应用已不再局限于汽车行业,而向过程工业、机械工业、机器人、数控机床、医疗器械和传感器等领域发展。

 

1 CAN总线基本概念

 

    依据国际标准化组织/开放系统互连(International Standardi-zation OrganizationOpen SystemInterconnectionISOOSI)参考模型,CANISOOSI参考模型的层结构如图7-6所示。下面对CAN协议的媒体访问控制子层的一些概念和特征做如下说明:
 


(1)报文(Message)  总线上的报文以不同报文格式发送,但长度受到限制。当总线空闲时,任何一个网络上的节点都可以发送报文。

 

(2)信息路由(Information Routing)  CAN中,节点不使用任何关于系统配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在CAN中增加节点。

 

(3)标识符(Identifier)  要传送的报文有特征标识符(是数据帧和远程帧的一个域),它给出的不是目标节点地址,而是这个报文本身的特征。信息以广播方式在网络上发送,所有节点都可以接收到。节点通过标识符判定是否接收这帧信息。   

(4)数据一致性应确保报文在CAN里同时被所有节点接收或同时不接收,这是配合错误处理和再同步功能实现的。

 

(5)位传输速率不同的CAN系统速度不同,但在一个给定的系统里,位传输速率是唯一的,并且是固定的。

 

(6)优先权  由发送数据的报文中的标识符决定报文占用总线的优先权。标识符越小,优先权越高。

 

(7)远程数据请求(Remote Data Request)  通过发送远程帧,需要数据的节点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名。

 

(8)仲裁(Arbitration)  只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符的逐位仲裁可以解决这个碰撞。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送,如果发送的是“隐性”电平而监视到的是“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态。

 

(9)总线状态  总线有“显性”和“隐性”两个状态,“显性”对应逻辑“ 0 ,“隐性”对应逻辑“ 1 。“显性”状态和“隐性”状态与为“显性”状态,所以两个节点同时分别发送“ 0 和“ 1 时,总线上呈现“ 0 CAN总线采用二进制不归零(NRZ)编码方式,所以总线上不是“ 0 ,就是“ 1 。但是CAN协议并没有具体定义这两种状态的具体实现方式,如图7-7所示。




(10)故障界定(Confinement)  CAN节点能区分瞬时扰动引起的故障和永久性故障。故障节点会被关闭。

 

(11)应答接收节点对正确接收的报文给出应答,对不一致报文进行标记。

 

2 CAN总线协议内容

 

CAN总线的物理层是将ECU连接至总线的驱动电路。ECU的总数将受限于总线上的电气负荷。物理层定义了物理数据在总线上各节点间的传输过程,主要是连接介质、线路电气特性、数据的编码/解码、位定时和同步的实施标准。BOSCH CAN基本上没有对物理层进行定义,但基于CANISO标准对物理层进行了定义。设计一个CAN系统时,物理层具有很大的选择余地,但必须保证CAN协议中媒体访问层非破坏性位仲裁的要求,即出现总线竞争时,具有较高优先权的报文获取总线竞争的原则,所以要求物理层必须支持CAN总线中隐性位和显性位的状态特征。在没有发送显性位时,总线处于隐性状态,空闲时,总线处于隐性状态;当有一个或多个节点发送显性位,显性位覆盖隐性位,使总线处于显性状态。在此基础上,物理层主要取决于传输速度的要求。从物理结构上看,CAN节点的构成如图7-8所示。在CAN中,物理层从结构上可分为三层:分别是物理层信令(Physical Layer SignalingPLS)、物理介质附件(Physical MediaAttachmentPMA)层和介质从属接口(Media DependentInter-faceMDI)层。其中PLS连同数据链路层功能由CAN控制器完成,PMA层功能由CAN收发器完成,MDI层定义了电缆和连接器的特性。目前也有支持CAN的微处理器内部集成了CAN控制器和收发器电路,如MC68HC908GZl6PMAMDI两层有很多不同的国际或国家或行业标准,也可自行定义,比较流行的是ISOll898定义的高速CAN发送/接收器标准。理论上,CAN总线上的节点数几乎不受限制,可达到2000个,实际上受电气特性的限制,最多只能接100多个节点。



CAN的数据链路层是其核心内容,其中逻辑链路控制(Logical Link controlLLC)完成过滤、过载通知和管理恢复等功能,媒体访问控制(Medium Aeeess controlMAC)子层完成数据打包/解包、帧编码、媒体访问管理、错误检测、错误信令、应答、串并转换等功能。这些功能都是围绕信息帧传送过程展开的。

 

3  CAN总线的报文传输和结构

 

    1.报文类型

 

    CAN20B的版本协议中有两种不同的帧格式,不同之处为标识符域的长度不同,含有ll位标识符的帧称之为标准帧,而含有29位标识符的帧称为扩展帧。如CAN12版本协议所描述,两个版本的标准数据帧格式和远程帧格式分别是等效的,而扩展格式是CAN20B协议新增加的特性。为使控制器设计相对简单,并不要求执行完全的扩展格式,对于新型控制器而言,必须不加任何限制的支持标准格式。但无论是哪种帧格式,在报文

传输时都有以下四种不同类型的帧:

 

(1)数据帧(Data )  数据帧将数据从发送器传输到接收器。

 

(2)远程帧(Remote )  总线单元发出远程帧,请求发送具有同一标识符的数据帧。

 

(3)错误帧(Error )  任何单元检测到总线错误就发出错误帧。

 

(4)过载帧(Overload )  过载帧用在相邻数据帧或远程帧之间提供附加的延时。

 

数据帧或远程帧与前一个帧之间都会有一个隔离域,即帧间间隔。数据帧和远程帧可以使用标准帧及扩展帧两种格式。


2.报文帧结构形式

 

在报文传输时,不同的帧具有不同的传输结构,下面将分别介绍四种传输帧的结构,只有严格按照该结构进行帧的传输,才能被节点正确接收和发送。

 

(1)数据帧数据帧格式如图7-9所示。数据帧由七种不同的位域(Bit Field)组成:帧起始(Start of )、仲裁域(Arbitration Field)、控制域(Control Field)、数据域(DataField)CRC(CRC Field)、应答域(ACK Field)和帧结尾(End of )。数据域的长度可以为08个字节。




1)帧起始(SOF):帧起始(SOF)标志着数据帧和远程帧的起始,仅由一个“显性”位组成。在CAN的同步规则中,当总线空闲时(处于隐性状态),才允许站点开始发送(信号)。所有的站点必须同步于首先开始发送报文的站点的帧起始前沿(该方式称为“硬同步”)

 

2)仲裁域:仲裁域如图7-10所示,仲裁域由标识符和RTR位组成,标准帧格式与扩展帧格式的仲裁域格式不同。标准格式里,仲裁域由 1l 位标识符和RTR位组成。标识符位有ID28IDl8。扩展帧格式里,仲裁域包括29位标识符、SRR位、IDE(Identifier Extension,标志符扩展)位、RTR位。其标识符有ID28IDO。为了区别标准帧格式和扩展帧格式,CANl012版本协议的保留位r1现表示为IDE位。IDE位为显性,表示数据帧为标准格式;IDE位为隐性,表示数据帧为扩展帧格式。在扩展帧中,替代远程请求(Substitute Remote RequestSRR)位为隐性。仲裁域传输顺序为从最高位到最低位,其中最高7位不能全为零。RTR的全称为“远程发送请求(Remote TransmissionRequest)”。RTR位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧的标志。




3)控制域:控制域由6位组成,包括2个保留位(r0r1同于CAN协议扩展)4位数据长度码,允许的数据长度值为08字节。

 

4)数据域:发送缓冲区中的数据按照长度代码指示长度发送。对于接收的数据,同样如此。它可为08字节,每个字节包含8位,首先发送的是MSB(最高位)

 

5)CRC校验码域:它由CRC(15)CRC边界符(一个隐性位)组成。CRC计算中,被除的多项式包括帧的起始域、仲裁域、控制域、数据域及15位为0的解除填充的位流给定。此多项式被下列多项式X15+X14+X10+X8+X7+X4+X3+1(系数按模2计算),相除的余数即为发至总线的CRC序列。发送时,CRC序列的最高有效位被首先发送/接收。之所以选用这种帧校验方式,是由于这种CRC校验码对于少于127位的帧是最佳的。

 

6) 应答域:应答域由发送方发出的两个 ( 应答间隙及应答界定 ) 隐性位组成,所有接收到正确的 CRC 序列的节点将在发送节点的应答间隙上将发送的这一隐性位改写为显性位。因此,发送节点将一直监视总线信号已确认网络中至少一个节点正确地接收到所发信息。应答界定符是应答域中第二个隐性位,由此可见,应答间隙两边有两个隐性位: CRC 域和应答界定位,如图 7 -1l 所示

 

7)帧结束域:每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。这样,接收节点可以正确检测到一个帧的传输结束。

 

(2)错误帧错误帧由两个不同的域组成:第一个域是来自控制器的错误标志;第二个域为错误分界符。其结构如图7-12所示。




 1)错误标志:有两种形式的错误标志。

 

    ①激活(Active)错误标志。它由6个连续显性位组成。

 

②认可(Passive)错误标志。它由6个连续隐性位组成。

 

它可由其他CAN控制器的显性位改写。

 

2)错误界定:错误界定符由8个隐性位组成。传送了错误标志以后,每一站就发送一个隐性位,并一直监视总线直到检测出1个隐性位为止,然后就开始发送其余7个隐性位。

 

(3) 远程帧   远程帧也有标准格式和扩展格式,而且都由 6 个不同的位域组成:帧起始、仲裁域、控制域、 CRC 域、应答域、帧结尾。与数据帧相比,远程帧的 RTR 位为隐性,没有数据域,数据长度编码域可以是 0 8 个字节的任何值,这个值是远程帧请求发送的数据帧的数据域长度。当具有相同仲裁域的数据帧和远程帧同时发送时,由于数据帧的 RTR 位为显性,所以数据帧获得优先。发送远程帧的节点可以直接接收数据。远程帧结构如图 7-13 所示。
 

 

 

(4)过载帧  过载帧由两个区域组成:过载标识域及过载界定符域。下述三种状态将导致过载帧发送:

 

1)接收方在接收一帧之前需要过多的时间处理当前的数据(接收尚未准备好)

 

2)在帧空隙域检测到显性位信号;

 

3)如果CAN节点在错误界定符或过载界定符的第8位采样到一个显性位节点会发送一个过载帧。

 

过载帧的具体结构如图 7-14 所示。
 


3.位定时要求

 

标称位速率是指理想发送器在没有重新同步的情况下每秒发送的位数量。标称位速率的倒数即为标称位时间。不同的CAN系统中,CAN的位速率不同。但在一个给定的CAN系统中,位速率是一定的,其最大值受所选用的CAN控制器类型、收发器和物理介质等因素的影响,可在一定范围内自由设定。CAN总线的数据传输速率最高可达1Mbits,通常用石英晶体振荡器作为时钟发生器,可以独立地进行位定时的参数设置,这样即使网络中节点之间的时钟周期不一样,仍可获得相同的位速率。

 

可以把标称位时间划分成为几个不重叠的时间片段,它们是同步段、传播段、相位缓冲段1和相位缓冲段2,如图7-15所示。




4 CAN总线特点的分析

 

CAN总线通信接口集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理。CAN总线的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块进行编码。数据帧的标识码可由11位或29位组成,CAN20B规定在标识符的前7位不能同时为逻辑零,这种按数据帧编码的方式,还可使不同的节点同时接收到相同的数据。数据段长度最多为8字节,可满足通常工业领域中控制命令、工作状态及测试数据的一般要求。同时,8字节不会占用过长的总线时间,从而保证了通信的实时性。CAN协议采用CRC,并可提供相应的错误处理功能,保证数据通信的可靠性。CAN具有以下特性:

 

1)CAN为多主方式工作,不分主从,通信方式灵活,通过报文标识符通信,无需站地址等节点信息;

 

2)CAN上的节点信息分成不同的优先级,可满足不同的实时要求;

 

3)CAN采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据,从而大大节省了总线冲突仲裁时间。尤其是在网络负荷很重的情况下,也不会出现网络瘫痪情况;

 

4)CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式的数据传送与接收,无需专门的“调度”;

 

5)CAN的直接通信距离最远可达 10km

 

6)CAN上的节点数主要取决于总线驱动电路,目前可达110个。报文标识符可达2048(CAN2 0A ),而CAN20B的报文标识符几乎不受限制;

 

7)采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果。CAN的每帧信息都有CRC及其他检错措施,降低了数据出错概率。CAN节点在错误严重的情况下具有自动关闭输出功能,以使总线上其他节点的操作不受影响;

 

8)cAN的通信介质可为双绞线、同轴电缆或光纤,选择灵活。

 

    CAN总线在汽车电子系统中已得到广泛应用,成为欧洲汽车制造业的主体行业标准,代表着汽车电子控制网络的主流发展趋势。现代汽车越来越多地采用电子装置控制,例如发动机的定时注油控制,加速、制动控制及防抱死制动系统(ABS)等。世界上很多著名的汽车制造厂商,如Volkswagen(大众)Benz(奔驰)BMW(宝马)Porsche(保时捷)RollsRoyce(劳斯莱斯)Jaguar(美洲豹)等公司都已经采用CAN总线来实现汽车内部控制系统的数据通信。


### CAN总线协议详解 #### 协议概述 CAN(Controller Area Network)是一种高效可靠的串行通信协议,最初由BOSCH公司开发并广泛应用于汽车、工业控制和嵌入式系统领域[^2]。其主要特点是支持多主工作模式、具备强大的抗干扰能力以及高效的仲裁机制。 #### 特性分析 以下是CAN总线的主要特性和优势: - **多主架构**:多个节点可以作为主机发起通信,无需中央控制器协调。 - **优先级管理**:每条消息都附带唯一的ID号,该ID不仅用于标识消息还决定了消息的优先级[^1]。 - **非破坏性仲裁**:当两个或更多节点尝试同时发送数据时,通过基于ID的仲裁算法自动解决冲突,确保高优先级的消息不会被中断。 - **差分信号传输**:利用两条导线(CAN_H 和 CAN_L)进行差分信号传递,增强了系统的抗电磁干扰能力。 - **短帧结构与快速响应**:单次传输的数据量限制在8字节以内,减少了网络负载并加快了反应速度[^1]。 - **错误检测机制**:内置循环冗余校验(CRC),能够有效降低误码率,并提供多种错误标志来保障通讯质量[^1]。 #### 数据帧格式 标准CAN数据帧通常包括以下几个字段: 1. 起始位 (Start of Frame): 表明新消息的到来; 2. ID字段: 定义消息的身份及其相对重要程度; 3. 控制器区域 (Control Field): 显示DLC(数据长度编码)信息; 4. 数据区 (Data Field): 实际携带的信息内容,最多可达八字节; 5. CRC序列: 提供完整性验证手段; 6. 应答槽 (ACK Slot & ACK Delimiter): 接收方在此处确认已成功接收; 7. 结束符 (End Of Frame): 正式结束当前消息周期。 #### 示例代码展示 下面给出一段简单的Python程序模拟如何创建一个基本的CAN消息对象并通过socketcan接口发送出去: ```python import can # 创建一个新的CAN bus实例 bus = can.interface.Bus(bustype='socketcan', channel='vcan0') # 构造一条新的CAN message msg = can.Message(arbitration_id=0x123, data=[0, 25, 50, 75], is_extended_id=False) try: # 尝试向总线上发送此message bus.send(msg) print("Message sent on {}".format(bus.channel_info)) except can.CanError as e: print(e) finally: # 关闭连接 bus.shutdown() ``` 以上脚本展示了怎样借助`python-can`库操作Linux下的虚拟CAN设备(virtual CAN device), 并构建了一个具有特定ID值及四个字节数组形式payload的标准CAN frame. --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值