CAN协定是什么

概述

这次的主题是CAN(Controller Area Network)的数据发送结构。让我们来看看在理解CAN通信方面不可缺少的被称为“帧”的通信单位。

CAN定义了表示四种不同信息的帧,称为“数据帧”、“远程帧”、“错误帧”和“超载帧”。

数据帧

在CAN通信中,将发送数据时的传输格式称为数据帧。而且,在该数据帧的形式中存在“标准格式”和“扩展格式”的细节不同的两种格式。

首先,从基本的标准格式开始解说吧。

标准格式

图1表示标准格式的数据帧结构。
图1数据帧(标准格式)
图1中描绘的上一条线表示“隐性”,下一条线表示“显性”,只有显性线的部分为显性固定,只有隐性线的部分为隐性固定。顺便说一下,双方都有线的部分会根据发送的数据而变化是显性的还是隐性的。

各部分的数值表示使用多少比特的长度。另外,在CAN中不进行通信的情况下,总线成为中继,将其称为“总线空闲”。

当从节点发送数据帧时,第一个发送的部分处于显式状态以表示“开始”。这一部分称为“SOF(Start Of Frame)”。通过SOF从总线空闲的继承变化到显式,接收节点可以同步。

继SOF之后发送的是“ID(标识符:Identifier)”。该ID用于识别数据内容和发送节点,但作为另一种功能,决定了通信仲裁的优先顺序。在标准格式中以11位长度构成ID,但在后述的扩展格式中,以该ID(基本ID)和扩展ID的18位长度构成ID。在11位长度的情况下,ID的范围为0x0~0x7FF,可以识别2048种。

ID之后是“RTR”。这是“Remote Transmission Request”的缩写,用于标识数据帧和远程帧。
在数据帧的情况下,RTR是显性的。另外,RTR也与ID同样地用于通信仲裁。

接着RTR的是“控制字段”,该控制字段由各1位长度的预约位r1、r0和4位长的“DLC(Data Length Code)”构成。在标准格式的情况下,保留位r1和r0都是显式固定的。

DLC表示在控制字段之后的“数据字段”中发送多少字节的数据。DLC的设定范围为0~8,在数据字段中可以以1字节为单位发送0~8字节(0~64位)的数据。数据字段是被发送的数据的部分,如上所述,成为由DLC设定的数据长度。此外,在数据字段中,所有字节从最高有效位(MSB)发送。数据字段可以为每个字节设置长度,但设计者可以决定以何种格式分配数据。例如,在分配1字节的数据的情况下,可以直接作为1字节使用,4比特分别使用1比特,剩下的4比特一起使用,8比特各使用1比特等。

在数据字段之后,发送“CRC(Cyclic Redundancy Check)序列”。CRC序列是15位长度,发送节点根据SOF、ID、控制字段、数据字段的发送值进行运算,用CRC序列发送运算结果。然后,接收节点与发送节点一样,根据SOF、ID、控制字段、数据字段的接收值进行运算,通过比较其结果来判断是否能够正常接收。

在CRC序列之后发送“CRC定界符”。这是表示CRC序列结束的分隔符,是1位长度的连续固定。另外,将CRC序列和CRC定界符一并称为“CRC字段”。

接着,发送“ACK(Acknowledgement)间隙”。该ACK间隙为1比特长度,发送节点在该部分进行连续的发送。但是,在接收节点能够正常地接收到CRC字段部分的情况下,在ACK间隙的定时将显式作为确认应答发送。在CAN中,在同时发送显性和隐性的情况下,显性优先,成为显性。因此,在正常通信的CAN网络中,ACK间隙是显式的。但是,由于该ACK间隙只具有1位长,所以不能用于判断CAN网络上的接收节点是否全部正常地进行了接收。最后,只知道存在能够正常接收从发送节点发送的数据帧(到CRC字段的部分)的节点。

在ACK时隙之后发送“ACK定界符”。这是表示ACK间隙结束的分隔符,是1比特长度的连续固定。与CRC字段相同,将ACK间隙和ACK定界符一起称为“ACK字段”。

在数据帧的末尾发送“EOF(End Of Frame)”。EOF是7位长度的后继固定。上一次在“理解CAN协议的基础知识”中进行解说的“比特填充规则”,由于在SOF~CRC序列的结束的范围内适用,所以总线空闲中或EOF不适用。

数据帧的范围为SOF~EOF,但在图1中,EOF结束后有标记为“ITM(Intermission)”。此ITM不包含在数据帧中。ITM为3位长的连续固定,在该ITM结束后成为总线空闲状态。在CAN采用的“CSMA/CA(Carrier Sense Multiple Access With Collision Avoidance)”中,如果不是总线空闲状态,则各节点不能发送,但在下次以后进行解说的“超载帧”中,只有ITM可以发送。

