控制器局域网(Controller Area Network, CAN)是一种广泛应用于汽车和工业自动化领域的串行通信协议。它最初由德国的Bosch公司在1983年提出,旨在解决传统多线束布线带来的复杂性和成本问题。CAN总线支持分布式实时控制系统的高效数据交换,具有高可靠性、灵活性以及较强的抗干扰能力。这种特性使得CAN在需要可靠且快速响应的应用场景中成为首选方案。 1 二、CAN 总线的特点 CAN 总线以其高可靠性、低成本、高效传输和易组网等特点著称。下面是整理的CAN总线主要特点:
总之,这些特性共同作用使得CAN成为一种非常强大且灵活的串行通信协议,在需要高度可靠性和实时性的应用场景中表现尤为出色。 1 三、CAN总线的历史
1 四、CAN总线的分层模型 根据ISO/OSI七层参考模型,CAN协议主要实现了物理层和数据链路层的功能:
下图是CAN总线协议栈的CAN网络节点的硬件设计模型。 1 五、CAN协议的标准与版本 目前广泛使用的CAN标准有两个主要版本:
此外,还有更高级别的标准如CAN FD (Flexible Data-rate),它不仅提高了数据传输速率还增加了有效负载大小,从而能够在保持原有CAN架构优势的同时显著提升性能。 1 六、CAN总线网络构成 一个典型的CAN系统包括以下几个关键部分:
收发器 收发器是实现从逻辑到物理层面转变的关键组件之一。它们不仅要能够准确无误地传递数据,还需具备一定的故障诊断能力,以便及时发现并报告任何可能影响正常通讯的问题。 信号表示与电气特性
波特率和传输线长度之间关系 1Mbps仅适合25米21个节点的CAN总线,0.8Mbps适合50米21个节点,当传输线长度达1Km时只能采用100K以下的波特率。 1Mbps的位传输时间正好是1us,100m传输线的双向传输(发送和接收)延迟为1us(即200*5ns), 很显然发送者无法在单个位传输时间内确定是否发送成功。 信号传输机制 基于载波侦听多路访问/冲突避免(CSMA/CA)策略工作。每个想要发送信息的节点首先会监听总线是否为空闲状态;如果是的话就立即开始发送自己的消息;反之则继续等待直到找到合适的机会为止。这种方法虽然简单但十分有效,能够在不依赖中央调度的情况下实现多个设备间的有序通信。 1 七、CAN 协议-数据格式 在CAN协议中,信息是以“帧”的形式发送出去的。“帧”是数据传输的基本单位。 每条CAN消息都遵循特定的数据结构,包含以下几部分:
目前在用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位长度?
兼容性 尽管引入了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 卡) 以及对应的上位机软件 |
|