CAN收发器
CAN收发器的浸染是卖力逻辑电平和旗子暗记电平之间的转换。
即从CAN掌握芯片输出逻辑电平到CAN收发器,然后经由CAN收发器内部转换将逻辑电平转换为差分旗子暗记输出到CAN总线上,CAN总线上的节点都可以决定自己是否须要总线上的数据。详细的管教定义如下:
旗子暗记表示
CAN总线采取不归零码位添补技能,也便是说CAN总线上的旗子暗记有两种不同的旗子暗记状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,旗子暗记每一次传输完后不须要返回到逻辑0(显性)的电平。
位添补规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。
不雅观察下图:
可以看到上图中确当第一段为隐性(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每秒的通讯速率。这个速率在实际测试的时候也是非常可靠的。
如果想要更远的传输(大于10公里);可以考虑用多个CAN掌握器连接或是加其他通讯协议(如485或是TCP/IP)的接口芯片组成的一个设备,这样就可实现长间隔的通讯需求。
CAN总线关键观点仲裁只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN利用了标识符的逐位仲裁方法可以办理这个问题。
在仲裁期间,每一个发送器都对发送的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以连续发送。如果发送的是一\"大众隐性\"大众电平而监视到的是一\"大众显性\"大众电平,那么这个节点失落去了仲裁,必须退出发送状态。如果涌现不匹配的位不是在仲裁期间则产生缺点事宜。
帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,以是帧格式和帧ID相同的情形下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对付前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。
CAN总线协议CAN 总线是一个广播类型的总线,以是任何在总线上的节点都可以监听总线上传输的数据。也便是说总线上的传输不是点到点的,而是一点对多点的传输,这里多点的意思是总线上所有的节点。但是总线上的节点如何知道那些数据是传送给自己的呢?CAN总线的硬件芯片供应了一种叫做本地过滤的功能,通过这种本地过滤的功能可以过滤掉一些和自己无关的数据,而保留一些和自己有关的信息。
CAN机制CAN标准定义了四种类型,每条用一种叫做比特位仲裁(Arbitration)机制来掌握进入CAN总线,并且每条都标记了优先权。其余CAN标准还定义了一系列的缺点处理机制。
CAN报文的四种类型:
数据帧:数据帧将数据从发送器传输到吸收器。
远程帧:总线单元发出远程帧,要求发送具有同一标识符的数据帧。
缺点帧:任何单元检测到总线缺点就发出错误帧。
过载帧:过载帧用在相邻数据帧或远程帧之间的供应附加的延时。
数据帧下图为基本的格式:
CAN总线中有标准帧和扩展帧两种格式,两种格式不同的地方在于仲裁域格式的不同,看下面两个表格可以很清楚的看出两者的不同,下面第一个表是标准帧(CAN2.0 A),第二个为扩展帧(CAN2.0 B):
下面为扩展帧格式(CAN2.0B):
个中
SOF为帧开始
SRR为\公众替代远程要求位
IDE为扩展标识符位
RTR为远程传输要求位
CRC delimiter 为CRC定界符。
ACK delimiter 为应答定界符.
我们看到上图中的基本帧格式可以总结为以下几个域:
域
描述
仲裁域
仲裁域决定了当总线上两个或是多个节点争夺总线时的优先权。
数据域
包含了0到8字节的数据。
CRC域
包含了15位的校验和,校验和用来做缺点检测。
应答槽
任何一个已经精确吸收到的掌握器在每一条的末端发送一个应答位,发送器检讨是否存在应答位,如果没有就重发。
远程帧作为数据吸收器的站,通过发送远程帧,可以启动其资源节点传送它们各自的数据。远程帧和数据帧非常类似,只是远程帧没有数据域。
上图便是远程帧的帧格式,它相对与数据帧没有远程帧,但是要把稳发送远程帧的时候RTR位要置1,表示发送的是远程帧。下图更加清晰了呈现了这种构造。
缺点帧
缺点帧是当总线的某一个节点检测到缺点后发送出来的,它会引起所有节点检测到一个缺点,以是当有任何一个节点检测到缺点,总线上的其他节点也会发出错误帧。CAN总线设计了一套详尽的缺点计数机制来确保不会由于任何一个节点反复的发送缺点帧而导致CAN总线的崩溃。
如上图所示缺点标志和缺点定界符组成,高低代表分别代表隐性和显性,个中缺点标志为所有节点发过来的缺点标志的叠加(Superposition)。下图更为清楚的看出各个数据位的分布:
下面通过以下数据构造框图概括各个部分的定义:
缺点标志有两种形式:
主动缺点标志,它由6个连续的显性位0组成,它是节点主动发送的缺点标志。
被动缺点标志,它由6个连续的隐性位1组成,除非被其他节点的显性位覆盖。
刚才说到一个节点上检测到缺点会导致总线上所有的节点都会检测到缺点并发送缺点标志,这是为什么呢?
由于单一节点上的缺点标志格式违背了从帧起始到CRC界定符的位添补规则,也毁坏了ACK域或帧结尾的固定格式。下面简要说下位添补规则。
位添补规则:发送器只要检测到位流里有5个连续相同值的位,便自动在位流里插入补充位。
把稳:位添补规则只是针对数据帧和远程帧,缺点帧和过载帧格式固定。
以是所有其他的节点会检测到缺点条件并且开始发送缺点标志,因此缺点帧便是各个站的不同缺点标志叠加在一起的结果。
当某个节点发送缺点帧(带有缺点标志),其他节点收到了缺点帧,检测到缺点条件,就通过发送\公众被动缺点标志\公众的缺点帧来提示缺点。
缺点定界符:
传送了缺点标志往后,每一个站就发送一个隐性位,并一贯监视总线直到检测出一个隐性位为止,然后就开始发送别的7个隐性位。
过载帧过载帧是吸收节点用来向发送节点奉告自身吸收能力的帧。
过载帧,意思便是某个吸收节点来不及处理数据了,希望其他节点慢点发送数据帧或者远程帧,以是见告发送节点,我已经没有能力处理你发送过来的数据了。
过载帧跟缺点帧构造类似包括过载标志和过载定界符,有3中情形会引起过载:
吸收器内部的缘故原由,它须要延迟下一个数据帧或是远程帧。
在间歇字段(看下面的帧间空间)的第一位和第二位检测到一个显性位(间歇字段都是隐性位的)
如果CAN节点在缺点界定符或是过载界定符的第八位(末了一位)采样到一个显性位逻辑0,节点会发送一个过载帧,缺点计数器不会增加。
上图中很清晰的表示了过载标志有6个显性位组成,而叠加部分和\"大众主动缺点\"大众标志一样,过载的标志毁坏的是间歇域的固定格式。以是导致其他的节点都检测到过载条件,并一同发出过载标志。
过载定界符:
也便是上图的过载结束符,过载标志被传送往后,节点就一贯监听着总线,直到检测到有一个从显性位到隐性位的跳变为止。当从总线上检测到这样的跳变,则就标志着每一个节点都完成了各自过载标志的发送,并开始同时发送别的7个隐性位。
帧间空间(Interframe Space)帧间空间说白了便是帧与帧之间的间隔,但是这种间隔在CAN的帧中只存在于数据帧和远程帧,其他的帧就不一定是帧间空间隔开的,而是其他形式,或是直接是没有间隔,例如过载帧和缺点帧之间就没帧间空间。过个过载帧之间有间隔但是不是有帧间空间隔开的。
这里所说的针间空间包括\"大众间歇\"大众、\"大众总线空闲\公众的位域。如果是发送前一报文的\"大众被动缺点\"大众的站,则还包括叫做\公众挂起传输\"大众的位域。
若不是\公众被动缺点\"大众的站,或作为前一报文的吸收器的站,帧间空间格式为下图:
若是\公众被动缺点\公众的站,如果想要发送8个隐性电平,在发送其他帧,帧间空间格式为下图,即包括了挂起传输,
可以看到
间歇字段有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总线上之后,处于ACTIVE状态;TEC>127或者REC>127导致节点进入passive状态;TEC>255之后节点处于bus off状态,便是不许可再往bus上发送东西了;处于bus off状态的节点,在检测到128个连续的11个1之后将回到active状态。