关于CAN总线的被动错误标志的问题?

关于CAN总线的被动错误标志,协议中的描述是"处于被动错误状态的单元检测出错误时,输出被动错误标志"。 对此有几个疑问: 1.被动错误标志的发送时机?假设…显示全部
 
 
 

4 个回答

默认排序​
汽车电子攻城狮
1 人赞同了该回答

谢谢。

挺久没接触相关内容了,我凭印象答一下,不一定对,供参考。

1. 检测到任何错误的情况下发送,比如Bit Error、Stuff Error等,我没记错的话应该是检测到错误的下一位就发送,有特例。

CAN总线有一条设计原则:当节点自身出现错误时,避免干扰其它正常节点的运行。当节点进入Error-Passive时,表明自身已检测到较多次错误且未恢复,但此时从宏观来看,无法确定错误是否由自身导致,因此将其Error Flag缄默掉是符合CAN总线的设计原则的。

(以上原因是我脑补的。)

2. 违反位填充,但未必触发Stuff Error,因为CAN总线具有显性位“吃掉”隐性位的特性。当其它节点仍在正常通信时,Error-Passive节点发送的Error Flag对总线不造成影响;但如果总线上只剩下Error Frame,则能够触发Stuff Error。

1​4 条评论

​分享

​收藏​感谢

学指弹的嵌入式狗
5 人赞同了该回答

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

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

1. 主动报错站点

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

2. 被动报错站点

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

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

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

(a) 它自己就发现错误,它就干脆哗啦哗啦,乱发一气(连续的发六个同性位)。目的就是告诉别人(别的站点):出错了!

(b) 它自己没有发现错误,但作为主动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点就会立即哗啦哗啦往总线上乱发一气(连续的发六个显性位)。目的就是告诉你自己以及告诉别人(发送站点和别的站点):出错了!

(c) 它自己没有发现错误,但作为被动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点只能慢慢的等待,等待别的主动报错站点报错。如果别的主动报错站点没发现错误,那就继续等,一直等到该发ACK的时候不给发送站发这个显性的ACK信号,当然了其他站点可能会发这个ACK,那说明其他站点没有发生错误,没办法,别人能正常通信,你不能!然后积攒到一定的时候,你就脱离总线吧!再继续等待一段时间,脱胎换骨,重新回到总线上(这个时候错误记录都清0了,你变成了主动报错站!)。

就象你在学校课堂黑板上写字,写错一个笔画你自己没发现,但被别的经常写错字的同学(被动报错站点)发现了,但他不能说,非常尬(老师同学们早不信他了,他自己经常写错字),他就只能等,等老师来发现你的错误(等待主动报错站点报错),但有时候老师没眼力,那他就只能等到老师问大家“他写的对不对”的时候,他不说话表示抗议(不发ACK)(他的抗议没人吊他的),不过老师却主动说你写的对(给你发ACK)!那位同学没办法,只能含着泪默默的在心里记一刀(错误计数+1)继续等,等到他也当老师了(脱胎换骨了)终于看到别人错误的时候,能跳出来叫一声!你丫写错了傻比!...

以上为转自网络,已经找不到源头了,再加上我的一点杜撰,应该比较好理解CAN错误帧这一段了

5​2 条评论

​分享

​收藏​感谢收起

对于第二个问题,发送出的被动错误标志是六个连续的隐性位,总线上的规则是线与,所以如果还有其他信息发送的话这些隐性位会被盖掉(遇到显性位的话),所以不会引起位填充错误,感觉你问的主要是这个

0​添加评论

​分享

​收藏​感谢

HIL探索者,CAN学习者,English爱好者。

1 被动错误的发送时机?

错误帧分两种情况

a 位错误、位填充错误、格式错误、应答错误产生后,都是在当前发送的下一位发送错误帧;

b CRC检验错误发生后,不立即发送错误帧,而是放在ACK界定符后发送。

2 被动错误标志(6个连续隐性位)也违反了位填充,是否会触发位填充错误?

任何状态下的六个连续相同位都违反位填充,但不是所有的都会触发位填充错误,要看有没有在总线上表现出来六个连续相同的位。如果总线上只剩下错误被动被动节点,则会触发位错误;

0​添加评论

​分享

​收藏​感谢

