秀文网 > 生活 > 正文

​can总线详细介绍(一文看懂CAN总线)

时间:2025-08-07 14:24

来源:秀文网

点击:

can总线详细介绍(一文看懂CAN总线)

一文看懂CAN总线前言

CAN总线的应用在现在看来越来越广泛,我厂设备从最初的ARM9与ARM7平台、期间升级过度到CortexA8与Cortex M3平台,再到现在的Cortex M4平台,围绕CAN进行了一系列产品的开发,CAN总线的稳定性是毋庸置疑的。

CAN总线物理结构与特性CAN总线网络

CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻,但是为什么是120欧姆呢?那是因为电缆的特性阻抗为120欧。

can总线详细介绍(一文看懂CAN总线)(1)

CAN收发器

CAN收发器的作用是负责逻辑电平和信号电平之间的转换。

can总线详细介绍(一文看懂CAN总线)(2)

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的管教定义如下:

can总线详细介绍(一文看懂CAN总线)(3)

信号表示

CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。

位填充规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。

观察下图:

can总线详细介绍(一文看懂CAN总线)(4)

可以看到上图中的当第一段为隐性(recessive),CAN_H和CAN_L电平几乎一样,也就是说CAN_H和CAN_L电平很接近甚至相等的时候,总线表现隐性的,而两线点位差较大时表现为显性的,按照定义的:

CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为"逻辑1"- 高电平。

CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为"逻辑0"- 低电平。

下面将差分信号和显隐性之间对应关系总结为下表:

状态

逻辑信号

电压范围

显性Dominant

0

CAN_H-CAN_L > 0.9

隐性recessive

1

CAN_H-CAN_L < 0.5

由上面的分析我们可以知道:

CAN总线采用的"线与"的规则进行总线冲裁。即1&0=0;所以0为显性。

这句话隐含的意思是,如果总线上只要有一个节点将总线拉到低电平(逻辑0)即显性状态,总线就为低电平(逻辑0)即显性状态而不管总线上有多少节点处于传输隐性状态(高电平或是逻辑1),只有所有节点都为高(隐性),总线才为高,即隐性。

通讯速率与通讯距离

下面的SAE J2411为美国汽车标准。

类型

标准

最高速率

描述

高速CAN

CAN/ISO 11839-2

1Mbit/秒

最通用的CAN总线类型

低速CAN

ISO/ISO 11839-3

125Kbit/秒

容错,在一条总线短路的时候仍然能工作

单线CAN

SAE J2411

50Kbit/秒

高速模式可达到100Kbit/s主要用在汽车上,例如通用公司

CAN总线上任意两个节点的最大传输距离与其位速率有关,如下表:

位速率/kbps

1000

500

250

125

100

50

20

10

5

最大距离/m

40

130

270

530

620

1300

3300

6700

10000

这里的最大通信距离指的是同一条总线上两个节点之间的距离。可以看到速率越低通讯距离就越远,也就是说CAN总线的通讯距离和波特率成反比。在位速率为5千比特位每秒的时候达到最大的传输距离10公里。其中一般的工程中比较常用的为500K每秒的通讯速率。这个速率在实际测试的时候也是非常可靠的。

can总线详细介绍(一文看懂CAN总线)(5)

如果想要更远的传输(大于10公里);可以考虑用多个CAN控制器连接或是加其他通讯协议(如485或是TCP/IP)的接口芯片组成的一个设备,这样就可实现长距离的通讯需求。

CAN总线关键概念仲裁

只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。

can总线详细介绍(一文看懂CAN总线)(6)

在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送。如果发送的是一"隐性"电平而监视到的是一"显性"电平,那么这个节点失去了仲裁,必须退出发送状态。如果出现不匹配的位不是在仲裁期间则产生错误事件。

帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。

CAN总线协议

CAN 总线是一个广播类型的总线,所以任何在总线上的节点都可以监听总线上传输的数据。也就是说总线上的传输不是点到点的,而是一点对多点的传输,这里多点的意思是总线上所有的节点。但是总线上的节点如何知道那些数据是传送给自己的呢?CAN总线的硬件芯片提供了一种叫做本地过滤的功能,通过这种本地过滤的功能可以过滤掉一些和自己无关的数据,而保留一些和自己有关的信息。

CAN消息机制

CAN标准定义了四种消息类型,每条消息用一种叫做比特位仲裁(Arbitration)机制来控制进入CAN总线,并且每条消息都标记了优先权。另外CAN标准还定义了一系列的错误处理机制。

CAN报文的四种消息类型:

数据帧:数据帧将数据从发送器传输到接收器。

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

错误帧:任何单元检测到总线错误就发出错误帧。

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

