分享

CAN总线简介

 爱萨摩 2024-11-23

控制器局域网(Controller Area Network, CAN)是一种广泛应用于汽车和工业自动化领域的串行通信协议。它最初由德国的Bosch公司在1983年提出,旨在解决传统多线束布线带来的复杂性和成本问题。CAN总线支持分布式实时控制系统的高效数据交换,具有高可靠性、灵活性以及较强的抗干扰能力。这种特性使得CAN在需要可靠且快速响应的应用场景中成为首选方案。

图片

1

二、CAN 总线的特点

CAN 总线以其高可靠性、低成本、高效传输和易组网等特点著称。下面是整理的CAN总线主要特点:

  • 高可靠性:

    • 无主网络架构:

      不依赖于单一主机进行控制或管理,提高了系统的整体稳定性。

    • 消息ID与消息体分离:

      通过特定的消息标识符来区分不同类型的数据流,而不是基于发送者的身份,这使得即使某个节点出现故障也不会影响到整个网络的正常运行。

      图片

  • 成本效益:

    • 使用低压差分信号作为物理层标准,相较于其他一些解决方案如RS485,其收发器成本相近但额外提供了更强大的错误检测能力。

  • 高效的传输性能:

    • 采用短数据帧格式(最大长度为8字节),减少了传输时间及出错概率。

    • 不归零编码方式保证了快速而准确的信息传递。

    • 当发生错误时,重新发送所需的时间也相对较短。

  • 灵活便捷的网络构建:

    • 基于消息ID中的'0’位数量来决定优先级,实现了多节点之间自动化的竞争机制以获取总线使用权。

    • 支持热插拔功能,即新设备可以在不影响现有系统的情况下直接接入网络并开始工作。

  • 开放性:

    • 得益于博世公司早期采取的开放策略,加上众多硬件厂商、软件开发者及相关行业组织的支持与贡献,形成了一个庞大且活跃的生态系统。

    • 这种开放性和合作促进了技术的发展及其在不同领域内的广泛应用。

总之,这些特性共同作用使得CAN成为一种非常强大且灵活的串行通信协议,在需要高度可靠性和实时性的应用场景中表现尤为出色。

1

三、CAN总线的历史

  • CAN之前的版本:汽车ECU是复杂的点对点布线

  • 1986年:博世开发了CAN协议作为解决方案

  • 1991年:博世发布了CAN 2.0(CAN 2.0A:11位,2.0B:29位)

  • 1993年:CAN被采用为国际标准(ISO 11898)

  • 2003年:ISO 11898成为标准系列

  • 2012年:博世发布了CAN FD 1.0

  • 2015年:CAN FD协议标准化(ISO 11898-1)

  • 2016年:CAN物理层,数据速率高达5 Mbit / s,已通过ISO 11898-2标准化

图片

1

四、CAN总线的分层模型

根据ISO/OSI七层参考模型,CAN协议主要实现了物理层和数据链路层的功能:

  • 物理层:

    定义了电气特性,如信号电平、传输速率等。

    这层确保了数据能够以正确的方式通过物理媒介(通常是双绞线)进行传输。

  • 数据链路层:

    负责帧格式化、错误检测与处理等功能。

    此层管理着如何将数据组织成适合网络传输的形式,并提供了机制来检测并纠正传输过程中可能出现的错误。

下图是CAN总线协议栈的CAN网络节点的硬件设计模型。

图片

1

五、CAN协议的标准与版本

目前广泛使用的CAN标准有两个主要版本:

  • CAN 2.0A(标准帧格式),最大支持11位标识符。

    这种格式适用于大多数基本应用场合。

  • CAN 2.0B(扩展帧格式),允许使用29位标识符以增加网络容量。

    这对于那些对节点数量有更高要求或需要更细粒度消息区分的应用非常有用。

此外,还有更高级别的标准如CAN FD (Flexible Data-rate),它不仅提高了数据传输速率还增加了有效负载大小,从而能够在保持原有CAN架构优势的同时显著提升性能。

1

六、CAN总线网络构成

一个典型的CAN系统包括以下几个关键部分:

  • 控制器:

    负责处理所有与CAN相关的逻辑操作,比如生成发送命令、解析接收到的消息等。

  • 收发器:

    作为连接控制器与物理介质之间的桥梁,收发器将数字信号转换为可以在物理层上传输的模拟信号,并执行相反的过程以接收信息。

    常见的收发器型号包括TJA1050等。

  • 终端电阻:

    放置于总线两端,有助于稳定信号波形,减少反射效应,保证整个网络中的信号质量。

