目录
概述
1 引子
1.1 一张图认识CAN总线
1.2 CAN物理层实现
1.3 CAN标准规格
2 CAN协议介绍
2.1 数据帧
2.2 遥控帧
2.3 错误帧
2.4 过载帧
2.5 帧间隔
3 详解数据帧(Data Frame)
3.1 仲裁场
3.2 识别符
3.2.1 RTR(远程发送请求位)
3.2.2 IDE 位(扩展格式)
3.3 控制场
4 参考文献
概述
本文介绍CAN总线的相关知识,包括CAN物理层结构,协议内容,数据帧结构,数据帧的组成。通过阅读该文章,能对CAN协议有一个基础性的理解。
1 引子
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要, 1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后, CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。现在, CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。
1.1 一张图认识CAN总线
下图为经典的车载网络的构想示意图,通过这张图可以提炼出如下信息:
1)不同CAN总线网络,其工作的波特率可以不同,例如上图中的波特率分别有: 125kbps、150kbps、500kbps
2)一条CAN总线上可以挂载多个设备
3)多条CAN总线通过网关,可以构成一个CAN网络的拓扑结构
1.2 CAN物理层实现
CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发 送方通过使总线电平发生变化,将消息发送给接收方。
如下表格详细介绍High speed和Low speed的差异。
ISO11898和 ISO11519-2 的物理层特征 :
1.3 CAN标准规格
下图为不同的行业CAN总线定义的使用标准,用户可以根据不同的行业应用场景,选择不同的协议标准。
2 CAN协议介绍
通信是通过以下 5 种类型的帧进行的,其分别为:数据帧、 遥控帧、错误帧、过载帧、帧间隔 。每种帧的作用如下图:
2.1 数据帧
数据帧由 7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、 CRC 场、应答场、帧结尾。数据场的长度可以为 0。
起始帧
它标志数据帧和远程帧的起始,由一个单独的“显性”位组成。只在总线空闲(参见“总线空闲”)时,才允许站开始发送(信号)。所有的站必须同步于第一个开始发送信息的站帧起始前沿(参见“硬同步”)。
仲裁场
仲裁场包括识别符和远程发送请求位( RTR)。识别符:识别符的长度为 11 位。这些位的发送顺序是从 ID-10 到 ID-0。最低位是 ID-0。最高的 7 位( ID-10 到 ID-4)必须不能全是“隐性”。 RTR 位:该位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。
控制场
控制场由 6 个位组成, 包括数据长度代码和两个将来作为扩展用的保留位。 所发送的保留位必须为“显 性”。接收器接收所有由“显性”和“隐性”组合在一起的位。数据长度代码:数据长度代码指示了数据场中字节数量。数据长度代码为 4 个位,在控制场里被发送。
数据场
数据场由数据帧中的发送数据组成。它可以为 0~8 个字节,每字节包含了 8 个位,首先发送 MSB。
CRC场
CRC 场包括 CRC 序列( CRC SEQUENCE),其后是 CRC 界定符( CRC DELIMITER)。 CRC 序列:由循环冗余码求得的帧检查序列最适用于位数低于 127 位〈BCH 码〉的帧。为进行 CRC计算,被除的多项式系数由无填充位流给定,组成这些位流的成分是:帧起始、仲裁场、控制场、数据场(假如有),而 15 个最低位的系数是 0。将此多项式被下面的多项式发生器除(其系数以 2 为模):
应答场
应答场长度为 2 个位,包含应答间隙( ACK SLOT)和应答界定符( ACK DELIMITER)。在应答场 里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙( ACK SLOT) 期间(发送 ACK 信号)向发送器发送一“显性”的位以示应答。
帧结尾
每一个数据帧和远程帧均由一标志序列界定。这个标志序列由 7 个“隐性”位组成。
2.2 遥控帧
远程帧也有标准格式和扩展格式,而且都由 6 个不同的位场组成: 帧起始、仲裁场、控制场、 CRC 场、应答场、帧结尾。
1)遥控帧作用:作为某数据接收器的站通过其资源节点对不同的数据传送进行初始化设置。
2)遥控帧组成: 由 6 个不同的位场组成,其分别为帧起始、仲裁场、控制场、 CRC 场、应答场、帧末尾。
3)遥控帧特性: 与数据帧相反,远程帧的 RTR 位是“隐性”的。它没有数据场,数据长度代码的数值是不受制约的(可以标注为容许范围里 0...8 的任何数值)。此数值是相应于数据帧的数据长度代码。 RTR 位的极性表示了所发送的帧是一数据帧( RTR 位“显性”)还是一遥控帧( RTR“隐性”)。
2.3 错误帧
错误帧由两个不同的场组成。第一个场用作为不同站提供的错误标志( ERROR FLAG)的叠加。第二 个场是错误界定符。
错误帧注意点:
1)“错误被动”的节点要求总线至少有长度为 3 个位时间的总线空闲。因此要求总线必须有空闲时间间隙。
2)错误标志类型:
主动错误标志( Active error flag): 主动错误标志由 6 个连续的“显性”位组成
被动错误标志( Passive error flag): 动错误标志由 6 个连续的“隐性”的位组成,除非被其他 节点的“显性”位重写。
3)检测错误标志方法:
检测到错误条件的“错误主动”的站通过发送主动错误标志,以指示错误。错误标志的形式破坏了从帧起始到 CRC 界定符的位填充规则(参见“编码”),或者破坏了应答场或帧末尾场的固定形式。所有其他的站由此检测到错误条件并与此同时开始发送错误标志。因此,“显性”位(此“显性”位可以在总线上监视)的序列导致一个结果,这个结果就是把各个单独站发送的不同的错误标志叠加在一起。这个顺序的总长度最小为 6 个位,最大为 12 个位。 检测到错误条件的“错误被动”的站试图通过发送被动错误标志,以指示错误。“错误被动”的站等待 6 个相同极性的连续位(这 6 个位处于被动错误标志的开始)。当这 6 个相同的位被检测到时,被动错误标志的发送就完成了。
4) 错误界定符包括 8 个“隐性”的位 错误标志传送了以后,每一站就发送“隐性”的位并一直监视总线直到检测出一个“隐性”的位为止。然后就开始发送 7 位以上的“隐性”位。
2.4 过载帧
过载帧包括两个位场:过载标志和过载界定符。 有两种过载条件都会导致过载标志的传送:
1).接收器的内部条件(此接收器对于下一数据帧或远程帧需要有一延时)。
2).间歇场期间检测到一“显性”位。 由过载条件 1 而引发的过载帧只允许起始于所期望的间歇场的第一个位时间开始。而由过载条件 2 引发的过载帧应起始于所检测到“显性”位之后的位。
3) 过载标志 过载标志由 6 个“显性”的位组成。过载标志的所有形式和主动错误标志的一样。过载标志的形式破坏了间歇场的固定形式。因此,所有其他的站都检测到一过载条件并与此同时发出过载标志。万一有的节点在间歇的第 3 个位期间于本地检测到“显性”位,则其他的节点将不能正确地解释过载标志,而是将这 6 个“显性”位中的第一个位解释为帧的起始。这第 6 个“显性”的位破坏了产生错误条件的位填充的规则。
4)过载界定符 过载界定符包括 8 个“隐性”的位。过载界定符的形式和错误界定符的形式一样。过载标志被传送后,站就一直监视总线直到检测到一个从“显性”位到“隐性”位的发送(过渡形式)。此时,总线上的每一个站完成了过载标志的发送,并开始同时发送 7 个以上的“隐性”位 。
2.5 帧间隔
数据帧(或远程帧)与其前面帧的隔离是通过帧间空间实现的,无论其前面的帧为何类型(数据帧、远程帧、错误帧、过载帧)。所不同的是,过载帧与错误帧之前没有帧间空间,多个过载帧之间也不是由帧间空间隔离的。
3 详解数据帧(Data Frame)
数据帧由 7 个不同的位场组成:帧起始( Stsrt of Frame)、仲裁场( Arbitration Frame)、控制场( Control Frame)、数据场( DataFrame)、 CRC 场( CRC Frame)、应答场( ACK Frame)、帧结尾( End of Frame)。数据场的长度可以为 0。
3.1 仲裁场
3.2 识别符
1)识别符—标准格式 识别符的长度为 11 位,相当于扩展格式的基本 ID( Base ID)。这些位按 ID-28 到 ID-18 的顺序发送。最低位是 ID-18。 7 个最高位(ID-28 - ID-22)必须不能全是“隐性”。 2)识别符—扩展格式 和标准格式形成对比,扩展格式由 29 位组成。其格式包含两个部分: 11 位基本 ID、 18 位扩展 ID。基本 ID:基本 ID 包括 11 位。它按 ID-28 到 ID-18 的顺序发送。它相当于标准识别符的格式。基本 ID定义扩展帧的基本优先权。 扩展 ID:扩展 ID 包括 18 位。它按 ID-17 到 ID-0 顺序发送。
3.2.1 RTR(远程发送请求位)
识别符其后是 RTR 位。RTR 位(标准格式以及扩展格式)RTR 的全称为“远程发送请求位( Remote Transmission Request BIT)”。RTR 位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”扩展格式里,基本 ID 首先发送,其次是 IDE 位和 SRR 位。扩展 ID 的发送位于 SRR 位之后。 SRR 位(扩展格式)SRR 的全称是“替代远程请求位( Substitute Remote Request BIT)”。SRR 是一隐性位。它在扩展格式的标准帧 RTR 位位置,因此代替标准帧的 RTR 位。因此,标准帧与扩展帧的冲突是通过标准帧优先于扩展帧这一途径得以解决的,扩展帧的基本 ID(参见以下的“扩展识别符”)如同标准帧的识别符。
3.2.2 IDE 位(扩展格式)
IDE 的全称是“识别符扩展位( Identifier Extension Bit)”,标准格式里的 IDE 位为“显性”,而扩展格式里的 IDE 位为“隐性”。IDE 位属于 :
-
扩展格式的仲裁场
-
标准格式的控制场
3.3 控制场
控制场由 6 个位组成。标准格式的控制场格式和扩展格式的不同。标准格式里的帧包括数据长度代码、IDE 位(为显性位,见上文)、及保留位 r0。扩展格式里的帧包括数据长度代码和两个保留位: r1 和 r0。其保留位必须发送为显性,但是接收器认可“显性”和“隐性”位的组合。
4 参考文献
1)CAN入门教程.pdf
2) CAN-bus规范V2.0 中文版.pdf