数据帧

下图为基本的格式:

can总线详细介绍(一文看懂CAN总线)(7)

CAN总线中有标准帧和扩展帧两种格式,两种格式不同的地方在于仲裁域格式的不同,看下面两个表格可以很清楚的看出两者的不同,下面第一个表是标准帧(CAN2.0 A),第二个为扩展帧(CAN2.0 B):

can总线详细介绍(一文看懂CAN总线)(8)

下面为扩展帧格式(CAN2.0B):

can总线详细介绍(一文看懂CAN总线)(9)

其中

SOF为帧开始

SRR为"替代远程请求位

IDE为扩展标识符位

RTR为远程传输请求位

CRC delimiter 为CRC定界符。

ACK delimiter 为应答定界符.

我们看到上图中的基本帧格式可以总结为以下几个域:

描述

仲裁域

仲裁域决定了当总线上两个或是多个节点争夺总线时的优先权。

数据域

包含了0到8字节的数据。

CRC域

包含了15位的校验和,校验和用来做错误检测。

应答槽

任何一个已经正确接收到消息的控制器在每一条消息的末端发送一个应答位,发送器检查消息是否存在应答位,如果没有就重发消息。

远程帧

作为数据接收器的站,通过发送远程帧,可以启动其资源节点传送它们各自的数据。远程帧和数据帧非常类似,只是远程帧没有数据域。

can总线详细介绍(一文看懂CAN总线)(10)

上图就是远程帧的帧格式,它相对与数据帧没有远程帧,但是要注意发送远程帧的时候RTR位要置1,表示发送的是远程帧。下图更加清晰了呈现了这种结构。

can总线详细介绍(一文看懂CAN总线)(11)

错误帧

错误帧是当总线的某一个节点检测到错误后发送出来的,它会引起所有节点检测到一个错误,所以当有任何一个节点检测到错误,总线上的其他节点也会发出错误帧。CAN总线设计了一套详尽的错误计数机制来确保不会由于任何一个节点反复的发送错误帧而导致CAN总线的崩溃。

can总线详细介绍(一文看懂CAN总线)(12)

如上图所示错误标志和错误定界符组成,高低代表分别代表隐性和显性,其中错误标志为所有节点发过来的错误标志的叠加(Superposition)。下图更为清楚的看出各个数据位的分布:

can总线详细介绍(一文看懂CAN总线)(13)

下面通过以下数据结构框图概括各个部分的定义:

can总线详细介绍(一文看懂CAN总线)(14)

错误标志有两种形式:

主动错误标志,它由6个连续的显性位0组成,它是节点主动发送的错误标志。

被动错误标志,它由6个连续的隐性位1组成,除非被其他节点的显性位覆盖。

刚才说到一个节点上检测到错误会导致总线上所有的节点都会检测到错误并发送错误标志,这是为什么呢?

因为单一节点上的错误标志格式违背了从帧起始到CRC界定符的位填充规则,也破坏了ACK域或帧结尾的固定格式。下面简要说下位填充规则。

位填充规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。

注意:位填充规则只是针对数据帧和远程帧,错误帧和过载帧格式固定。

所以所有其他的节点会检测到错误条件并且开始发送错误标志,因此错误帧就是各个站的不同错误标志叠加在一起的结果。

当某个节点发送错误帧(带有错误标志),其他节点收到了错误帧,检测到错误条件,就通过发送"被动错误标志"的错误帧来提示错误。

错误定界符:

传送了错误标志以后,每一个站就发送一个隐性位,并一直监视总线直到检测出一个隐性位为止,然后就开始发送其余7个隐性位。

过载帧

过载帧是接收节点用来向发送节点告知自身接收能力的帧。

过载帧,意思就是某个接收节点来不及处理数据了,希望其他节点慢点发送数据帧或者远程帧,所以告诉发送节点,我已经没有能力处理你发送过来的数据了。

过载帧跟错误帧结构类似包括过载标志和过载定界符,有3中情况会引起过载:

接收器内部的原因,它需要延迟下一个数据帧或是远程帧。

在间歇字段(看下面的帧间空间)的第一位和第二位检测到一个显性位(间歇字段都是隐性位的)

如果CAN节点在错误界定符或是过载界定符的第八位(最后一位)采样到一个显性位逻辑0,节点会发送一个过载帧,错误计数器不会增加。

can总线详细介绍(一文看懂CAN总线)(15)

can总线详细介绍(一文看懂CAN总线)(16)

上图中很清晰的表示了过载标志有6个显性位组成,而叠加部分和"主动错误"标志一样,过载的标志破坏的是间歇域的固定格式。所以导致其他的节点都检测到过载条件,并一同发出过载标志。

