浅谈CAN总线

  在前面的《浅谈I2C总线》和《浅谈SPI总线》 中我们介绍的 I2C、SPI 总线多用于传输距离短、协议简单、数据量小、主要面向 IC(集成电路)间通信的“轻量级”场合。而 CAN 总线则不同,CAN 总线定义了更为优秀的物理层、数据链路层,并且拥有种类丰富、简繁不一的上层协议

什么是 CAN 总线

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

CAN 总线网络拓扑结构

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

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

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

浅谈CAN总线_第1张图片

图1. CAN 总线网络拓扑

CAN 总线的几种数据帧

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

表1. CAN 总线数据帧的种类及用途

帧类型
用途
数据帧
用于发送单元向接收单元传送数据的帧
过载帧
用于接收单元通知其尚未做好接收准备的帧
帧间隔
用于将数据帧及遥控帧与前面的帧分离开来的帧
遥控帧
用于接收单元向具有相同 ID 的发送单元请求数据的帧
错误帧
用于当检测出错误时向其他单元通知错误的帧

CAN 总线的特点

  CAN 总线网络是一种真正的多主机网络,在总线处于空闲状态时,任何一个节点单元都可以申请成为主机,向总线发送消息。其原则是:最先访问总线的节点单元可以获得总线的控制权;多个节点单元同时尝试获取总线的控制权时,将发生仲裁事件,具有高优先级的节点单元将获得总线控制权。
  CAN 协议中,所有的消息都以固定的数据格式打包发送。两个以上的节点单元同时发送信息时,根据节点标识符(常称为 ID,亦打包在固定的数据格式中)决定各自优先级关系,所以 ID 并非表示数据发送的目的地址,而是代表着各个节点访问总线的优先级。如此看来,CAN 总线并无类似其他总线“地址”的概念,在总线上增加节点单元时,连接在总线的其他节点单元的软硬件都不需要改变。
  CAN 总线的通信速率和总线长度有关,在总线长度小于 40m 的场合中,数据传输速率可以达到 1Mbps,而即便总线长度上升至 1000m,数据的传输速率仍可达到 50Kbps,无论在速率还是传输距离都明显优于常见的 RS232、RS485 和 I2C 总线。
  对于总线错误,CAN 总线有错误检测功能、错误通知功能、错误恢复功能三种应对措施,分别应对于下面三点表述:所有的单元节点都可以自动检测总线上的错误;检测出错误的节点单元会立刻将错误通知给其他节点单元;若正在发送消息的单元检测到当前总线发生错误,则立刻强制取消当前发送,并不断反复发送此消息至成功为止。
  CAN 总线上的每个节点都可以通过判断得出,当前总线上的错误时暂时的错误(如瞬间的强干扰)还是持续的错误(如总线断裂)。当总线上发生持续错误时,引起故障的节点单元会自动脱离总线。
  CAN 总线上的节点数量在理论上没有上限,但在实际上收到总线上的时间延时及电气负载的限制。降低最大通信速率,可以增加节点单元的连接数;反之,减少节点单元的连接数,则最大通信速率可以提高。

你可能感兴趣的:(单片机,ARM&系统移植,Linux设备驱动,PCB设计入门)