扩展格式

接下来,将描述作为数据帧的另一种格式的“扩展格式”的结构。

图2表示扩展格式的数据帧结构。与标准格式相比,在ID到RTR之间应该可以找到不同的部分。在这里,让我们来看看差异部分。
图2数据帧(扩展格式)
标准格式中的ID在扩展格式中称为“基础ID”,为11位长度,该部分与标准格式相同。

在基本ID之后的是“SRR(Substitute Remote Request Bit)”,是1位长的连续固定。

在SRR之后发送“IDE(Identifier Extension Bit)”,这也是1位长度的连续固定。

在IDE之后发送的是扩展ID的18位长度。基本ID和扩展ID一起为29位长度,由此表示ID。扩展格式的29位长度ID的范围为0x0~0x1FFFFFFF,可以使用536870912种(约5亿4000万种)。主要在SAE J1939中使用(注)。

※注:SAE J1939是为了卡车总线的控制和网络通信而开发的协议,现在不仅限于卡车总线,还广泛应用于建筑机械和农业机械等搭载柴油发动机的车辆和船舶用电子设备等。

远程帧

远程帧用于数据帧的请求,基本结构与从数据帧中除去数据字段的结构(或者,在数据帧中DLC为0,数据字段为0字节)相同(图3)。

远程帧的ID设定请求的数据帧的ID,远程帧的DLC设定请求的数据帧的DLC。与数据帧不同的部分是RTR是连续固定的。通过这种差异,可以使用RTR来识别数据帧和远程帧。
图3远程帧

数据帧和远程帧

CAN通信中的通信方法的基础是从需要数据的节点发送远程帧,并从相应的节点返回数据帧。远程帧对数据进行请求,数据帧对请求进行数据的回复(图4)。
图4数据帧和远程帧
如果使用该方式,则节点内微机的资源不会被收发所占用,仅在必要时可以使用资源,总线占有率也会下降。但是,在频繁的数据交换中,由于需要与必要的数据帧数相同的远程帧,所以反而有可能提高总线占有率。

因此,随着控制的高度化,各节点间的信息交换变得非常多,想出了用与以往方式不同的方法进行通信。

下面,让我们来看看“与传统方法不同的方法”。例如,如果是从各节点自由地发送数据帧、需要数据帧的节点自由接收的方式,则不使用远程帧,仅通过数据帧就能够在各节点实现信息交换。
只有数据帧送信
如果说通过远程帧和数据帧进行交互是“点菜后送菜来的餐厅”的话,各节点发送数据帧并在必要时节点接收数据帧的方法就是“回转寿司”了。也就是说,各节点在需要时接收承载在带式输送机上运送来的数据帧。

通讯调停

在CAN采用的CSMA/CA中,成为总线使用中其他节点不能发送数据帧或远程帧的规格。

但是,实际上不能防止从多个节点同时发送。

因此,有必要进行通信调停。CAN中用于通信仲裁的是图6的ID和RTR(这里以标准格式为例进行说明)。
图6通讯调停
那么,让我们来看看实际的通信调解是如何进行的。
图7示出了从ID0x653和0x65B这两个节点同时发送数据帧的情况。
图7通讯调停例子
在同时发送数据帧的情况下,来自多个节点的开始位置相同。首先发送SOF,SOF为1位长的显式固定,总线的状态为显式。

各节点监视并比较自身发送的节点和总线状态,但在SOF中,判断为各节点自身发送的内容不变,继续发送。

接着,ID每1位发送,但发送中的多个节点的发送位相同,例如,如果从多个节点发送了隐性(0),则总线成为隐性,发送的内容保持不变。

当隐性和显性从不同的节点同时发送时,显式优先,总线的状态成为显性。此时,发送了隐性的节点由于自身发送的状态和总线状态的不同,检测到通信仲裁失败,停止发送。

由此,在从多个节点发生了同时发送的情况下,由于在其他节点进行连续发送时发送了显性的节点在通信仲裁中获胜,所以优先顺序高的ID为0x0,ID的值越小,优先顺序越高。

关于ID的分配,与数据帧的数据字段的分配相同,设计者可以自由地进行分配,但由于通信仲裁时的优先顺序的关系,重要度高的分配需要考虑网络整体,例如减小ID值等。

基本上只用ID就可以进行通信仲裁,为什么RTR也要用于通信仲裁?这是因为,在同时发送相同ID的数据帧和远程帧的情况下,仅靠ID不能进行仲裁。在发生这样的情况的情况下不仅使用ID也使用RTR进行通信仲裁但是在数据帧中RTR是显性的在远程帧中RTR是隐性的所以数据帧优先。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值