过载定界符:

也就是上图的过载结束符,过载标志被传送以后,节点就一直监听着总线,直到检测到有一个从显性位到隐性位的跳变为止。当从总线上检测到这样的跳变,则就标志着每一个节点都完成了各自过载标志的发送,并开始同时发送其余7个隐性位。

帧间空间(Interframe Space)

帧间空间说白了就是帧与帧之间的间隔,但是这种间隔在CAN的帧中只存在于数据帧和远程帧,其他的帧就不一定是帧间空间隔开的,而是其他形式,或是直接是没有间隔,例如过载帧和错误帧之间就没帧间空间。过个过载帧之间有间隔但是不是有帧间空间隔开的。

这里所说的针间空间包括"间歇"、"总线空闲"的位域。如果是发送前一报文的"被动错误"的站,则还包括叫做"挂起传输"的位域。

若不是"被动错误"的站,或作为前一报文的接收器的站,帧间空间格式为下图:

can总线详细介绍(一文看懂CAN总线)(17)

can总线详细介绍(一文看懂CAN总线)(18)

若是"被动错误"的站,如果想要发送8个隐性电平,在发送其他帧,帧间空间格式为下图,即包括了挂起传输,

can总线详细介绍(一文看懂CAN总线)(19)

可以看到

间歇字段有3个隐性位。

特别的在间歇期间,所有的节点都不允许传送数据帧和远程帧,唯一看做的是标示一个过载条件。

总线空闲

只要总线空闲,任何节点就可以往总线发送数据,并且是开始于间歇之后的第一个位。一旦总线上检测到显性位即逻辑"0",可以认为是帧的开始。

1.

挂起传输

2.

"被动错误"的节点发送报文之后,在下一个报文开始传送之前或是确认总线空闲之前发出8个隐性位跟随在间歇的后面。如果这个时候有一个报文从其他的节点发过来,则这个节点就成为了接收器。

错误处理机制错误侦测

下标是几个错误类型:

错误类型

出错条件

出错域

帧测单元

比特错误

bit error

发送的位值与所监控的位值不相符合(填充比特和ACK比特除外)

数据帧(SOF~EOF)

远程帧(SOF~EOF)

错误帧

过载帧

发送单元

接收单元

填充错误stuff error

侦测到6个连续相同的电平

数据帧(SOF~CRC)

远程帧(SOF~CRC)

发送单元

接收单元

CRC 错误

计算结果和接收到的CRC不同

数据帧(CRC)

远程帧(CRC)

接收单元

格式错误

Form Error

某个固定的格式位置出现无效的比特

数据帧:

(CRC Delimiter, ACK Delimiter EOF)

远程帧:

(CRC Delimiter,ACK Delimiter)

错误帧:

(Error Frame Delimiter)

过载帧:

(Overload Delimiter)

接收单元

应答错误

Acknowledgment

发送端在应答间隙所监视的位不为显性,即逻辑0,发送器就检测到一个应答错误。

数据帧(ACK slot)

远程帧(ACK slot)

发送单元

错误计数

下面是错误计数表:

错误条件

Transmit Error Counter

Receive Error Counter

1

RECEIVER端侦测到一个位Error错误,除了发送ACTIVE ERROR FLAG 和OVERLOAD FLAG

-

1

2

TRANSMITIER 发送ERROR FLAG

8

3

TRANSMITTER发送ACTIVE ERROR FLAG OVERFLAG时侦测到BIT ERROR

8

4

当RECEIVER发送ACTIVE ERROR FLAG或OVERFLAG时侦测到BIT ERROR

8

5

一个帧被成功发送之后(取得ACK并且知道END OF FRAME完成都没有错误)

-1 IF TEC=0,TEC will not be changed

-

6

一个帧被成功接收(知道ACK域都没有检测到错误,并成功发送ACK比特)

-

1. if 1 <= REC <= 127="" -=""> REC-1

2. if REC = 0 -> REC = 0

3. if REC > 127 -> REC = a value

Between 119 to 127

7

在总线上检测到128此连续的11个1,"bus off"的节点允许变成不再是"bus off"

Cleared to TEC = 0

Cleared to REC = 0

错误抑制

为防止某些节点自身出错而一直发送错误帧,干扰其他节点通信,CAN协议规定了节点的3种状态及行为,如下图:

can总线详细介绍(一文看懂CAN总线)(20)

一个节点挂到CAN总线上之后,处于ACTIVE状态;TEC>127或者REC>127导致节点进入passive状态;TEC>255之后节点处于bus off状态,就是不允许再往bus上发送东西了;处于bus off状态的节点,在检测到128个连续的11个1之后将回到active状态。

