汽车的CAN总线大致可以分为三大类,分别是:单线CAN(GM专用的低速CAN)、高速CAN(通信速率高)以及低速容错CAN(通信速率较低但容错性能好)。本文所要讲述的是低速容错CAN。在传统的分布式架构中,车身舒适CAN节点对总线通信速率没有过高要求,但为了适应车型高中低配的变化,其节点数量和组合及在车中的布置更为多样,这就更多的引入了出现故障的因素,使得低速CAN在车身舒适网段得到了广泛的应用。

为了更好的了解低速容错CAN,首先要从它的协议讲起。低速容错CAN最早被定义在ISO11519协议中,后续因为符合11898-3协议标准的样件也完全符合ISO11519-2协议的要求,同时因为11898协议应用的范围更全更广,所以在2006年ISO11519-2协议彻底的被11898-3协议所替代。ISO11898-3定义了低速容错CAN的物理层、低速容错CAN的工作机制以及容错机制的实现。

1. 低速容错CAN的物理层:

与高速CAN一样,低速容错CAN也使用了差分双绞线进行传输,有CAN_H、CAN_L两线,并且在严格的工业应用场合与高速CAN一样要求使用专用的屏蔽双绞线并加必要的防护电路。

在差分电压的变化上低速容错CAN在显隐性跳转的时候CANH和CANL电压的变化是比高速CAN要大的,这意味着低速容错CAN有着更高的抗干扰性。

11898-3定义了低速容错CAN在隐性状态时,CANH为0V、CANL为5V。而当低速容错CAN要发送显性位时,CANL会跳转到1V、CANH会跳转到4V,这个时候单一条总线的电压变化为4V,而且差分电压大概也为4V(如图1),而高速CAN的差分电压为2V(如图2),同时CANH与CANL从隐性跳转到显性的时候电压的变化仅有1V,这也意味着高速容错CAN的容错性能是不如低速容错CAN的。

图1:低速容错CAN总线电压

图2:高速CAN总线电压

在低速容错CAN的物理层中,11898-3还定义了它的终端电阻是直接端接在支线上的,电阻接线如图3所示。这样做的好处是在容错机制处理部分断路故障时,哪怕会出现单线通信的情况,也会有终端电阻的存在去匹配阻抗以及减小反射(如图4所示),这样便不会因为断开CANH或CANL的单线而对样件的通信传输造成影响。

图3:终端电阻接线图

图4:容错CAN单线工作时总线拓扑图

2. 协议中容错机制的定义

11898-3分别定义了电源故障和总线故障两种类型,而容错机制主要是对总线故障进行处理。为了应对不同的总线故障,11898-3定义了低速容错CAN需要有三种不同的收发器工作方式:差分驱动和接收、CANH单线通信、CANL单线通信,三种工作方式对应的故障检测机制分别为状态0:正常工作状态、状态E1:CAN_L故障检测、状态E2:CAN_H故障检测。11898-3定义的几种故障检测机制的故障处理流程图如下。

图5:故障处理流程图

3. TJA1054实现的容错机制

通过之前的介绍,我们对低速容错CAN的物理层有了较为全面的了解,现在我们便从物理环境的实现上来讲解低速容错CAN的容错机制。在这我需要为大家介绍一款适用于低速容错CAN的收发器芯片-TJA1054。首先是这款芯片的物理环境,其结构图和引脚定义如下图所示,TJA1054在CANH及CANL两端的电阻设计满足了ISO11898-3需求,同时TJA1054设计有门槛电压,能较好的实现低速容错CAN所需求的容错机制。

图6:TJA1054芯片结构图

图7:TJA1054芯片引脚定义图

4. TJA1054的功能描述

TJA1054是控制器局域网 CAN 中协议控制器和 CAN 物理总线之间的接口,它主要用于客车里最高 125KBps的低速应用,这个器件对 CAN 总线提供差动发送能力,对CAN 控制器提供差动接收能力。在正常操作模式时(没有线路故障),差动接收器在管脚 RXD 输出(见图 1)。差动接收器输入通过集成的滤波器连接到管脚CANH和CANL 波器输入信号也可以用于单线接收器。接收器连接到有门槛电压(差动接收器的门槛电压为-3.2V)的管脚CANH和CANL确保在单线模式里有最大的噪音容限。

同时定时器功能(TxD 显性超时功能)已在器件中集成,它可以防止由于硬件或软件程序故障,将管脚 TXD 持续地拉成低电平,使总线线路进入持续的显性状态(这种状态会阻塞整个网络的通讯)。

如果引脚 TXD 的低电平持续并超过某个时间后,发送器会被禁用,定时器会用 TXD 引脚上的高电平复位。而低速容错CAN的容错机制则是通过故障检测器监测总线电平,在监测到其中一条总线故障后,监测器便会切换到相应的模式,模式图如下表所示。这便满足了ISO11898-3中定义的正常工作模式下的三种故障检测机制。下图便是TJA1054在不同错误状态下的接收器模式列表。

图8:TJA1054在不同错误状态下的接收器模式

对于上表中出现的三种接收器模式,我将使用表格的形式为大家进行介绍。首先是差动模式,因为TJA1054设定了差动接收器门槛电压为-3.2V,这确保了当出现下表中故障1、2、5、6a时,虽然CANH和CANL的电压会因为以上四种故障有改变,但最终差分电压Vdiff都能在隐性时小于-3.2V显性时大于-3.2V,所以不需要进行调整便能继续通信。



当出现了下表中故障4、6、7三种故障时,差分模式已无法满足总线的正常通信。TJA1054会断开CANL,则CANL会保持Vcc的电压不变,一直为5V。此时差分电压Vdiff能满足在隐性时小于-3.2V显性时大于-3.2V,实现对故障4、6、7三种故障的容错。

