CAN总线学习笔记(3)-CAN协议错误帧

上传人:lil****ar 文档编号:333429737 上传时间:2022-09-02 格式:PDF 页数:11 大小:6.07MB
返回 下载 相关 举报
CAN总线学习笔记(3)-CAN协议错误帧_第1页
第1页 / 共11页
CAN总线学习笔记(3)-CAN协议错误帧_第2页
第2页 / 共11页
CAN总线学习笔记(3)-CAN协议错误帧_第3页
第3页 / 共11页
CAN总线学习笔记(3)-CAN协议错误帧_第4页
第4页 / 共11页
CAN总线学习笔记(3)-CAN协议错误帧_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《CAN总线学习笔记(3)-CAN协议错误帧》由会员分享,可在线阅读,更多相关《CAN总线学习笔记(3)-CAN协议错误帧(11页珍藏版)》请在金锄头文库上搜索。

1、CAN总线学习笔记(3)-CAN协议错误帧依照瑞萨公司的的组织思路来学习CAN通信的相关知识,并结合上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!1 错误帧的帧结构在发送和接收报时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,出错了。错误帧由错误标志和错误界定符两个部分组成。主动错误标志:6个连续的显性位;被动错误标志:6个连续的隐性位;错误界定符:8个连续的隐性位。可以看到在错误标志之后还有06位的错误标志重叠,这段最低有0个位,最多有6个位,关于这段是怎么形成的,将在下中解释。2 错误检测2.1 位填充原则在了解CAN总线中的错误检测之前,

2、先需要了解什么是位填充。CAN协议中规定,当相同极性的电平持续五位时,则添加个极性相反的位。对于发送节点:在发送数据帧和遥控帧时,对于SOFCRC(除去CRC界定符) 之间的位流,相同极性的电平如果持续5位,那么在下个位插个与之前5位反型的电平;对于接收节点:在接收数据帧和遥控帧时,对于*SOFCRC(除去CRC界定符)*之间的位流,相同极性的电平如果持续5位,那么需要删除下位再接收。Tips: 注意:填充位的添加和删除是由发送节点和接收节点完成的,CAN-BUS只负责传输,不会操纵信号。2.2 错误的种类在CAN总线通信中,共有五种错误:位错误ACK错误填充错误CRC错误格式错误2.2.1

3、位错误(Bit Check Error)节点将发送到总线上的电平与同时从总线上回读到的电平进较,如果发现者不致,那么这个节点就会检测出个位错误。实际上所谓“发出的电平与从总线上回读的电平不致”,指的就是节点向总线发出隐性位,却从总线上回读到显性位或者节点向总线发出显性位,却从总线上回读到隐性位这两种情况。Tips: 有三种例外情况不属于位错误:在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表该节点仲裁失败;在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表,该节点当前发送的这帧报少被个其它节点正确接收;该节点发送被动错误标志,节点Node_A向总

4、线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平“吃掉”;2.2.2 ACK错误(Acknowledgment Error)按照CAN协议的规定,在帧报(数据帧或者遥控帧)发出之后,如果接收节点Node_B成功接收了该帧报,那么接收节点Node_B就要在该帧报ACK槽对应的时间段内向总线上发送个显性位来应答发送节点Node_A。这样发送节点Node_A就会在ACK槽时间段内从总线上回读到个显性位。因此:当发送节点Node_A在ACK槽时间段内没有回读到显性位,那么发送

5、节点Node_A就会检测到个ACK应答错误。这表没有个节点成功接收该帧报。2.2.3 填充错误(Fill Error)在需要执位填充原则的帧段(数据帧遥控帧的SOFCRC序列),检测到连续六个同性位,则检测到个填充错误。2.2.4 CRC错误发送节点Node_A在发送数据帧或者遥控帧时,会计算出该帧报的CRC序列。接收节点Node_B在接收报时也会执相同的CRC算法,如果接收节点Node_B计算出的CRC序列值与发送节点Node_A发来的CRC序列值不致,那么接收节点就检测到个CRC错误。2.2.5 格式错误在帧报发送时,如果在必须发送预定值的区域内检测到了法值,那么就检测到个格式错误。CAN

6、报中,有预定值的区域包括:数据帧和遥控帧的CRC界定符、ACK界定符、EOF;错误帧界定符过载帧界定符3 错误通知上节中,讲到CAN通信中有五种错误,并且介绍了在什么情况下能够检测到这种错误,在检测到错误之后,检测到错误的节点就要发送错误帧到总线上来通知总线上的其他节点。错误帧有的带有主动错误标志,有的带有被动错误标志,且错误标志重叠部分的字节数也不样,那么问题就来了:什么情况下发送带有主动错误标志的错误帧;什么情况下发送带有被动错误标志的错误帧;在哪个时间点发送错误帧;错误标志重叠部分是怎样形成的;3.1 节点错误状态按照CAN协议的规定,CAN总线上的节点始终处于以下三种状态之。主动错误状

7、态被动错误状态总关闭状态当满定的条件时,节点可以从种状态转换为另外种状态。Tips: 需要注意的是:处于主动错误状态,表该节点具备发出主动错误标志的能;处于被动错误状态,表节点具备发出被动错误标志的能。1)主动错误状态节点处于主动错误状态可以正常通信;处于主动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出主动错误标志。2)被动错误状态节点处于被动错误状态可以正常通信;处于被动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出被动错误标志。Tips: 注意:这说处于主动错误状态或被动错误状态的节点仍然可以正常通信,这的正常通信指的是:节点仍然能够从总线上接