,

相关标签:

相关推荐

​安禄山之死,唐明皇怎么死的,安禄山怎么死的?

​安禄山之死,唐明皇怎么死的,安禄山怎么死的?

安禄山之死,唐明皇怎么死的,安禄山怎么死的? 唐明皇怎么死的,安禄山怎么死的 唐明皇就是唐玄宗李隆基,他是在宝应元年病逝于长安神龙殿,终年78岁。安禄山是被宦官李猪儿刺...

2025-08-07 14:22:32

​梁洛施身高对比李泽楷(33岁梁洛施22岁生三胎)

​梁洛施身高对比李泽楷(33岁梁洛施22岁生三胎)

梁洛施身高对比李泽楷(33岁梁洛施22岁生三胎) 公众人物中,似乎没有任何一对恋人像梁洛施和李泽楷一样, 分手都已经11年了,外界依旧认为两个人有复合的可能。 而且即便不复合...

2025-08-07 14:20:24

​八宝山有多好(国人心目中神秘的圣土)

​八宝山有多好(国人心目中神秘的圣土)

八宝山有多好(国人心目中神秘的圣土) 从天安门向西行15公里,在石景山路北侧一片葱郁林木下,就是面积达一万余平方米的八宝山革命公墓仿西汉建筑的南大门外,雄踞着两尊石狮...

2025-08-07 14:18:17

​中越战争五一七高地战斗纪实(一场无名高地争夺战历时4天3夜)

​中越战争五一七高地战斗纪实(一场无名高地争夺战历时4天3夜)

中越战争五一七高地战斗纪实(一场无名高地争夺战历时4天3夜) 1952年7月,志愿军第39军115师343团3营,将已在驿谷川前线坚守了数月的该团1营替换了下来。 3营8连驻守上浦坊南山;...

2025-08-07 14:16:10

​最丑男演员巨兴茂和他的老婆(身高1.6米还长相奇特)

​最丑男演员巨兴茂和他的老婆(身高1.6米还长相奇特)

最丑男演员巨兴茂和他的老婆(身高1.6米还长相奇特) “你这个相貌,没啥前途,别再这行混了。” 巨兴茂已经记不得被多少个导演,这样追着骂了。 甚至自己和旗袍女神陈数演对手...

2025-08-07 14:14:03

​少儿图书推荐排行榜(大众喜爱的50种图书)

​少儿图书推荐排行榜(大众喜爱的50种图书)

少儿图书推荐排行榜(大众喜爱的50种图书) 少儿类 / 30进15 ∨∨∨ - 1 - 《兔子作家·马兰花开》 --- 张炜 著 安徽少年儿童出版社 2016年4月 本书以“兔子作家”为主人公,讲述了兔子作...

2025-08-07 14:11:56

​拜法华三昧宝忏如何发愿:探寻慈悲三昧水忏

​拜法华三昧宝忏如何发愿:探寻慈悲三昧水忏

拜法华三昧宝忏如何发愿:探寻慈悲三昧水忏 “彭州市位于川西平原东部,距成都市 33公里,传说中的三昧水圣地则位于彭州市西北12公里的九陇镇的九陇山上。九陇山俗称三昧水,又...

2025-08-07 14:09:50

​晚清第一奇案刺马案来龙去脉(两江总督马新贻被当街刺死)

​晚清第一奇案刺马案来龙去脉(两江总督马新贻被当街刺死)

晚清第一奇案刺马案来龙去脉(两江总督马新贻被当街刺死) 同治九年七月二十六日(1870年8月22日),两江总督马新贻在金陵校阅场查看了军队的训练后在护卫陪同下返回总督辕门,...

2025-08-06 09:58:16

​杰克王红酒价格2008(杰克王2007赤霞珠红葡萄酒)

​杰克王红酒价格2008(杰克王2007赤霞珠红葡萄酒)

杰克王红酒价格2008(杰克王2007赤霞珠红葡萄酒) 杰克王红酒价格2008元/瓶,这个价格对于普通人来说还是比较贵的,毕竟红酒的价格都是不便宜的,不过在国内的一些地方,红酒的价格还...

2025-08-06 09:56:10

​高密 红酒品牌排行榜,高密 红酒品牌有哪些

​高密 红酒品牌排行榜,高密 红酒品牌有哪些

高密 红酒品牌排行榜,高密 红酒品牌有哪些 高密红酒是中国名酒之一,有着深厚的历史文化底蕴。在中国国内,高密红酒品牌也逐渐发展壮大。目前排名前几位的高密红酒品牌包括:...

2025-08-06 09:54:04