图片

收发器

收发器是实现从逻辑到物理层面转变的关键组件之一。它们不仅要能够准确无误地传递数据,还需具备一定的故障诊断能力,以便及时发现并报告任何可能影响正常通讯的问题。

信号表示与电气特性

  • 差分信号:

    采用两根导线传输,一根代表正极另一根代表负极,两者之间维持一定电压差值。

    这种方式可以有效抵抗外部电磁干扰,提高信号完整性。

  • 显性电平(逻辑0):

    当Vdiff > 1.5V时被认为是显性的,意味着当前时刻正在发送低电平信号。

  • 隐性电平(逻辑1):

    如果Vdiff < 0.5V,则该状态被视作隐性,即此时处于高电平状态。

图片
图片

波特率和传输线长度之间关系

1Mbps仅适合25米21个节点的CAN总线,0.8Mbps适合50米21个节点,当传输线长度达1Km时只能采用100K以下的波特率。 

1Mbps的位传输时间正好是1us,100m传输线的双向传输(发送和接收)延迟为1us(即200*5ns), 很显然发送者无法在单个位传输时间内确定是否发送成功。

图片

信号传输机制

基于载波侦听多路访问/冲突避免(CSMA/CA)策略工作。每个想要发送信息的节点首先会监听总线是否为空闲状态;如果是的话就立即开始发送自己的消息;反之则继续等待直到找到合适的机会为止。这种方法虽然简单但十分有效,能够在不依赖中央调度的情况下实现多个设备间的有序通信。

1

七、CAN 协议-数据格式

在CAN协议中,信息是以“帧”的形式发送出去的。“帧”是数据传输的基本单位。

每条CAN消息都遵循特定的数据结构,包含以下几部分:

  • 起始位:

    标记消息开始。

  • 仲裁段(标识符):

    用于确定消息优先级。

  • 控制段(DLC):

    指定数据字段长度。

  • 数据段:

    实际要传输的信息内容。

  • CRC序列:

    循环冗余校验码,用来验证数据完整性。

  • 确认槽:

    接收方反馈给发送方的一个确认标志。

  • 结束位:

    表明消息结束。

图片

目前在用CAN总线版本分为2.0A、2.0B、FD。

CAN2.0A标准协议

CAN2.0A标准协议支持4种协议帧:标准数据帧、远程请求帧、错误帧和过载帧,其中错误帧和过载帧都属于容错处理。当数据帧发送节点发送数据期间侦测到数据发送错误, 则发起主动错误帧(由连续6个显性位'0’代表错误帧标志和连续8个隐性位’1'代表错误定界符)告知CAN网络上其他节点放弃本次通讯,当数据帧接收者侦测到数据错误时, 则可以直接发出被动错误帧(由连续6个隐性位'1’代表错误帧标志和连续8个隐性位’1'代表错误定界符)。当网络接收者侦测到连续的数据帧之间侦测到非法的显性位'0’时, 则直接发出过载帧(由连续6个显性位'0’代表过载帧标志和连续8个隐性位’1'代表过载帧定界符)。根据我们目前对CAN总线的竞争和仲裁方法的认识,被动错误帧不影响数据帧的发送, 过载帧被触发时将会破坏数据帧的发送,这是因为6个连续的显性位'0’将违反CAN总线的位填充规则,迫使数据帧的发送者停止发送或发起主动错误帧。

CAN总线的错误帧和过载帧的协议设计十分巧妙,使得CAN总线的数据传输效率极高且容错性也很高。事实上,在用的几种CAN总线版本始终沿用CAN2.0A的这种容错处理机制。

下图展示了CAN2.0A标准的数据帧和远程请求帧。

信息发送者使用数据帧将节点数据广播到网络上,其他节点根据消息ID确定是否处理该消息。某些节点需要主动地从其他节点读取信息时,只需要将远程请求帧(仅包含消息ID且无数据域)广播到网络上,然后具有对应消息ID的CAN网络节点将会发送一个标准的数据帧(包含有远程请求帧ID和数据), 到网络上,主动发起远程请求帧的CAN总线节点将会收到请求的数据。

图片

