错误帧分为主动错误帧和被动错误帧
主动错误帧:6-12个显示标识位+8个隐形位
被动错误帧:6个隐形错误标识(可被其他在节点在显性位覆盖)+8个隐形位
实现原理
打破CAN总线位填充规则,从而导致接受数据节点产生错误
节点错误形式
主动错误状态:可以正常收发数据(主动、被动错误计数器均小于128),可以发送主动错误帧
被动错误状态:是节点本身受干扰或错误比较多时的工作模式,只能发送被动错误帧(主动、被动错误计数器其一在127、256之间),其实就是不允许它阻塞别的正常节点的通讯
总线关闭模式:节点错误很多时进入的模式(收或发错误计数器等于256),收发都被禁止。
主动报错和被动报错
1.
主动报错站点:只要检查到错误,它立即"主动地"发出错标识
所谓"出错标识",它本身就是一个"错误的位序列"(连续的6个显性位,不满足CAN协议的"最多5个连续的同性位"要求),目的是"主动地"告诉大家:即使你们 没有发现"刚才我已发现"的错误,现在我"以身作则"出错啦!你们该看到这个错误了吧!
所谓"出错标识",它本身就是一个"错误的位序列"(连续的6个显性位,不满足CAN协议的"最多5个连续的同性位"要求),目的是"主动地"告诉大家:即使你们 没有发现"刚才我已发现"的错误,现在我"以身作则"出错啦!你们该看到这个错误了吧!
2. 被动报错站点:如果检查到错误,它只能干瞪眼"被动地"等别人(主动报错站点)报错,等待的时候它可不能去动总线,直到识别出由主动报错站点发出的"错误的位序列",它才松了一口气:有人正式报错了!然后他就可以去竞争总线,该干啥干啥
3.出错标识本身没有什么优先级的问题.
4.对于通过竞争得到总线使用权的发送站点来说,它在一边发一边听,有可能:
(a).它自己就发现错误,它就干脆哗啦哗啦,乱发一气(连续的发六个同性位). 就象你小时候在幼儿园练习写字,写错一个笔画你自己就不耐烦了,在纸上哗啦哗啦,乱画一气.目的 就是告诉别人(别的站点),出错了!
(b).它自己没有发现错误,但作为主动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点就会立即哗啦哗啦往总线上乱发一气(连续的发六 个显性位),就象你小时候在幼儿园练习写字, 写错一个笔画你自己没发现,可老师(主动报错站点)发现了就不耐烦了, 在你的纸上哗啦哗啦,乱画一气.目的就是你自己以及告诉别 人(发送站点和别的站点),出错了!
(c).它自己没有发现错误,但作为被动报错的接收站点发现了错误(比如因为线路长,干扰大引起的错误),这个发现错误的站点只能慢慢的等待,等待别的主动报错站点报错,如果 别的主动报错站点没发现错误,那就继续等,一直等到该发ACK的时候不给发送站发这个显性的ACK信号,当然了其他站点可能会发这个ACK,那说明其他站点没有发生错误,没 办法,别人能通信, 你不能!然后积攒到一定的时候,你就脱离总线吧!再继续等待一段时间, 脱胎换骨,重新回到总线上(这个时候错误记录都清0了,你肯定是主动报错站了).就象你 小时候在幼儿园练习写字,写错一个笔画你自己没发现, 别的同学(被动报错站点)发现了但他不能说,嘿嘿(乱说话,老师要打屁股的),他就只能等,等老师来发现你的错误(等待主 动报错站点报错),或者老师没眼力,那就等到收作业的时候,不收你的(不发ACK),不过老师可能主动来收的(给你发ACK),那你可没办法,继续等吧,等到你也当老师了(脱胎换骨 了),.........