关于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. python 日志打印之logging使用介绍

    python 日志打印之logging使用介绍 by:授客QQ:1033553122 测试环境: Python版本:Python 2.7   简单的将日志打印到屏幕 import logging lo ...

  2. Why do collection classes appear

    package com.itheima_01; import java.util.ArrayList; /* * 为什么会出现集合类: * 我们学习的是面向对象编程语言,而面向对象编程语言对事物的描述 ...

  3. Flex自动回收导致监听不到ModuleEvent.READY事件

    Flex中可以动态载入模块,以达到延迟加载,减小主程序体积的效果.通常可以使用如下代码: var iminfo:IModuleInfo = ModuleManager.getModule(" ...

  4. 【Python】生成词云

    import matplotlib.pyplot as plt from wordcloud import WordCloud import jieba text_from_file_with_apa ...

  5. excel、xls文件读写操作

    python 常用的excel.xls文件读写操作,有两个模块 xlrd:读 xlwt:写 本次先写一个读的例子: class CaseData(object): def __init__(self, ...

  6. oracle--ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效

    SELECT sid, serial#, username, osuser FROM v$session where sid in(select session_id from v$locked_ob ...

  7. 将 HPC 作业从本地计算机提交到部署在 Azure 中的 HPC Pack 群集

    Note Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典. 这篇文章介绍了如何使用这两种模型,但 Azure 建议大多数最新部署使用 Resource ...

  8. 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集

    Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...

  9. 《SQL Server 2008从入门到精通》--20180723

    目录 1.架构 1.1.创建架构并在架构中创建表 1.2.删除架构 1.3.修改表的架构 2.视图 2.1.新建视图 2.2.使用视图修改数据 2.3.删除视图 3.索引 3.1.聚集索引 3.2.非 ...

  10. js经典应用

    一.js字符串转数字: 1.parseInt()和parseFloat()两个转换函数: 2.强制类型转换,Number(value)——把给定的值转换成数字(可以是整数或浮点数): 3.利用js变量 ...