精华内容
下载资源
问答
  • CAN总线错误帧详解

    2021-10-09 07:49:09
    1.错误结构 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误,通知总线上的节点,自己出错了。...在了解CAN总线中的错误检测之前,首先需要了解什么是位填充。 CAN协议中

    1.错误帧的帧结构

    在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。

    错误帧由错误标志和错误界定符两个部分组成。
    在这里插入图片描述
    主动错误标志:6个连续的显性位;
    被动错误标志:6个连续的隐性位;
    错误界定符:8个连续的隐性位。

    可以看到在错误标志之后还有0~6位的错误标志重叠,这一段最低有0个位,最多有6个位,关于这一段是怎么形成的,将在下文中解释。

    2.错误帧的检测

    2.1 位填充原则

    在了解CAN总线中的错误检测之前,首先需要了解什么是位填充。
    CAN协议中规定,当相同极性的电平持续五位时,则添加一个极性相反的位。

    图片

    对于发送节点:
    在发送数据帧和遥控帧时,对于SOF~CRC(除去CRC界定符)之间的位流,相同极性的电平如果持续5位,那么在下一个位插入一个与之前5位反型的电平;
    对于接收节点:
    在接收数据帧和遥控帧时,对于 SOF~CRC(除去CRC界定符) 之间的位流,相同极性的电平如果持续5位,那么需要删除下一位再接收。==
    ⚠️ 注意 :填充位的添加和删除是由发送节点和接收节点完成的,CAN-BUS只负责传输,不会操纵信号。

    3. 错误帧的种类

    在CAN总线通信中,一共有五种错误:位错误、ACK错误、填充错误、CRC错误、格式错误。

    3.1 位错误(Bit Check Error)

    节点将自己发送到总线上的电平与同时从总线上回读到的电平进行比较,如果发现二者不一致,那么这个节点就会检测出一个位错误。
    实际上所谓“发出的电平与从总线上回读的电平不一致”,指的就是节点向总线发出隐性位,却从总线上回读到显性位或者节点向总线发出显性位,却从总线上回读到隐性位这两种情况。
    Tips: 有三种例外情况不属于位错误:
    在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;
    在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;
    该节点发送被动错误标志,节点Node_A向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平“吃掉”;

    3.2 ACK错误(Acknowledgment Error)

    按照CAN协议的规定,在一帧报文(数据帧或者遥控帧)发出之后,如果接收节点Node_B成功接收了该帧报文,那么接收节点Node_B就要在该帧报文ACK槽对应的时间段内向总线上发送一个显性位来应答发送节点Node_A。这样发送节点Node_A就会在ACK槽时间段内从总线上回读到一个显性位。因此:
    当发送节点Node_A在ACK槽时间段内没有回读到显性位,那么发送节点Node_A就会检测到一个ACK应答错误。这表示没有一个节点成功接收该帧报文。
    图片

    3.3 填充错误(Fill Error)

    在需要执行位填充原则的帧段(数据帧遥控帧的SOF~CRC序列),检测到连续六个同性位,则检测到一个填充错误。

    3.4 CRC错误

    发送节点Node_A在发送数据帧或者遥控帧时,会计算出该帧报文的CRC序列。接收节点Node_B在接收报文时也会执行相同的CRC算法,如果接收节点Node_B计算出的CRC序列值与发送节点Node_A发来的CRC序列值不一致,那么接收节点就检测到一个CRC错误。
    图片

    3.5格式错误

    在一帧报文发送时,如果在必须发送预定值的区域内检测到了非法值,那么就检测到一个格式错误。
    CAN报文中,有预定值的区域包括:

    • 数据帧和遥控帧的CRC界定符、ACK界定符、EOF;
    • 错误帧界定符
    • 过载帧界定符

    4.错误通知

    上一节中,讲到CAN通信中有五种错误,并且介绍了在什么情况下能够检测到这几种错误,在检测到错误之后,检测到错误的节点就要发送错误帧到总线上来通知总线上的其他节点。
    错误帧有的带有主动错误标志,有的带有被动错误标志,而且错误标志重叠部分的字节数也不一样,那么问题就来了:

    • 什么情况下发送带有主动错误标志的错误帧;

    • 什么情况下发送带有被动错误标志的错误帧;

    • 在哪个时间点发送错误帧;

    • 错误标志重叠部分是怎样形成的;

    4.1 节点错误状态

    按照CAN协议的规定,CAN总线上的节点始终处于以下三种状态之一。

    • 主动错误状态

    • 被动错误状态

    • 关闭状态
      当满足一定的条件时,节点可以从一种状态转换为另外一种状态。

    1)主动错误状态
    节点处于主动错误状态可以正常通信;
    处于主动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出主动错误标志。
    2)被动错误状态
    节点处于被动错误状态可以正常通信;
    处于被动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出被动错误标志。

    ⚠️注意:这里说处于主动错误状态或被动错误状态的节点仍然可以正常通信,这里的正常通信指的是:节点仍然能够从总线上接收报文,也能够竞争总线获胜后向总线上发送报文。但是不代表接收的报文一定正确也不代表一定能正确的发送报文。
    3)总线关闭状态
    节点处于总线关闭状态,那么该节点不能收发报文;
    处于总线关闭状态的节点,只能一直等待,在满足一定条件的时候,再次进入到主动错误状态。

    4.2 错误状态的转换

    现在我们知道:
    处于主动错误状态的节点在检测到错误时会发送带有主动错误标志的错误帧;
    处于被动错误状态的节点在检测到错误时会发送带有被动错误标志的错误帧。
    那么一个CAN节点在什么情况下处于主动错误状态,什么情况下处于被动错误状态呢?
    根据CAN协议的规定,在CAN节点内,有两个计数器:发送错误计数器(TEC)和接收错误计数器(REC)。
    ⚠️注意:这两个计数器计得不是收发报文的数量,也不是收发错误帧的数量。TEC和RCE计数值的变化,是根据下表的规定来进行的
    图片

    CAN节点错误状态的转换,就是基于这两个计数器来进行的。
    图片

    可以看出,节点错误状态的转换就是一个“量变”到“质变”的过程:
    1) 主动错误状态
    最开始TCE和REC都小于127时,就处于主动错误状态。
    在这一状态下,节点检测到一个错误就会发送带有主动错误标志的错误帧,因为主动错误标志是连续六个显性位,所以这个时候主动错误标志将会“覆盖”掉总线上其它节点的发送,而之前在CAN总线上传输的报文就被这“六个连续显性位”破坏掉了。
    如果发出主动错误帧的节点是发送节点,这个情况下就相当于:刚刚发送的那一帧报文我发错了,现在我破坏掉它(发送主动错误帧),你们不管收到什么都不算数;
    如果发出主动错误帧的节点是接收节点,这个情况就相当于:刚刚我收报文的时候发现了错误,不管你们有没有发现这个错误,我现在主动站出来告诉大家这个错误,并把这一帧报文破坏掉(发送主动错误帧),刚才你们收到的东西不管对错都不算数了。
    Tips: 处于主动错误状态,说明这个节点目前是比较可靠的,出现错误的原因可能不是它本身的问题,即刚刚检测到的错误可能不仅仅只有它自己遇到,正是因为这一点,整个总线才相信它报告的错误,允许它破坏掉发送中的报文,也就是将这一次的发送作废。
    2)被动错误状态
    如果某个节点发送错误帧的次数较多,必将使得TCE>127 或者 REC>127,那么该节点就处于被动错误状态。

    在这一状态下,节点Node_A检测到一个错误就会发送带有被动错误标志的错误帧,因为被动错误标志是连续六个隐性位,所以这个时候总线上正在传输的报文位流不会受到该被动错误帧的影响,其它的节点该发送的发送,该接收的接收,没人搭理这个发送被动错误帧的节点Node_A。

    如果发出被动错误帧的节点Node_A为报文的发送节点,那么在发送被动错误帧之后,刚刚正在发送的报文被破坏,并且Node_A不能在错误帧之后随着连续发送刚刚发送失败的那个报文\。随之而来的是帧间隔,并且连带着8位隐性位的 “延迟传送” 段;这样总线电平就呈现出连续11位隐性位,总线上的其它节点就能判定总线处于空闲状态,就能参与总线竞争 。此时如果Node_A能够竞争成功,那么它就能接着发送,如果竞争不能成功,那么就接着等待下一次竞争。这种机制的目的正是为了让其它正常节点(处于主动错误)优先使用总线。
    Tips: 处于被动错误状态,说明这个节点目前是不太可靠的,出现错误的原因可能是它本身的问题,即刚刚检测到的错误可能仅仅只有它自己遇到,正是因为这一点,整个总线才不信任它报告的错误,从而只允许它发送六个连续的隐性位,这样它才不会拖累别人。
    3)总线关闭状态
    如果一个处于被动错误状态的节点,仍然多次发送被动错误帧,那么势必导致TEC > 255,这样就处于总线关闭状态。
    在总线关闭状态下的节点Node_A不能向总线上发送报文,也不能从总线上接收报文,整个节点脱离总线。等到检测到128次11个连续的隐性位时,TEC和REC置0,重新回到主动错误状态。

    按照我的理解这个所谓“检测到128次11个连续隐性位”其实就是让这个节点隔离一段时间冷静下,因为它一旦处于总线关闭状态,就不会和总线有任何的联系,这个时候只要它计算时间等于达到传送128次11个连续隐性位所用的时间,就可以重新连到总线上。

    ⚠️注意: 处于总线关闭状态说明,这个节点目前挂掉了,总线先把它踢开,这样它才不会拖累别人,等到它冷静一段时间之后再回到总线上。

    4.3 错误帧的发送

    在检测到错误之后,什么时候发送错误帧呢?
    按照CAN协议的规定:

    位错误、填充错误、格式错误、ACK错误。 在错误产生的那一位的下一位开始发送错误帧。

    CRC错误 紧随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:
    图片

    从上图中可以看出错误帧之中,错误标志重叠部分是怎样形成的,这个例子中,位错误的错误标志与填充错误的错误标志重叠两位,剩下的部分还有四位:
    在这里插入图片描述

    展开全文
  • 错误帧的作用

    千次阅读 2017-03-14 13:41:14
    错误帧分为主动错误帧和被动错误帧 主动错误帧:6-12个显示标识位+8个隐形位 被动错误帧:6个隐形错误标识(可被其他在节点在显性位覆盖)+8个隐形位 实现原理 打破CAN总线位填充规则,从而导致接受数据节点产生错误...

    错误帧分为主动错误帧和被动错误帧

    主动错误帧:6-12个显示标识位+8个隐形位

    被动错误帧:6个隐形错误标识(可被其他在节点在显性位覆盖)+8个隐形位

    实现原理

    打破CAN总线位填充规则,从而导致接受数据节点产生错误

    节点错误形式

    主动错误状态:可以正常收发数据(主动、被动错误计数器均小于128),可以发送主动错误帧
    被动错误状态:是节点本身受干扰或错误比较多时的工作模式,只能发送被动错误帧(主动、被动错误计数器其一在127、256之间),其实就是不允许它阻塞别的正常节点的通讯
    总线关闭模式:节点错误很多时进入的模式(收或发错误计数器等于256),收发都被禁止。

    主动报错和被动报错

    1. 主动报错站点:只要检查到错误,它立即"主动地"发出错标识 
    所谓"出错标识",它本身就是一个"错误的位序列"(连续的6个显性位,不满足CAN协议的"最多5个连续的同性位"要求),目的是"主动地"告诉大家:即使你们 没有发现"刚才我已发现"的错误,现在我"以身作则"出错啦!你们该看到这个错误了吧!

    2. 被动报错站点:如果检查到错误,它只能干瞪眼"被动地"等别人(主动报错站点)报错,等待的时候它可不能去动总线,直到识别出由主动报错站点发出的"错误的位序列",它才松了一口气:有人正式报错了!然后他就可以去竞争总线,该干啥干啥

    3.出错标识本身没有什么优先级的问题.

    4.对于通过竞争得到总线使用权的发送站点来说,它在一边发一边听,有可能:

    (a).它自己就发现错误,它就干脆哗啦哗啦,乱发一气(连续的发六个同性位). 就象你小时候在幼儿园练习写字,写错一个笔画你自己就不耐烦了,在纸上哗啦哗啦,乱画一气.目的 就是告诉别人(别的站点),出错了!

    (b).它自己没有发现错误,但作为主动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点就会立即哗啦哗啦往总线上乱发一气(连续的发六 个显性位),就象你小时候在幼儿园练习写字, 写错一个笔画你自己没发现,可老师(主动报错站点)发现了就不耐烦了, 在你的纸上哗啦哗啦,乱画一气.目的就是你自己以及告诉别 人(发送站点和别的站点),出错了!

    (c).它自己没有发现错误,但作为被动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点只能慢慢的等待,等待别的主动报错站点报错,如果 别的主动报错站点没发现错误,那就继续等,一直等到该发ACK的时候不给发送站发这个显性的ACK信号,当然了其他站点可能会发这个ACK,那说明其他站点没有发生错误,没 办法,别人能通信, 你不能!然后积攒到一定的时候,你就脱离总线吧!再继续等待一段时间, 脱胎换骨,重新回到总线上(这个时候错误记录都清0了,你肯定是主动报错站了).就象你 小时候在幼儿园练习写字,写错一个笔画你自己没发现, 别的同学(被动报错站点)发现了但他不能说,嘿嘿(乱说话,老师要打屁股的),他就只能等,等老师来发现你的错误(等待主 动报错站点报错),或者老师没眼力,那就等到收作业的时候,不收你的(不发ACK),不过老师可能主动来收的(给你发ACK),那你可没办法,继续等吧,等到你也当老师了(脱胎换骨 了),.........


    展开全文
  • 最近在研究CAN总线的驱动,需要详细了解数据/标准/扩展/远程/错误帧这几种的详细组成格式,于是收集了一下,统一放在这里进行对比和记录,以便日后需要时查阅

    最近在研究CAN总线的驱动,需要详细了解数据帧/标准帧/扩展帧/远程帧/错误帧这几种帧的详细组成格式,于是收集了一下,统一放在这里进行对比和记录,以便日后需要时查阅。

    1、数据帧-标准帧

    CAN 标准数据帧如下图所示。与其他所有帧一样,帧以起始帧 (SOF)位开始, SOF 为显性状态,允许所有节点的硬同步。

    SOF之后是仲裁字段,由12个位组成,分别为11个标识位和一个远程发送请求(Remote Transmission
    Request, RTR)位。 RTR 位用于区分报文是数据帧(RTR 位为显性状态)还是远程帧 (RTR 位为隐性状态)。

    仲裁字段之后是控制字段,由 6 个位组成。控制字段的第一位为标识扩展(Identifier Extension,IDE)位,该位应是显性状态来指定标准帧。标识扩展位的下一位为零保留位(RB0),CAN 协议将其定义为显性位。控制字段的其余 4 位为数据长度码 (Data Length Code,DLC),用来指定报文中包含的数据字节数 (0 到 8 字节)。

    控制字段之后为数据字段,包含要发送的任何数据字节。数据字段长度由上述 DLC 定义 (0 到 8 字节)。数据字段之后为循环冗余校验(CRC)字段,用来检测报文传输错误。CRC 字段包含一个 15 位的 CRC 序列,之后是隐性的 CRC 定界位。

    最后一个字段是确认字段 (ACK),由 2 个位组成。在确认时隙(ACK Slot)位执行期间,发送节点发出一个隐性位。任何收到无错误帧的节点会发回一个显性位(无论该节点是否配置为接受该报文与否)来确认帧收到无误。确认字段以隐性确认定界符结束,该定界符可能不允许被改写为显性位。
    在这里插入图片描述

    2、数据帧-扩展帧

    在扩展 CAN 数据帧中(如下图所示),紧随 SOF 位的是 32 位的仲裁字段。仲裁字段的前 11 位为 29 位标识符的最高有效位(Most Significant bit,MSb)(基本lD) 。紧随这 11 位的是替代远程请求(Substitute Remote Request, SRR)位,定义为隐性状态。 SRR位之后是 lDE 位,该位为隐性状态时表示这是扩展的CAN 帧。

    应该注意的是,如果发送完扩展帧标识符的前 11 位后,总线仲裁无果,而此时其中一个等待仲裁的节点发出标准 CAN 数据帧 (11 位标识符),那么,由于节点发出了显性 lDE 位而使标准 CAN 帧赢得总线仲裁。另外,扩展 CAN 帧的 SRR 位应为隐性,以允许正在发送标准CAN 远程帧的节点发出显性 RTR 位。

    SRR和lDE位之后是标识符的其余18位(扩展lD)及一个远程发送请求位。

    为使标准帧和扩展帧都能在共享网络上发送,应将29位扩展报文标识符拆成高 11 位和低 18 位两部分。拆分后可确保 lDE 位在标准数据帧和扩展数据帧中的位置保持一致。

    仲裁字段之后是 6 位控制字段。控制字段前两位为保留位,必须定义为显性位。其余 4 位为 DLC,用来指定报文中包含的数据字节数。

    扩展数据帧的其他部分 (数据字段、 CRC 字段、确认字段、帧结尾和间断)与标准数据帧的结构相同。
    在这里插入图片描述

    3、远程帧

    通常,数据传输是由数据源节点(例如,传感器发出数据帧)自主完成的。但也可能存在目标节点向源节点请求发送数据的情况。要做到这一点,目标节点需发送一个远程帧,其中的标识符应与所需数据帧的标识符相匹配。随后,相应的数据源节点会发送一个数据帧以响应远程帧请求。

    远程帧 与数据帧存在两点不同:

    1)远程帧的 RTR 位为隐性状态;
    2)远程帧没有数据字段。

    当带有相同标识符的数据帧和远程帧同时发出时,数据帧将赢得仲裁,因为其标识符后面的 RTR 位为显性。这样,可使发送远程帧的节点立即收到所需数据。
    在这里插入图片描述

    4、主动错误帧

    当错误主动节点检测到一个总线错误时,这个节点将产生一个主动错误标志来中断当前的报文发送。主动错误标志由 6 个连续的显性位构成。这种位序列主动打破了位填充规则。所有其他节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。

    错误标志字段因此包含 6 到 12 个连续显性位 (由 1 个或多个节点产生)。错误定界字段 (8 个隐性位)为错误帧划上句号。在错误帧发送完毕后,总线主动恢复正常状态,被中断的节点会尝试重新发送被中止的报文。
    在这里插入图片描述

    5、过载帧

    过载帧与主动错误帧具有相同的格式。

    但是,过载帧只能在帧间间隔产生,因此可通过这种方式区分过载帧和错误帧 (错误帧是在帧传输时发出
    的)。过载帧由两个字段组成,即过载标志和随后的过载定界符。过载标志由 6 个显性位和紧随其后的其他节点产生的过载标志构成 (而主动错误标志最多包含 12个显性位)。过载定界符包含 8 个隐性位。节点在两种情况下会产生过载帧:

    1)节点在帧间间隔检测到非法显性位。在 IFS 的第三位期间检测到显性位除外。这种情况下,接收器会把它看作一个 SOF 信号。
    2)由于内部原因,节点尚无法开始接收下一条报文。节点最多可产生两条连续的过载帧来延迟下一条报文的发送。
    在这里插入图片描述

    展开全文
  • CAN的报文格式 在总线中传送的报文,每由7部分组成。CAN协议支持两种报文格式,其唯一的...RTR位标明是数据还是请求,在请求中没有数据字节。 控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格...
    1. CAN的报文格式

      在总线中传送的报文,每帧由7部分组成。CAN协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为11位,扩展格式为29位。

      在标准格式中,报文的起始位称为帧起始(SOF),然后是由11位标识符和远程发送请求位(RTR)组成的仲裁场。RTR位标明是数据帧还是请求帧,在请求帧中没有数据字节。

      控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为0~8个字节,其后有一个检测数据错误的循环冗余检查(CRC)。

      应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑1),这时正确接收报文的接收站发送主控电平(逻辑0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

      报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

      如图11所示,具体某一位或某几位下面会详细介绍。

      图11 CAN总线报文结构

    2. 数据帧

      数据帧是使用最多的帧,结构上由7段组成,其中根据仲裁段ID码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

      数据帧是由:帧起始,仲裁断,控制端,数据段,CRC段,ACK段和帧结束构成。

      如图21所示(具体的帧结构下面会详细介绍)。

      图2–1数据帧类型及结构

    3. 帧起始和帧结束

      帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

      帧结束:由7个连续的隐形位组成。

      (注:显性电平和隐性电平是相对于CAN_H和CAN_L而言的差分信号电平,并非TTL电平上的高低电平,需要注意)如图2-2所示。

       

      图2–2帧起始和帧结束

    4. 仲裁段

      CAN-bus是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。

      CAN-bus并没有规定节点的优先级,但通过仲裁段帧ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。如图23所示

       

      图2–3数据帧结构

      如图24所示CAN控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

      图2–4仲裁处理

      假设节点A、B和C都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图16所示):

      图2–5仲裁机制

      从该分析过程得出结论是:帧ID值越小,优先级越高;

      对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理

    5. 控制段

      控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成如图17所示。

      图2–6数据帧结构

    6. 数据段

      一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。

      图2–7数据段

      数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

    7. CRC段

      CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成如图28所示。

      图2–8CRC段

    8. ACK段

      当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平如图29所示。

      图2–9 ACK段

    9. 远程帧

      与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)如图31所示。

      图3–1远程帧结构

      如下图所示由于数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平。

      所以帧格式和帧ID都相同情况下,数据帧的优先级比远程帧优先级高如图32所示:

      图3–2数据帧于远程帧仲裁机制

       

      图3–3数据帧远程帧比较

      数据帧与远程帧的区别如图33所示。

       

    10. 错误帧

      尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种(如图41所示)。

      图4–1错误帧类型

      当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图42所示。

      图4–2错误帧电平结构

      为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus规定了节点的3种状态及其行为如图43所示。

      图4–3错误处理机制

      (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要CAN在收到数据肯定是正确的数据)。

       

    11. 过载帧与帧间隔

    12. 过载帧

      当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图51。

      图5–1过载帧结构

      由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象如所示图52。

      图5–2过载帧具体结构

    13. 帧间隔

      帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。

      帧间隔过后,如果无节点发送帧,则总线进入空闲。

      帧间隔过后,如果被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。

    14. CAN总线发送总流程

      CAN-bus整个链路层处理数据的流程是如图61所示:

      图6–1CAN总线发送总流程

       

    15. 参考资料

      《项目驱动--CAN-BUS现场总线基础教程----周立功,黄晓清》。

      《现场总线技术及其应用第二版–清华大学出版社》。

    展开全文
  • CAN总线学习笔记(3)- CAN协议错误帧

    万次阅读 多人点赞 2018-04-09 10:55:54
    在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。 错误帧错误标志和错误界定符两个部分组成。 主动错误标志:6个连续的显性位; 被动...
  • 2.系统初始状态为失步态,失步信号FLOSS输出低电平,电路在输入码流里逐比特搜寻同步码,当搜寻到第一个偶同步码后,电路转为逐搜寻,当连续三均正确地搜寻到同步码后,系统状态转为同步态,失步信号输出高电...
  • 帧检测序列错误(FCS)

    千次阅读 2014-05-19 15:08:07
    帧检测序列错误(FCS)FCS是802.3和Ethernet的最后一个字段(4字节).校验序列(FCS)是指特别的检测码字符被添加到在一个通信协议中的中进行检错和纠错。发送主机在整个中有一个检测码随着发送。接收主机...
  • 当FPGA作为接收端去接收数据的时候,即使保证一数据的头是正确的,而且校验位是正确的也不能百分百保证这数据正确接收了,可能情况:1、数据传输有错误,但是错误的数据也得到了一样正确的校验位;...
  • 数据链路层中的1.1 数据1.1.1 起始(标准、扩展格式相同)1.1.2 仲裁段1.1.3 控制段1.1.4 数据段(标准、扩展格式相同)1.1.5 CRC 段(...结束(标准/扩展格式相同)1.2 遥控1.3 错误帧1.4 过载1.5 间隔2....
  • CAN总线的远程、错误帧的作用!

    万次阅读 2015-12-22 15:49:24
    CAN总线的远程、错误帧的作用!
  • CAN 错误帧和原理

    万次阅读 多人点赞 2012-05-27 21:22:26
    1、CAN错误检测(Error Detection)  CAN网络具有严格的错误诊断功能,该功能已固化在硅片之中,一旦错误被检测,正在传送的数据将会立即停止而待总线空闲时再次重发直至发送成功,该过程并不需要CPU的干涉除非...
  • 网卡如何发送以太网包 好了,下面来看一看网卡是如何将包转换成电信号并发... 首先,MAC 模块会将包从缓冲区中取出,并在开头加上报头和起始分界符,在末尾加上用于检测错误校验序列,如图所示。 ...
  • 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。 错误帧错误标志和错误界定符两个部分组成。 主动错误标志:6个连续的显性位; 被动错误标志:6...
  • 在了解CAN总线中的错误检测之前,首先需要了解什么是位填充。 CAN协议中规定,当 相同极性的电平持续五位 时,则 添加一个极性相反的位 。 对于 发送节点 而言: 在发送 数据 和 遥控 时,对于 SOF~CRC...
  • 基于MATLAB的语音信号处理1语音简介语音,即语言的声音,是语言符号系统的载体。它由人的发音器官发出,负载着一定的语言意义,语言依靠语音实现它的社会功能。语音是人们交流思想和进行社会活动的最基本手段,因此...
  • 差错检测3.1 总结3.2 课后练习 2. 封装成   封装成是指数据链路层给上层交付的协议数据单元添加头和尾,使之成为。    ⋄\diamond⋄ 在头和尾中包含有重要的控制信息。    ⋄\diamond⋄ ...
  • 但在传输过程中,由于干扰和环境影响会使同步码组中码元发生错误,乃至失锁,电路就难以保证服务质量,有必要对电路采取同步状态保护措施。同时由于信息码是随机的,完全可能出现与同步码相同结构的码组而造成...
  • 当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK信号)向发送器发送一“显性”的位以示应答。 应答间隙:所有接收到匹配CRC序列(CRC SEQUENCE)的站会在应答间隙(AC...
  • CAN解析

    千次阅读 2019-10-19 10:02:47
    版本 ...整理CAN解析 0.3 2018.06.24 整理CAN数据类型格式 0.4 2018.07.07 完善CAN解析 0.5 2018.07.22 补充CAN类型说明 0.6 2018.08.05 整理CAN仲裁 0.7 2018.09.10 整理CAN处...
  • 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了。 错误帧错误标志和错误界定符两个部分组成。 主动错误标志:6个连续的显性位 (0); 被动错误...
  • CAN总线过载

    千次阅读 2018-03-30 08:31:18
    过载 过载与主动错误帧具有相同的格式。但是,过载只能在间间隔产生,因此可通过这种方式区分过载错误帧错误帧是在传输时发出的)。过载由两个字段组成,...1、节点在间间隔检测到非法显性位。
  • 今天,基本的交通灯信号检测问题已经得到解决。深度学习和计算机视觉的创新以强健的算法的形式存在。实现实时交通信号检测和分类。 它们在没有开发代码的情况下工作,手动确定颜色或交通信号灯的位置。例如,...
  • 语音信号短时时域分析

    千次阅读 2020-03-30 18:42:16
    语音信号的分处理,实际上就是对各进行某种变换或运算。 T[ ]:表示这种变换或运算 x(n):输入语音信号 w(n):窗序列 h(n):是与w(n)有关的滤波器 则各经处理后的输出可以表示为: 几种常见的短时处理方法: ...
  • Part3 语音信号的短时时域分析一、和加窗的概念二、短时平均能量三、短时平均幅度函数四、短时平均过零率五、短时自相关分析六、基于能量和过零率的语音端点检测七、基音周期估值八、总结 一、和加窗的概念 1.短...
  • CAN总线错误分析与解决

    万次阅读 多人点赞 2017-04-12 00:41:23
    CAN总线错误分析与解决 背景 写这篇文章是因为我看到网上介绍CAN总线错误处理的文章,清一色的都是生搬照抄教科书或是数据文档的内容,特别是国内很难找到一些有价值的内容,这让一些真正有需要的人很苦恼,包括我...
  • TR101-290码流三级错误监测

    千次阅读 2017-11-01 18:39:27
    TR101-290码流三级错误监测 1、第一优先级别:  1). 同步丢失(TS_sync_loss)  检测:连续检测到5个正常的同步字节(0x47)视为TS码流同步,连续检测到2个以上不正确的同步则认为同步字丢失。。TS流失去同步,...
  • 在这个设计实例中,由DDS生成模拟中频信号与本振信号,使用DDC(Digital Down Converter,数字下变频)提取出同相分量i和正交分量q,计算两路信号之间的相位差,将测量结果通过串口发送至PC,使用Qt上位机做界面显示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,948
精华内容 10,779
关键字:

帧错误检测信号