CAN2.0A标准的数据帧和远程请求帧仅支持11位长度的ID,数据域长度为0~8个字节。如图8.6,CAN2.0A标准的数据帧和远程请求帧的主要区别是仲裁域的最后一个位:RTR(Remote Transmission Request),标准数据帧中该位是显性的('0’),远程请求帧只能够该位是隐性的('1’)。此外,两种数据帧的控制域中4个DLC(Data Length Code)位用来指定数据域的字节个数, 标准数据帧中DLC[3:0]={0, 1, .., 8},远程请求帧中DLC的4个位都是'0’表示无数据域。

CAN2.0B 标准协议

CAN2.0B标准是在CAN2.0A的基础上进行的升级,主要改进是增加了消息ID的位长度。具体来说,CAN2.0B支持29位的消息ID,并将仲裁域的位数扩展至32位。

为什么需要扩展ID位长度?

  • 总线竞争与仲裁:

    CAN总线使用消息ID和远程传输请求(RTR)位来决定哪个节点可以占用总线。

    这种机制不涉及其他类型的寻址。

  • 地址资源:

    消息ID类似于网络中的数据信息地址,其二进制位宽度直接影响CAN网络上所有节点的数据信息总容量。

  • 容量提升:

    因此,从CAN2.0A到CAN2.0B的升级本质上是为了提高CAN网络上的信息总容量。

兼容性

尽管引入了29位的ID扩展,CAN2.0B仍需兼容CAN2.0A。这意味着遵循CAN2.0B标准的节点和早期的CAN2.0A节点可以在同一个CAN网络上安全地共存并传输数据。这是在制定CAN2.0B标准时面临的一个重要挑战。

使用基本ID和ID扩展的CAN2.0B标准的数据帧和远程请求帧的位流格式如下图所示:

图片

在CAN2.0A标准的数据帧中该位称作保留位1(RB1)且始终保持为显性的('0’),在CAN2.0B标准的数据帧中该位被称作IDE(IDentifier Extension)。 

可以看到,CAN2.0B标准的节点使用11位基本ID传送数据时该位保持显性('0’)与CAN2.0A标准的数据帧保持一致。

CAN-FD 标准协议

相较于之前的2种版本,CAN FD标准的最大变化是增加数据域的字节个数(最大64个字节)和该域的波特率, 而且CAN FD标准不支持远程请求帧。在理论上,CAN FD仍兼容CAN2.0B标准,即支持两种标准的CAN网络节点可以共享同一个CAN网络, 继续保留11位宽度ID的数据帧。

图片

值得注意的是,CAN FD标准是首次采用2种不同波特率传输单个数据帧的机制,使用规则是仲裁域到控制域BRS位(包含该位)采用低波特率(兼容CAN2.0B不超过1Mbps), BRS位之后直到CRC界定符的所有位采用8倍速传输,确认域、帧结束域和帧间隔域则恢复低波特率传输。CAN FD标准的数据域最长可达64个字节,这是CAN2.0A/B标准的8倍, 如果传输CAN FD标准数据帧时允许使用8倍速传输数据域和CRC域的各位,CAN FD传输64个字节数据时占用CAN总线的时间不大于CAN2.0A/B的8个字节数据域的耗时。有些文献中称CAN FD标准支持的最大波特率可达10Mbps,事实上这是一种误解。

1

开发工具

在CAN总线的开发或故障排除过程中,检查硬件信号是非常重要的一步。为此,可以采用多种工具如逻辑分析仪、总线分析仪等来收集、分析、解码并存储高速波形信号。

其中,CAN总线分析仪是一种专门针对CAN总线设计的分析工具,它由硬件和软件两部分组成。这类监视器的主要功能之一是监听CAN总线上发生的通信活动,并通过其用户界面将这些信息直观地展示给用户。此外,许多CAN总线分析仪还具备向总线发送特定CAN帧的能力,这使得它们能够模拟真实的CAN总线环境下的数据传输情况。

利用CAN总线分析仪,开发者不仅可以验证被测设备是否按照预期的方式产生了正确的CAN流量,还可以通过模拟不同的CAN流量场景来测试设备对不同条件下CAN总线状态变化的响应能力。这样就为确保设备与CAN网络之间的良好兼容性和可靠性提供了强有力的支持。

(淘宝搜的图片,这是我常用的分析仪,或者使用周立功的 CAN 卡)

图片

以及对应的上位机软件

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多