1、CAN错误检测(Error Detection)
   CAN网络具有严格的错误诊断功能,该功能已固化在硅片之中,一旦错误被检测,正在传送的数据帧将会立即停止而待总线空闲时再次重发直至发送成功,该过程并不需要CPU的干涉除非错误累计该发送器退隐(Bus Off)。CAN控制器可检测如下五种错误:
   √ 位错误(Bit Check Error)
   发送器在发送比特流的同时也对发出的比特流采样回收,若送出的bit与所期待的bit不合,则会检测到一个Bit Check Error;
  
   √ 位填充错误(Bit Stuff Error)
   在需要执行位编码规则的位流序列中检测到第6个连续的极性相同的位序流时,则检测到一个Bit Stuff Error;
  
   √ CRC 错误(CRC Error)
   发送端送出的CRC序列由发送器算出,接收器执行同样的CRC算法,若计算结果与接收到的CRC序列不符,一个CRC Error被检测到,由发送端送出;
 
   √ 帧格式错误(Frame Check Error)
   当一个固定形式的位场含非法位,则检测到一个Frame Check Error(接收端检测到帧结束最后一位为显性时帧错误忽略);
  
   √ 应答错误(Acknowledgment Error)
   ACK SLOT采样为隐性,则检测到一个Acknowledgement Error;

2、CAN错误界定(Error Confinement)

  CAN控制器内置两个错误计数器:Receive Error Counter及Tranmit Error Counter(错误计数器的计数规则后附)。当某个计数器的当前值达到128时,CAN控制器将进入“Error Passive Mode”,此时该节点仍然参与CAN通讯,检测到错误时只能发送“Error Passive Flag”,且错误帧发送完毕重启下一个发送之前有8bits位时的挂起状态;当Tranmit Error Counter当前值为255接着又一个错误被检测到时,CAN控制器将进入“Bus Off Mode”,此时该节点与总线完全脱离,整个瘫痪;计数器当前值均小于128时,CAN控制器被标识为“Error Active Mode”,CAN节点可正常通讯并检测到错误时发送“Error Active Flag”。这三种状态之间关系为:
3、LPC2294中的CAN控制器错误处理
   LPC2294内置的CAN控制模块完全符合CAN Spec 2.0B,当CAN控制器被迫进入BusOff状态后:CANGSR寄存器中的BS位置位;CANICR中的BEI位置位,若CANIER寄存器的BEIE使能,将引发CAN中断;CANMOD中的RM置位,CAN控制器处于复位状态;同时发送错误计数器被设置为127,接收错误计数器清零。CAN控制器进入BusOff状态后必须由软件复位RM位,以恢复通讯;RM清零进入Normal Operation状态后,当检测到总线上11bits的连续隐性位流出现128次之后,发送错误计数器清零,CANGSR中的BS、ES位清零,同时若中断允许,将产生中断,CAN控制器重返CAN通讯。
  
4、CAN2.0B(Active)规范的错误计数器的计数规则:
   1. When a RECEIVER detects an error, the RECEIVE ERROR COUNT will be increased by 1, except when the detected error was a BIT ERROR during the sending of an ACTIVE ERROR FLAG or an OVERLOAD FLAG.
   2. When a RECEIVER detects a ’dominant’ bit as the first bit after sending an ERROR FLAG the RECEIVE ERROR COUNT will be increased by 8.
   3. When a TRANSMITTER sends an ERROR FLAG the TRANSMIT ERROR COUNT is
