关闭

浅谈CAN总线

标签: CAN总线协议
1785人阅读 评论(1) 收藏 举报
分类:

  在前面的《浅谈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所示,注意两端的终端电阻是必需的。

这里写图片描述

图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 总线上的节点数量在理论上没有上限,但在实际上收到总线上的时间延时及电气负载的限制。降低最大通信速率,可以增加节点单元的连接数;反之,减少节点单元的连接数,则最大通信速率可以提高。

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

CAN总线基础知识(一)

1.CAN总线是什么?     CAN(Controller Area Network)是ISO国际标准化的串行通信协议。广泛应用于汽车、船舶等。具有已经被大家认可的高性能和可靠性。     CAN控...
  • shanghaiqianlun
  • shanghaiqianlun
  • 2014-01-03 17:32
  • 116512

CAN总线详细教程,精心编制,不可错过

  • 2015-05-26 20:23
  • 6.20MB
  • 下载

CAN总线基础知识(三)

1.CAN协议 1.1 帧类型 通讯时使用下面5个类型的帧:     数据帧     遥控帧     错误帧     过载帧     帧间空隙     在所有这些帧中,数据帧和遥控...
  • shanghaiqianlun
  • shanghaiqianlun
  • 2014-01-06 10:45
  • 52265

使用C#进行CAN 总线编程

  • 2008-11-07 12:25
  • 196KB
  • 下载

使用C#实现SSLSocket加密通讯

SSL Socket通讯是对socket的扩展,增加Socket通讯的数据安全性,SSL认证分为单向和双向认证。单向认证只认证服务器端的合法性而不认证客户端的合法性。双向认证是同时认证服务端和客户端。...
  • wuyb_2004
  • wuyb_2004
  • 2016-05-13 10:38
  • 5327

与动态执行的C# 代码进行通讯

1、简介能够动态执行 C# 代码是一件很酷的功能,比如,我们可以在控制台中输入一行 C# 代码,然后程序自动编译并执行这一行代码,将结果显示给我们。这差不多就是一个最简单的 C# 代码解释器了。动态执...
  • tongdoudpj
  • tongdoudpj
  • 2008-03-01 23:08
  • 1174

使用C#进行点对点通讯和文件传输

最近一个项目要用到点对点文件传输,俺就到处找资料写程序,最后终于完成了,为了让别人少走些弯路,俺决定将俺程序中最重要的部分贡献出来,希望对大家有所帮助。 俺的程序分三部分,包括发送部分、接受部分和一...
  • educast
  • educast
  • 2012-03-09 13:52
  • 1917

C#通讯编程

作者:sjm2003 转自:http://bbs.csdn.net/topics/240024868 Socket通讯: C# code? 1 2 3 4 5 6 7 8 9 10 ...
  • whw8007
  • whw8007
  • 2014-02-27 13:15
  • 859

基于C#的CAN通讯示例

  • 2016-03-04 09:25
  • 476KB
  • 下载

基于树莓派3的CAN总线编程

简介树莓派3使用Python控制SPI接口的MCP2515 CAN模块。实现命令行控制CAN的收发。
  • tylr2005
  • tylr2005
  • 2016-09-08 10:16
  • 4987
    个人资料
    • 访问:439070次
    • 积分:6584
    • 等级:
    • 排名:第4235名
    • 原创:196篇
    • 转载:50篇
    • 译文:6篇
    • 评论:237条
    Subscribe
      微信公众号
      我是一名软件工程师,也是一名零废弃倡导者,如果您跟我一样,把环保当成一种生活习惯,把环保当成一种时尚,欢迎关注我的个人公众号,一起交流关于技术与生活的所思所想。
    Donation
      微信支付
      如果您觉得我的文章对您有帮助,并想帮助我更快更好地产出更多优质文章,促进技术分享,推动社会进步。可以扫描下面的二维码进行打赏,谢谢!
    博客专栏
    最新评论