【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

这篇具有很好参考价值的文章主要介绍了【Linux CAN应用编程(1)】初识CAN总线(附全文代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        接下来我们学习 CAN 应用编程,CAN 是目前应用非常广泛的现场总线之一,主要应用于汽车电子和工业领域,尤其是汽车领域,汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。CAN 总线目前是自动化领域发展的热点技术之一,由于其高可靠性,CAN 总线目前广泛的应用于工业自动化、船舶、汽车、医疗和工业设备等方面。

什么是 CAN?

        CAN 是 Controller Area Network 的缩写(以下称为 CAN),即控制器局域网络,是 ISO 国际标准化的串行通信协议。

        CAN 总线最初是由德国博世公司(BOSCH)开发,其最初动机就是为了解决现代汽车中庞大的电子控制系统之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。

        在当前的汽车工业中,出于对安全性、舒适性、方便性、低污染、低成本的要求,各种各样的电子控制系统被开发了出来,车上的电子控制系统越来越多,譬如发动机管理控制、变速箱控制、汽车仪表、空调、 车门控制、灯光控制、气囊控制、转向控制、胎压监测、制动系统、雷达、自适应巡航、电子防盗系统等。 由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议,目前已是当前应用最广泛的现场总线之一。

        CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。经过几十年的发展,现在,CAN的高性能、高可靠性以及高实时性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

        以汽车电子为例,汽车上有空调、车门、发动机、大量传感器等,这些部件、模块都是通过 CAN 总线连在一起形成一个网络,车载网络构想图如下所示:

【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

CAN 的特点

        CAN 通信协议具有以下特点:

        (1)、多主控制

        在总线空闲时,所有的单元都可开始发送消息(多主控制)。 最先访问总线的单元可获得发送权(CSMA/CA方式)。多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权。

        (2)、消息的发送

        在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发 送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并 不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各 消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利 的单元则立刻停止发送而进行接收工作。

        (3)、系统的柔性

        与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

        (4)、通信速度

        根据整个网络的规模,可设定适合的通信速度。 在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此 单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

        (5)、远程数据请求

        可通过发送“遥控帧” 请求其他单元发送数据。

        (6)、具有错误检测功能·错误通知功能·错误恢复功能

        所有的单元都可以检测错误(错误检测功能)。 检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

        (7)、故障封闭

        CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

        (8)、连接

        CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

CAN 的电气属性

        CAN 总线使用两根线来连接各个单元:CAN_H 和 CAN_L,CAN 控制器通过判断这两根线上的电位差来得到总线电平,CAN 总线电平分为显性电平和隐性电平两种。显性电平表示逻辑“0”,此时 CAN_H 电平比 CAN_L 高,分别为 3.5V 和 1.5V,电位差为 2V。隐形电平表示逻辑“1”,此时 CAN_H 和 CAN_L 电 压都为 2.5V 左右,电位差为 0V。CAN 总线就通过显性和隐形电平的变化来将具体的数据发送出去,如下图所示:

【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

         CAN 总线上没有节点传输数据的时候一直处于隐性状态,也就是说总线空闲状态的时候一直处于隐性。

CAN 网络拓扑

        CAN 是一种分布式的控制总线,CAN 总线作为一种控制器局域网,和普通的以太网一样,它的网络由很多的 CAN 节点构成,其网络拓扑结构如下图所示:

【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

         CAN 网络的每个节点非常简单,均由一个 MCU(微控制器)、一个 CAN 控制器和一个 CAN 收发器构成,然后通过 CAN_H 和 CAN_L 这两根线连接在一起形成一个 CAN 局域网络。CAN 能够使用多种物理介质,例如双绞线、光纤等。最常用的就是双绞线。信号使用差分电压传送,两条信号线被称为“CAN_H” 和“CAN_L”,在我们的开发板上,CAN 接口使用了这两条信号线,CAN 接口也只有这两条信号线。

        由此可知,CAN 控制器局域网和普通的以太网一样,每一个 CAN 节点就相当于局域网络中的一台主机。

        途中所有的 CAN 节点单元都采用 CAN_H 和 CAN_L 这两根线连接在一起,CAN_H 接 CAN_H、CAN_L 接 CAN_L,CAN 总线两端要各接一个 120Ω的端接电阻,用于匹配总线阻抗,吸收信号反射及回拨,提高 数据通信的抗干扰能力以及可靠性。

        CAN 总线传输速度可达 1Mbps/S,最新的 CAN-FD 最高速度可达 5Mbps/S,甚至更高。CAN 传输速度和总线距离有关,总线距离越短,传输速度越快。

CAN 总线通信模型

        CAN 总线传输协议参考了 OSI 开放系统互连模型,也就是前面所介绍的 OSI 七层模型(具体详情参考网络基础知识(1)——从OSI七层模型和TCP/IP说起)。虽然 CAN 传输协议参考了 OSI 七层模型,但是实际上 CAN 协议只定义了“传输层”、“数据链路层”以及“物理层”这三层,而应用层协议可以由 CAN 用户定义成适合特别工业领域的任何方案。 已在工业控制和制造业领域得到广泛应用的标准是 DeviceNet,这是为 PLC 和智能传感器设计的。在汽车工业,许多制造商都有他们自己的应用层协议标准。

【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

         CAN 协议只参考了 OSI 模型中的“传输层”、“数据链路层”以及“物理层”,因此出现了各种不同的应用层协议,比如用在自动化技术的现场总线标准 DeviceNet,用于工业控制的 CanOpen,用于乘用车的诊断协议 OBD、UDS(统一诊断服务,ISO14229),用于商用车的 CAN 总线协议 SAEJ1939。

        数据链路层分为 MAC 子层和 LLC 子层,MAC 子层是 CAN 协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在 CAN 控制器的硬件中执行。

        在物理层定义了信号实际的发送方式、位时序、位的编码方式及同步的步骤。但具体地说,信号电平、通信速度、采样点、驱动器和总线的电气特性、连接器的形态等均未定义。这些必须由用户根据系统需求自行确定。

CAN 帧的种类

        CAN 通信协议定义了 5 种类型的报文帧,分别是:数据帧、遥控帧、错误帧、过载帧、间隔帧。通信是通过这 5 种类型的帧进行的。其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有 11 位标识符 (ID),扩展格式有 29 个标识符(ID)。这 5 种类型的帧如下表所示:

用途
数据帧 用于发送单元向接收单元传送数据的帧。
遥控帧 用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧 用于当检测出错误时向其它单元通知错误的帧。
过载帧 用于接收单元通知其尚未做好接收准备的帧。
间隔帧 用于接收单元通知其尚未做好接收准备的帧。

        其中数据帧是使用最多的帧类型,这里重点介绍一下数据帧,数据帧结构如下图所示:

【Linux CAN应用编程(1)】初识CAN总线(附全文代码)

         上图给出了数据帧标准格式和扩展格式两种帧结构,图中 D 表示显性电平 0、R 表示隐性电平 1, D/R 表示显性或隐性,也就是 0 或 1,我们来简单分析一下数据帧的这 7 个段。

        数据帧由 7 个段构成:

        (1)、帧起始

        表示数据帧开始的段。

        (2)、仲裁段

        表示该帧优先级的段。

        (3)、控制段

        表示数据的字节数及保留位的段。

        (4)、数据段

        数据的内容,可发送 0~8 个字节的数据。

        (5)、CRC 段

        检查帧的传输错误的段。

        (6)、ACK 段

        表示确认正常接收的段。

        (7)、帧结束

        表示数据帧结束的段。

        本文只是粗浅地介绍了CAN总线的一些基础知识,如果还有需要,大家可以参考大牛的书籍,比如瑞萨电子编写的《CAN 入门教程》等等优秀的资料。

        下篇来向大家介绍 CAN 的应用编程。文章来源地址https://www.toymoban.com/news/detail-464002.html

到了这里,关于【Linux CAN应用编程(1)】初识CAN总线(附全文代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文搞懂CAN和CAN FD总线协议

    1、CAN是什么 控制器 局域网总线(CAN,Controller Area Netw or k)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输 信号 ,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的 通信 ,以此取代昂贵而笨重的配电线束。 该协议的健壮性使

    2024年02月10日
    浏览(42)
  • CAN总线通讯协议学习

    s目录 CAN(controller Area Network) 控制器局域网 CAN通讯 CAN总线的数据帧 解析         CAN总线应用最多的是汽车领域,这里的控制器在汽车领域的专业术语是ECU.(electronic control unit)电子控制单元。可以看成一个超小型的计算机,内部集成了供电系统,单片机,驱动系统,是汽车领

    2024年02月05日
    浏览(34)
  • CAN总线基础梳理

    目录 一、概述 1.1 发展 1.2 规范 1.3 特性 1.4 节点构成 1.5 CAN总线结构 1.6 CAN收发器 二、数据链路层 2.1 CAN的特点 2.2 错误 2.2.1 错误类型 2.2.2 错误计数值 2.2.3 错误状态机 2.2.4 错误处理机制 2.2.5 Bus Off问题 2.3 通信机制 2.3.1 概念 2.3.2 数据帧 2.3.3 遥控帧 2.3.4 错误帧 2.3.5 过载帧 2

    2024年02月08日
    浏览(37)
  • CAN总线详细介绍

    介绍CAN总线的特点,协议的组成结构 CAN,全称为“Controller Area Network”,即控制器局域网,是一种串行异步数据通信协议。 CAN 最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的

    2024年02月16日
    浏览(37)
  • CAN总线

    目录 1. 总体概述  1.1 基本概念 1.2 通讯方式  1.3 为什么使用CAN? 1.4 CAN的协议及组成 2. 上帝视角看CAN的通讯过程 2.1 数据传输原理实现 2.3 通信的整个过程 2.2.1 空闲状态 2.2.2 开始数据传输 2.2.3 仲裁机制 2.2.4 位时序 2.2.5 一次数据传输的例子 3. CAN总线报文格式 数据帧 帧起始

    2024年02月15日
    浏览(36)
  • 什么是CAN总线?

    CAN (Controller Area Network,控制器局域网)是一种用于数据通信的串行总线通信协议。它最初由德国的BOSCH公司开发,用于汽车电子控制单元(ECU)之间的通信。CAN协议在其他领域也被广泛应用,例如船舶、火车、航空、机械和医疗设备等。 CAN协议是一种高速、可靠的通信协议

    2023年04月26日
    浏览(28)
  • can总线之busoff

    简介:本文分析can总线中busoff概念。 看下图: 上图有几个概念: REC TEC :当can消息发生错误时,此错误计数器将+8; 争对上图举一个例子形象说明:比如一个刚工作的年轻小伙子,由于工作经验匮乏,工作中比较容易犯错,每当犯错就主动上报错误,但是领导不是很有时间去

    2024年02月12日
    浏览(36)
  • 轻松学习CAN总线系列---3.CAN数据遵循的格式

    数据帧(Data frame) 为传输用户数据,ISO 11898-1定义了数据帧。数据帧可以传输的最大有效负载为八个字节,即数据场。除了数据场,数据帧还包括执行CAN通信协议所需的许多其他场,包括报文ID、数据长度代码(DLC)、校验场(循环冗余校验序列 - CRC序列)以及应答场(ACK)

    2024年02月11日
    浏览(35)
  • 汽车CAN总线硬件电路原理

    根据ISO 11898的定义,物理层被细分成3 个子层,它们分别是物理信令(位编码定时和同步)、物理媒体连接(驱动器和接收器特性)和媒体相关接口(总线连接器)。 物理信令子层和数据链路层之间的连接是通过集成的协议控制器实现的,而媒体相关接口(CAN收发器)是协议

    2024年02月06日
    浏览(40)
  • CAN FD总线详细介绍

    前面的文章介绍了CAN协议、本文介绍一下CAN FD,对比一下这两者的区别。希望看完后,能对你有所帮助。 CAN 协议介绍的文章:CAN总线详细介绍 CAN FD ,全称为 CAN with Flexible Data rate 。继承了CAN的主要特性,弥补了CAN的数据长度和带宽的限制。可简单认为CAN FD就是CAN的升级版。

    2024年02月08日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包