increased by 8.
   Exception 1:
   If the TRANSMITTER is ’error passive’ and detects an ACKNOWLEDGEMENT ERROR because of not detecting a ’dominant’ ACK and does not detect a ’dominant’ bit while sending its PASSIVE ERROR FLAG.
   Exception 2:
   If the TRANSMITTER sends an ERROR FLAG because a STUFF ERROR occurred during ARBITRATION, and should have been ’recessive’, and has been sent as ’recessive’ but monitored as ’dominant’.
   In exceptions 1 and 2 the TRANSMIT ERROR COUNT is not changed.
   4. If an TRANSMITTER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the TRANSMIT ERROR COUNT is increased by 8.
   5. If an RECEIVER detects a BIT ERROR while sending an ACTIVE ERROR FLAG or an OVERLOAD FLAG the RECEIVE ERROR COUNT is increased by 8.
   6. Any node tolerates up to 7 consecutive ’dominant’ bits after sending an ACTIVE ERROR FLAG, PASSIVE ERROR FLAG or OVERLOAD FLAG. After detecting the 14th consecutive ’dominant’ bit (in case of an ACTIVE ERROR FLAG or an OVERLOAD FLAG) or after detecting the 8th consecutive ’dominant’ bit following a PASSIVE ERROR FLAG, and after each sequence of additional eight consecutive ’dominant’ bits every TRANSMITTER increases its TRANSMIT ERROR COUNT by 8 and every RECEIVER increases its RECEIVE ERROR COUNT by 8.
   7. After the successful transmission of a message (getting ACK and no error until END OF FRAME is finished) the TRANSMIT ERROR COUNT is decreased by 1 unless it was already 0.
   8. After the successful reception of a message (reception without error up to the ACK SLOT and the successful sending of the ACK bit), the RECEIVE ERROR COUNT is decreased by 1, if it was between 1 and 127. If the RECEIVE ERROR COUNT was 0, it stays 0, and if it was greater than 127, then it will be set to a value between 119 and 127.
   9. A node is ’error passive’ when the TRANSMIT ERROR COUNT equals or exceeds 128, or when the RECEIVE ERROR COUNT equals or exceeds 128. An error condition letting a node become ’error passive’ causes the node to send an ACTIVE ERROR FLAG.
   10. A node is ’bus off’ when the TRANSMIT ERROR COUNT is greater than or equal to 256.
   11. An ’error passive’ node becomes ’error active’ again when both the TRANSMIT ERROR COUNT and the RECEIVE ERROR COUNT are less than or equal to 127.
   12. An node which is ’bus off’ is permitted to become ’error active’ (no longer ’bus off’) with its error counters both set to 0 after 128 occurrances of 11 consecutive ’recessive’ bits have been monitored on the bus.
   Note:
   An error count value greater than about 96 indicates a heavily disturbed bus. It may be of advantage to provide means to test for this condition.

====

http://blog.sina.com.cn/s/blog_6a1e3cec0100qiw6.html

----------------------------------------------------------

CAN 总线中主动错误和被动错误的通俗解释

首先建议把广泛使用的“主动错误”和“被动错误”概念换成“主动报错”和“被动报错”。

1. 主动报错站点

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

2. 被动报错站点

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

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

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

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

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

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

devicenet协议中关于CAN 的出错管理的规范

一、 错误类型

CAN 提供了检测下列错误类型的机制:

l. 位错误

当发送器将自己发送的电平与总线上的电平相比较,发现两者不相等时产生。隐性位传输时, 显形位的检测在仲裁区, ACK 时间段或被动故障标志传输期间不会导致位错误。

2. 应答错误

当发送器确定信息没有得到应答时发生。在数据帧及远程帧之间存在一个应答时间段。该时间段内,所有接收的节点,无论是否是预定的接收者都必须对接收的信息作出应答。

3. 填充错误

当节点检测到 6 个相同电平值的连续位时发生。在正常工作情况下,当发送器检测到它已经发送了 5 个数值相同的连续位时,那么它将在第六位上插入一个取反值(称之为位填充)。所有接收器在 CRC (循环冗余检查)计算之前将除去填充位。 这样,当节点检测到 6 个连续的具有相同值的位时,即产生一个填充位错误。

4. CRC 错误

当 CRC (循环冗余检查)值与发送器生成值不匹配时发生。每一帧包含一个由发送器初始化的循环冗余检查 (CRC) 域。接收器计算出 CRC值,并与发送器产生的值相比较。如果两个值不相等,即产生 CRC 错误。

5. 格式错误

当在一必须发送预定值的区内检测到非法位时发生。确定的预定义的位值必须在 CAN 帧内的一个确定点发送,如果在这些区域中的一个内检测到非法位值,即产生格式错误。

二、节点错误状态

为了尽量减小网络上故障节点的负面影响,进而提供故障界定, CAN 定义了一个故障界定状态机制。一个节点可能处于下列三种错误状态之一:

1. 错误主动(Error Active)

当一个错误主动节点检测到错误时,它将发送一个错误主动帧,该帧由 6 个连续的显性位组成。这一发送将覆盖其他任何同时生成的发送,并导致其他所有节点都检测到一个填充错误,并依次放弃当前帧。

当处于错误主动状态的节点检测到一个发送问题时,它将发出一个活动错误帧,以避免所有其他节点接收信息包。无论检测到错误的节点是否要接收这个数据都要执行这个过程。

2. 错误被动 (Error Passive)

当一个错误被动节点检测到错误时,它将发出一个错误被动帧。该帧由 6 个连续的隐性位组成,这个帧可能会被同时出现的其他发送所覆盖,如果其它站点没有检测到这一错误将不会引起丢弃当前帧。

3. 离线 (Bus Off)

处于离线状态下的节点不允许对总线有任何影响它在逻辑上与网络断开。

故障界定状态机制中所含过程简述如下:

1. 节点保持对发送和接收错误计数器的跟踪;
2. 节点在开始错误主动状态时错误计数器的值等于0。该状态下的节点假设所有检测到的错误非该节点所为;

3. 错误类型以及检出错误的结点被赋予不同的计数值,这些计数值将根据是发送还是接收错误进行累加。有效的接收及发送使这些计数器递减,直至最小值0;