​哈尔滨冰白啤酒价格表 哈尔滨冰纯白啤配料表

​哈尔滨冰白啤酒价格表 哈尔滨冰纯白啤配料表

哈尔滨冰白啤酒价格表 哈尔滨冰纯白啤配料表 哈尔滨冰白啤酒价格表。这是哈尔滨冰白啤酒厂生产的第一批冰白啤酒,也是中国最早的啤酒。它的诞生标志着中国啤酒工业的开始。这...

2025-08-06 09:51:58

​互助七彩青稞酒多少钱一瓶 青海互助七彩青稞酒酿造有限公司

​互助七彩青稞酒多少钱一瓶 青海互助七彩青稞酒酿造有限公司

互助七彩青稞酒多少钱一瓶 青海互助七彩青稞酒酿造有限公司 互助七彩青稞酒多少钱一瓶?“我们的产品不仅能解决农民朋友的销售问题,还能带动当地群众增收致富。”青稞酒公司...

2025-08-06 09:49:52

​吉林雪兰山葡萄酒怎么样(雪兰山人参酒多少钱一瓶)

​吉林雪兰山葡萄酒怎么样(雪兰山人参酒多少钱一瓶)

吉林雪兰山葡萄酒怎么样(雪兰山人参酒多少钱一瓶) 吉林雪兰山葡萄酒是一款优质的中国本土葡萄酒品牌,酒体干净、清晰、透亮,口感宜人,具有清新的果香和柔和的酸度。其采用严...

2025-08-06 09:47:47

​湖南乐堡啤酒批发价格表(乐堡啤酒厂家批发价格)

​湖南乐堡啤酒批发价格表(乐堡啤酒厂家批发价格)

湖南乐堡啤酒批发价格表(乐堡啤酒厂家批发价格) 湖南乐堡啤酒批发价格表。 中国质量新闻网讯 2025年4月15日,湖南省湘潭市市场监督管理局网站发布了食品监督抽检信息通告(2025年...

2025-08-06 09:45:41

​奔富红酒169价格多少(原装进口奔富169价格)

​奔富红酒169价格多少(原装进口奔富169价格)

奔富红酒169价格多少(原装进口奔富169价格) 奔富红酒169价格多少?一般来说,红酒的价格主要由两部分组成,一部分是酒精含量,另一部分是葡萄酒的质量。因此,我们可以通过这两个...

2025-08-06 09:43:35

​湘泉醇和9酒多少钱一瓶(20年湘泉多少钱一瓶)

​湘泉醇和9酒多少钱一瓶(20年湘泉多少钱一瓶)

湘泉醇和9酒多少钱一瓶(20年湘泉多少钱一瓶) 湘泉醇和9酒多少钱一瓶?我们一起来看看吧。首先我们来看看白酒的价格,茅台酒目前的价格是1499元/瓶,飞天茅台酒是53度,五粮液是5...

2025-08-06 09:41:29

​工厂供电毕业设计题目_工厂供电毕业设计论文

​工厂供电毕业设计题目_工厂供电毕业设计论文

工厂供电毕业设计题目_工厂供电毕业设计论文 近年来,随着工业化的快速发展,工厂供电成为一项关系到生产经济的重要工程。而在大学毕业设计中,工厂供电也成为一个备受关注的...

2025-08-06 09:39:23

​贵州酱王酒业(贵州酱王酒业有限公司产品)

​贵州酱王酒业(贵州酱王酒业有限公司产品)

贵州酱王酒业(贵州酱王酒业有限公司产品) 贵州酱王酒业创办于1985年,是中国一家以生产高档白酒为主的企业,拥有多个知名品牌。其生产场地地处贵州省六盘水市钟山区,占地面积达...

2025-08-05 12:44:35

​bols酒价格_bols酒是什么牌子

​bols酒价格_bols酒是什么牌子

bols酒价格_bols酒是什么牌子 BOLS酒是由荷兰博斯公司生产的一系列烈酒,口感醇厚,口味多样,包括金酒、琴酒、度假酒等。不同种类的BOLS酒价格不尽相同,但一般不会超过200元。在酒...

2025-08-05 12:42:29

​利波贵州茅台镇52度浓香型(贵州茅台镇52度浓香型白酒)

​利波贵州茅台镇52度浓香型(贵州茅台镇52度浓香型白酒)

利波贵州茅台镇52度浓香型(贵州茅台镇52度浓香型白酒) 利波贵州茅台镇52度浓香型,是中国著名白酒品牌茅台酒家族中的瑰宝。这款酒以其独特的风味和卓越的品质,在国内外酒界赢得...

2025-08-05 12:40:24