8、收报,也能够竞争总线获胜后向总线上发送报。但是不代表接收的报定正确也不代表定能正确的发送报。3)总线关闭状态节点处于总线关闭状态,那么该节点不能收发报;处于总线关闭状态的节点,只能直等待,在满定条件的时候,再次进到主动错误状态。3.2 错误状态的转换现在我们知道:处于主动错误状态的节点在检测到错误时会发送带有主动错误标志的错误帧;处于被动错误状态的节点在检测到错误时会发送带有被动错误标志的错误帧。那么个CAN节点在什么情况下处于主动错误状态,什么情况下处于被动错误状态呢?根据CAN协议的规定,在CAN节点内,有两个计数器:发送错误计数器(TEC)和接收错误计数器(REC)。Tips: 需要注意

9、的是:这两个计数器计得不是收发报的数量,也不是收发错误帧的数量。TEC和RCE计数值的变化,是根据下表的规定来进的CAN节点错误状态的转换,就是基于这两个计数器来进的。可以看出,节点错误状态的转换就是个*“量变”到“质变”的过程:#1) 主动错误状态最开始TCE和REC都于127时*,就处于主动错误状态。在这状态下,节点检测到个错误就会发送带有主动错误标志的错误帧,因为主动错误标志是连续六个显性位,所以这个时候主动错误标志将会“覆盖”掉总线上其它节点的发送,之前在CAN总线上传输的报就被这“六个连续显性位”破坏掉了。如果发出主动错误帧的节点是发送节点,这个情况下就相当于:刚刚发送的那帧报我发错

10、了,现在我破坏掉它(发送主动错误帧),你们不管收到什么都不算数;如果发出主动错误帧的节点是接收节点,这个情况就相当于:刚刚我收报的时候发现了错误,不管你们有没有发现这个错误,我现在主动站出来告诉家这个错误,并把这帧报破坏掉(发送主动错误帧),刚才你们收到的东西不管对错都不算数了。Tips: 处于主动错误状态,说明这个节点前是较可靠的,出现错误的原因可能不是它本的问题,即刚刚检测到的错误可能不仅仅只有它遇到,正是因为这点,整个总线才相信它报告的错误,允许它破坏掉发送中的报,也就是将这次的发送作废。2)被动错误状态如果某个节点发送错误帧的次数较多,必将使得TCE127 或者 REC127,那么该节

11、点就处于被动错误状态。在这状态下,节点Node_A检测到个错误就会发送带有被动错误标志的错误帧,因为被动错误标志是连续六个隐性位,所以这个时候总线上正在传输的报位流不会受到该被动错误帧的影响,其它的节点该发送的发送,该接收的接收,没搭理这个发送被动错误帧的节点Node_A。如果发出被动错误帧的节点Node_A为报的发送节点,那么在发送被动错误帧之后,刚刚正在发送的报被破坏,并且Node_A不能在错误帧之后随着连续发送刚刚发送失败的那个报。随之来的是帧间隔,并且连带着8位隐性位的 “延迟传送” 段;这样总线电平就呈现出连续11位隐性位,总线上的其它节点就能判定总线处于空闲状态,就能参与总线竞争。

12、此时如果Node_A能够竞争成功,那么它就能接着发送,如果竞争不能成功,那么就接着等待下次竞争。这种机制的的正是为了让其它正常节点(处于主动错误)优先使总线。Tips: 处于被动错误状态,说明这个节点前是不太可靠的,出现错误的原因可能是它本的问题,即刚刚检测到的错误可能仅仅只有它遇到,正是因为这点,整个总线才不信任它报告的错误,从只允许它发送六个连续的隐性位,这样它才不会拖累别。3)总线关闭状态如果个处于被动错误状态的节点,仍然多次发送被动错误帧,那么势必导致TEC 255,这样就处于总线关闭状态。在总线关闭状态下的节点Node_A不能向总线上发送报,也不能从总线上接收报,整个节点脱离总线。等

13、到检测到128次11个连续的隐性位时,TEC和REC置0,重新回到主动错误状态。按照我的理解这个所谓“检测到128次11个连续隐性位”其实就是让这个节点隔离段时间冷静下,因为它旦处于总线关闭状态,就不会和总线有任何的联系,这个时候只要它计算时间等于达到传送128次11个连续隐性位所的时间,就可以重新连到总线上。Tips: 处于总线关闭状态说明,这个节点前挂掉了,总线先把它踢开,这样它才不会拖累别,等到它冷静段时间之后再回到总线上。3.3 错误帧的发送在检测到错误之后,什么时候发送错误帧呢?按照CAN协议的规定:位错误、填充错误、格式错误、ACK错误。在错误产的那位的下位开始发送错误帧。CRC错

14、误紧随ACK界定符后的位发送错误帧。例1:(1)发送节点Node_A发送个显性位,但是却从总线上听到个隐形位,于是Node_A节点就会检测到个位错误;(2)Node_A检测到位错误之后,即在下位开始发送主动错误帧:6个连续显性位的主动错误标志+8个连续隐性位的错误界定符;(3)对应Node_A发出的主动错误标志,总线上电平为6个连续显性位;(4)接收节点Node_B和Node_C从总线上听到连续6个显性位,那么就会检测到个填充错误,于是这两个节点都会发送主动错误帧;(5)对应Node_B和Node_C发出的主动错误标志,总线电平有6个连续显性电平,对应Node_B和Node_C发出的错误界定符,总线电平有8个连续的隐性电平。(6)在间歇场之后,Node_A节点重新发送刚刚出错的报。例2:从上图中可以看出错误帧之中,错误标志重叠部分是怎样形成的,这个例中,位错误的错误标志与填充错误的错误标志重叠两位,剩下的部分还有四位:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号