4. 当这些计数器中的任何一个超出 CAN 定义的阈值时,该节点进入错误被动状态。在此状态下该节点将被认为是导致错误的原因;

5. 当发送错误计数值超出 CAN 定义的另一个阈值时,节点进入离线状态。本规范定义了从离线到错误主动之间的状态转换机制;

6. 当错误被动的节点的发送及接收错误计数器值都减小至CAN 定义的阈值以下时,节点重新进入错误主动状态。


CAN错误状态

来自: http://hi.baidu.com/fwxh101/blog/item/2288d88936ed77719e2fb4b2.html

CAN 错误帧和原理相关推荐

  1. 关于CAN报文中ACK应答错误的检测原理

    CAN协议里对ACK(应答场)有如下的描述: 应答场长度为2个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER).在应答场里,发送站发送两个"隐性"位. ...

  2. CAN总线数据帧/标准帧/扩展帧/远程帧/错误帧的组成格式对比

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

  3. AUTOSAR从入门到精通100讲(十四)-一文详解CAN总线错误帧

    01 错误帧的帧结构 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了. 错误帧由错误标志和错误界定符两个部分组成. 主动错误标志:6个连续的显 ...

  4. CAN 数据帧,远程帧,错误帧,以及出错重连

    1.CAN协议的定义: CAN总线使用串行数据传输方式,当can总线上的一个节点站发送数据,它以报文形式广播给网络中所有的节点.对于每隔节点来说,无论数据是不是发给自己的,都对其进行接受. 2.CAN ...

  5. CAN总线基础知识(4)——CAN的错误帧

    CAN总线基础知识(4) 什么是错误帧? 用于接收到单元向具有相同ID的发送的单元请求数据的帧. 尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种. 当出现5 ...

  6. CAN总线错误帧详解

    1.错误帧的帧结构 在发送和接收报文时,总线上的节点如果检测出了错误,那么该节点就会发送错误帧,通知总线上的节点,自己出错了. 错误帧由错误标志和错误界定符两个部分组成. 主动错误标志:6个连续的显性 ...

  7. H264中I、B、P帧编码原理及pts和dts分析

    转载自:https://blog.csdn.net/bingqingsuimeng/article/details/9982107 --前言-- H264是新一代的编码标准,以高压缩高质量和支持多种网 ...

  8. html页面源码_整合SpringMVC之错误处理底层原理及源码分析

    一. SpringBoot的默认错误处理策略 1. 对404的默认处理策略 我们在发送请求的时候,如果发生了404异常,SpringBoot是怎么处理的呢? 我们可以随便发送一个不存在的请求来验证一下 ...

  9. 直播系统---从直播答题看SEI帧的原理和作用

    什么事SEI SEI即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是H.264/H.265这些视频压 ...

最新文章

  1. 越南71岁的工程师,给全世界的机械人送了一份大礼!
  2. HDU1827(强连通分量)
  3. 使用 IntraWeb (15) - 基本控件之 TIWEdit、TIWMemo、TIWText
  4. 基于OMAPL138的字符驱动_GPIO驱动AD9833(三)之中断申请IRQ
  5. 获国际架构顶会ATC2021最佳论文!Fuxi2.0去中心化的调度架构详解
  6. java数组排序冒泡排序_java数组常见的排序——选择排序和冒泡排序
  7. ASP.NET Core 2.1 : 十.升级现有Core2.0 项目到2.1
  8. 9.数据结构 --- 查找
  9. Microsoft SQL Server 2005安装
  10. 第一篇博客——开天辟地
  11. 为什么边缘概率密度是联合概率密度的积分_5.27005柏林联合VS美因茨
  12. BestCoder #88(1001 1002)
  13. Spring 事务扩展机制 TransactionSynchronization
  14. 查看nvidia gpu共享内存大小
  15. 大数据仓库之拉链表讲解与举例说明【基础部分】
  16. lighttpd出现mod_indexfile.so: cannot open shared object file: No such file or directory
  17. 量化研究 | 策略在指数与主连复权的差异化分析(最终篇)
  18. 系统架构设计师如何进行架构设计
  19. 解决xlrd不能打开xlsx表格以及打开失败问题
  20. leetcode 滑动窗口

热门文章

  1. js 跨浏览器tab页通信
  2. python画五角星-Python的画五角星
  3. 部署Gbase 8c的系统要求
  4. MITxPro平台 Base SPOC-MachineLearning, Modeling, and Simulation Principles 课后习题参考答案
  5. tkinter浏览器组件
  6. 2021EC-final博弈论E题Prof. Pang and Poker
  7. LYZ-Ice Skates
  8. 苹果企业签名独立、非独立什么意思?
  9. 扫雷游戏(模拟算法)
  10. 沃尔玛跨境智星的介绍与用法