5. 总结

当前,低速容错CAN由于其通信速率的限制,其在车载领域的应用更少了,本文所介绍的低速容错CAN的物理层、容错机制以及容错机制在芯片中的实现原理,希望可以加深大家对CAN通信原理的理解。
北汇信息专注于汽车电子网络通信、诊断刷写、逻辑功能测试开发服务,期待进一步沟通交流、共享合作的机会。

图片来源:
图1:源自于ISO11898-3(2006)第9页figure6
图2:源自于ISO11898-2(2016)第5页figure3
图3:源自于ISO11898-3(2006)第5页figure3
图4:源自于网图,11898-3(2006)第19页figure11移除CANH或CANL后可以得到这个简图
图5:源自于ISO11898-3(2006)第22页figure12
图7:源自于TJA1054应用指南第3页
图8:源自于TJA1054应用指南第3页
图9:源自于TJA1054应用指南第4页简化后

参考文档:
ISO11898-2(2016)、ISO11898-3(2006)、TJA1054应用指南

喜欢本篇文章的话记得

科普系列—低速容错CAN的容错机制介绍相关推荐

  1. 前端科普系列(2):Node.js 换个角度看世界,

    [前端科普系列]往期精彩内容: 前端科普系列(1):很有趣的一篇前端简史,作者有心了~主要介绍 web 前端发展的历史.大事件. 本文为系列文章(2),主要介绍 Node.js 的前世今生.核心科技以 ...

  2. GIT科普系列5:index in git

    背景: git的使用其实没有想象中的那么复杂,平日里真正使用的指令都是极少数.最简单格式的.之所以使用过程中感觉操作复杂.冲突不断,究其根源是对git的设计理念缺乏了解,没有搞清楚git实现版本控制的 ...

  3. GIT科普系列4:仓库/缓冲区/工作副本,傻傻分不清楚?

    背景: 公司内部主要以Git作为版本管理工具,在日常工作中发现大家使用Git很不熟练,而且学习的积极性不高,似乎GIT给人以一种望而却步的感觉.究其根源(个人臆测)有几点: 一.以为GIT相较于SVN ...

  4. 图灵科普系列丛书封面有奖征集(贴图送书)

    图灵科普系列丛书封面有奖征集(贴图送书) 知道吗?图灵要出科普书 啦! 现面对广大设计爱好者征集封面设计方案,希望大家踊跃参与,发挥你的想象力,充分展现个性与创意,快来进行一次思想大碰撞吧! 活动详情 ...

  5. .Net Discovery 系列之六--深入浅出.Net实时编译机制(下)

    接上文 在初始化时,HashTable中各个方法指向的并不是对应的内存入口地址,而是一个JIT预编译代理,这个函数负责将方法编译为本地代码.注意,这里JIT还没有进行编译,只是建立了方法表! 下表(表 ...

  6. .Net Discovery系列之十一-深入理解平台机制与性能影响 (中)

    上一篇文章中Aicken为大家介绍了.Net平台的垃圾回收机制与其对性能的影响,这一篇中将继续为大家介绍.Net平台的另一批黑马-JIT.    有关JIT的机制分析    ● 机制分析    以C# ...

  7. Kafka科普系列 | 原来Kafka中的选举有这么多?

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-selection/ 面试官在考查你Kafka知识的时候很可能会故弄玄虚的问 ...

  8. Kafka科普系列 | 什么是LSO?

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lso/ 很多同学对于Kafka的认知仅限于在LEO和HW之间,有可能认知还 ...

  9. Kafka科普系列 | 什么是LW和logStartOffset?

    欢迎跳转到本文的原文链接:https://honeypps.com/mq/kafka-basic-knowledge-of-lw-and-logstartoffset/ 很多读者对 Kafka 中的 ...

最新文章

  1. java 登录下线_java 实现 一个账号只能在一个地方登陆,其他地方被下线
  2. log4j的使用 与 父接口 slf4j 门面模式(外观模式)
  3. 【干货】从小米发布会看:雷军的七个产品思维
  4. Spark RDD的缓存
  5. 《Programming WPF》翻译 第9章 6.我们进行到哪里了?
  6. 【蓝鸥Unity开发基础三】课时3 Terrain地形系统【未完】
  7. laydate 周_宝来屋:5天168万!海盐周大生新店如何赢过竞品实现可持续化客流-广告随意贴...
  8. 博图安装msi失败_博途,V13,安装出现如此问题如何解决
  9. exadata存储相关学习
  10. 用Verilog实现数字钟
  11. 家庭局域网_局域网IP不止192.168 了解这些实用又安全
  12. Hibernate Session.get()和Session.laod()的区别
  13. python中读取和查看图片的6种方法
  14. 什么是共识?(理论篇)
  15. .ipynb 和 .py 文件
  16. It's not allowed to load an initial chunk on demand.问题处理
  17. matlab如何导出表格图表,如何将matlab绘制的图表导入到Word中 | 我爱分享网
  18. 安装Oracle11.2 RAC for Solaris10 sparc64(五)
  19. PHP取整。四舍五入取整,进一法、舍去法取整
  20. (还需要阅读代码)FoldingNet论文阅读

热门文章

  1. 基于JavaSwing开发画图软件 课程设计 小作业 大作业源码
  2. 【微信群助手】微信社群怎么运营?微信群规则范本
  3. java8合并两个List
  4. 有关浏览器教程:开启加速模式
  5. 推荐一个单干网赚好站!BUXJOB - 生活至上,美容至尚!
  6. 新人入职培训流程及转正交流过程指导原则
  7. c语言主函数调用函数
  8. Android自动电话录音开发过程及问题
  9. C语言常见的错误及解决办法,避坑笔记
  10. HihoCoder 1082 : 然而沼跃鱼早就看穿了一切