接口总线驱动 > 总线 > 详情

浅谈CAN总线数据链路层

发布时间:2024-09-06 发布时间:
|

  在物理线路上,由于噪声干扰、信号衰减等多种原因,数据传输过程中常常出现差错,而物理层只负责透明地传输结构的原始比特流,不可能进行任何差错控制。因此,当需要在一条线路上传送数据时,除了必须有一条物理线路(链路)外,还必须有一些必要的规程来控制这些数据的传输。把实现这些规程的硬件和软件加到链路上,就构成了数据链路层(Data Link Layer)。

  什么是 CAN 总线

  CAN 是“Controller Area Network”的缩写,即“控制器局域网”,是一个 ISO 标准的串行通信协议。CAN 总线由德国 BOSCH 公司研发设计,用于应对汽车上日益庞大的电子控制系统的需求,其最大的特点是可拓展性好,可承受大量数据的高速通信,并且高度稳定可到。ISO 组织通过 ISO11898 和 ISO11519 对 CAN 总线进行了标准化,使其早早确立了欧洲汽车总线标准的地位。时至今日,CAN 总线已经获得业界的高度认可,其应用也从汽车电子领域延伸至工业自动化、船舶、医疗设备、工业设备等领域。

  CAN 总线网络拓扑结构

  CAN 总线的物理连接只需要两根线,常称为 CAN_H 和 CAN_L,通过差分信号进行数据的传输。CAN 总线有两种电平,分别为 隐性电平 和 显性电平,这两种电平有着类似漏极 I/O 电平信号之间“与”的关系:

  若隐性电平相遇,则总线表现为隐性电平;

  若显性电平相遇,则总线表现为显性电平;

  若隐性电平和显性电平相遇,则总线表现为显性电平。

  一个典型的 CAN 总线网络拓扑结构如图1所示,注意两端的终端电阻是必需的。

  浅谈CAN总线数据链路层

  CAN总线数据链路层包括

  1、通信机制

  2、数据帧

  3、错误检测

  4、帧格式

  5、位定时与同步

  CAN总线帧格式

  数据就是通过这种格式按位发送出去。总线上总共有以下5种不同类型的帧。

  CAN 总线协议规定了5种帧,分别是数据帧、遥控帧、错误帧、过载帧以及帧间隔,实践中数据帧的应用最为频繁。各种帧的用途如表1所示。

  浅谈CAN总线数据链路层

  数据帧用来节点之间收发数据,是使用最多的帧类型;远程帧用来接收节点向发送节点接收数据;错误帧是某节点发现帧错误时用来向其他节点通知的帧;过载帧是接收节点用来向发送节点告知自身接收能力的帧;用于将数据帧、远程帧与前面帧隔离的帧。

  数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)。

  浅谈CAN总线数据链路层

  帧起始由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;

  帧结束由7个隐形位(高电平)组成。

  仲裁段

  CAN总线是如何解决多点竞争的问题?

  由仲裁段给出答案。

  CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。

  浅谈CAN总线数据链路层

  帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。

  控制段

  浅谈CAN总线数据链路层

  数据段

  为0-8字节,短帧结构,实时性好,适合汽车和工控领域;

  共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r1、r0和DLC组成。

  浅谈CAN总线数据链路层

  ACK段

  当接收节点接收到的帧起始到CRC段都没错误时,它将在ACK段发送一个显性电平,发送节点发送隐性电平,线与结果为显性电平。

  远程帧

  远程帧分为6个段,也分为标准帧和扩展帧,且RTR位为1(隐性电平)

  浅谈CAN总线数据链路层

  CAN是可靠性很高的总线,但是它也有五种错误。

  CRC错误:发送与接收的CRC值不同发生该错误;

  格式错误:帧格式不合法发生该错误;

  应答错误:发送节点在ACK阶段没有收到应答信息发生该错误;

  位发送错误:发送节点在发送信息时发现总线电平与发送电平不符发生该错误;

  位填充错误:通信线缆上违反通信规则时发生该错误。

  当发生这五种错误之一时,发送节点或接受节点将发送错误帧

  为防止某些节点自身出错而一直发送错误帧,干扰其他节点通信,CAN协议规定了节点的3种状态及行为

  浅谈CAN总线数据链路层

  过载帧

  当某节点没有做好接收的“准备”时,将发送过载帧,以通知发送节点。

  浅谈CAN总线数据链路层

  帧间隔

  用来隔离数据帧、远程帧与他们前面的帧,错误帧和过载帧前面不加帧间隔。

  浅谈CAN总线数据链路层


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
波形解码和报文解码不一致的情况分析