关于CAN总线的被动错误标志的问题?的更多相关文章

  1. CAN总线学习总结——错误帧和错误状态

    CAN总线学习总结——错误帧和错误状态 标签: 数据 / 错误帧 / 错误状态 / CAN总线 / 总线协议 253 一.五种CAN总线可能发生的错误 1.CRC错误: 接收节点计算出的CRC校验值, ...

  2. CAN总线学习记录之三:总线中主动错误和被动错误的通俗解释

    首先建议把广泛使用的"主动错误"和"被动错误"概念换成"主动报错"和"被动报错". 1. 主动报错站点 只要检查到错误, ...

  3. CAN总线远程帧和错误帧

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

  4. 【单片机通信协议】CAN总线基础知识

    CAN总线基础知识(一) 1.1 CAN总线是什么? CAN(Controller Area Network)是ISO国际标准化的串行通信协议.广泛应用于汽车.船舶等.具有已经被大家认可的高性能和可靠 ...

  5. CAN总线基础知识(三)

    1.CAN协议 1.1 帧类型 通讯时使用下面5个类型的帧: 数据帧 遥控帧 错误帧 过载帧 帧间空隙 在所有这些帧中,数据帧和遥控帧由用户设置,而其它帧则由CAN硬件设置. 数据和遥控帧有两种格式: ...

  6. CAN总线基础知识(一)

    1.CAN总线是什么? CAN(Controller Area Network)是ISO国际标准化的串行通信协议.广泛应用于汽车.船舶等.具有已经被大家认可的高性能和可靠性. CAN控制器通过组成总线 ...

  7. CAN总线要点

    前言 CAN总线的应用在现在看来越来越广泛,我厂设备从最初的ARM9与ARM7平台.期间升级过度到CortexA8与Cortex M3平台,再到现在的Cortex M4平台,围绕CAN进行了一系列产品 ...

  8. 【转】汽车CAN总线

    概述 CAN(Controller Area Network)总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线,它起初用于实现汽车内ECU之间可靠的通信,后因其简单实用可靠等特点,而 ...

  9. CAN总线协议 学习笔记

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

随机推荐

  1. 退役前的最后的做题记录upd:2019.04.04

    考试考到自闭,每天被吊打. 还有几天可能就要AFO了呢... Luogu3602:Koishi Loves Segments 从左向右,每次删除右端点最大的即可. [HEOI2014]南园满地堆轻絮 ...

  2. 【代码笔记】iOS-JQIndicatorViewDemo

    一,效果图. 二,工程图. 三,代码. #import "ViewController.h" #import "JQIndicatorView.h" @inte ...

  3. 【代码笔记】iOS-给密码进行加密

    一,工程图. 二,代码. #import "ViewController.h" #import "Base64CodeByteFunc.h" @interfac ...

  4. JavaSE——TCP协议网络编程(二)

    1.Java网络编程与多线程的综合应用: 类Socket提供了方法getInputStream ()和getOutStream()来得到对应的输入/输出流以进行读/写操作,这两个方法分别返回Input ...

  5. 图像矫正-基于opencv实现

    一.引言 上篇文章中四种方法对图像进行倾角矫正都非常有效.Hough变换和Radon相似,其抗干扰能力比较强,但是运算量大,程序执行慢,其改进方法为:我们可以不对整幅图像进行操作,可以在图像中选取一块 ...

  6. 前端开发笔记(1)html基础

    HTML介绍 HTML是HyperTextMarkupLanguage超文本标记语言的缩写 HTML是标记语意的语言 编辑器 任何纯文本编辑器都能够编辑html,比如记事本,editplus,note ...

  7. Maven学习(四)eclipse创建maven项目

    eclipse创建Maven web项目 1.创建新项目 选择File -> New ->Project 选择New Project窗口中选择 Maven -> Maven Proj ...

  8. MySQL数据库封装和分页查询

    1.数据库封装 <?php //我用的数据库名是housedb class DBDA {public $host="localhost";public $uid=" ...

  9. 《SQLSERVER2012实施与管理实战指南》前4章节笔记内容

    <SQLSERVER2012实施与管理实战指南>前4章节笔记内容 <SQLSERVER2012实施与管理实战指南>的前面4章是<SQLSERVER企业级平台管理实践> ...

  10. .net core项目初建

    电脑装Visual Studio2017,并升级版本.启动一个.net core 的项目. NET Core基本介绍 1.1 什么是ASP.NET Core ASP.NET Core 是一个全新的开源 ...