前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux应用程序开发之CAN编程

Linux应用程序开发之CAN编程

原创
作者头像
韦东山
修改2020-06-30 10:00:53
2.9K0
修改2020-06-30 10:00:53
举报
文章被收录于专栏:韦东山嵌入式韦东山嵌入式

14.1  CAN介绍

14.1.1  CAN是什么?

CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。

最初,CAN被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速箱控制器、仪表装备、电子主干系统中,均嵌入CAN控制装置。

一个由 CAN 总线构成的单一网络中,理论上可以挂接无数个节点。实际应用中,节点数目受网络硬件 的电气特性所限制。例如,当使用 Philips P82C250 作为CAN收发器时,同一网络中允许挂接110个节点。

CAN可提供高达1Mbit/s的数据传输速率,这使实时控制变得非常容易。另外,硬件的错误检定特性也增强了CAN的抗电磁干扰能力。

14.1.2 CAN的起源

CAN最初出现在 80 年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,由于消费者对于汽车功能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电子装置之间的通讯越来越复杂同时意味着需要更多的连接信号线。

提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。

1993 年,CAN已成为国际标准ISO11898(高速应用)和 ISO11519(低速应用)。 CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。

当信号传输距离达到 10Km 时,CAN 仍可提供高达 50Kbit/s 的数据传输速率。由于 CAN 总线具有很高的实时性能,因此,CAN 已经在汽车工业、航空工业、工业控制、安全防护等领 域中得到了广泛应用。

14.1.3 CAN传输模型

CAN 通讯协议主要描述设备之间的信息传递方式。CAN 层的定义与开放系统互连模型(OSI)一致。每 一层与另一设备上相同的那一层通讯。实际的通讯发生在每一设备上相邻的两层,而设备只通过模型物理层的物理介质互连。

CAN 的规范定义了模型的最下面两层:数据链路层和物理层。下表中展示了 OSI 开放 式互连模型的各层。应用层协议可以由 CAN 用户定义成适合特别工业领域的任何方案。已在工业控制和制造业领域得到广泛应用的标准是 DeviceNet,这是为 PLC 和智能传感器设计的。在汽车工业,许多制造商都应用他们自己的标准。

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

14.1.4 CAN网络拓扑

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

CAN网络的每个节点非常简单,均由一个MCU(微控制器)、一个CAN控制器和一个CAN收发器构成,然后使用双绞线连接到CAN网络中。

14.1.5 CAN物理特性

CAN总线遵循国际标准ISO11898,如ISO11898-1,ISO11898-2,ISO11898-3,ISO11898-4标准。

CAN 能够使用多种物理介质,例如双绞线、光纤等。最常用的就是双绞线。信号使用差分电压传送,两条信号线被称为“CAN_H”和“CAN_L”。静态时CAN_H和CAN_L均是 2.5V 左右,此时状态表示为逻辑“1”,也可以叫做 “隐性”。用 CAN_H 比 CAN_L 高表示逻辑“0”,称为“显形”,此时,通常电压值为:CAN_H = 3.5V 和 CAN_L = 1.5V 。

目前实际常用的CAN收发器有如下几种型号:

目前实际常用的CAN控制器有如下几种型号:

14.1.6 CAN报文帧

14.1.6.1 CAN报文格式

标准 CAN 的标志符长度是 11 位,而扩展格式 CAN 的标志符长度可达 29 位。CAN 协议的 2.0A 版本 规定 CAN 控制器必须有一个 11 位的标志符。同时,在 2.0B 版本中规定,CAN 控制器的标志符长度可以是 11 位或 29 位。遵循 CAN2.0B 协议的 CAN 控制器可以发送和接收 11 位标识符的标准格式报文或 29 位标识符的扩展格式报文。标准帧&扩展帧对比:

14.1.6.2 CAN报文帧类型

CAN报文类型又分如5种帧类型:数据帧:主要用于发送方向接收方传输数据的帧;遥控帧:主要用于接收方向具有相同ID的发送方请求数据的帧;错误帧:主要用于当检测出错误时向其他节点通知错误的帧。过载帧:主要用于接收方通知其他尚未做好接收准备的帧。间隔帧:主要用于将数据帧及遥控帧与前一帧分隔开来的帧。

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

在这里插入图片描述
在这里插入图片描述

由上图所示,数据帧包括:

(1)帧起始。表示数据帧开始的段。

(2)仲裁段。表示该帧优先级的段。

(3)控制段。表示数据的字节数及保留位的段。

(4)数据段。数据的内容,一帧可发送0~8个字节的数据。

(5)CRC段。检查帧的传输错误的段。

(6)ACK段。表示确认正常接收的段。

(7)帧结束。表示数据帧结束的段。

具体介绍可以查看”CAN2.0A”、”CAN2.0B”详细介绍。

我们主要关注我们编程所需要关注的几个段:ID:  CAN报文ID;IDE: 为0是标准帧,为1是扩展帧;RTR: 为0是数据帧,为1是远程帧;DLC: CAN报文数据长度,范围0~8字节;Data:数据,0~8个字节;

未完待续...关于CAN,还有很多内容(70多页),剩下内容:

在这里插入图片描述
在这里插入图片描述

添加微信13923404017,免费获取完整版;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 14.1  CAN介绍
  • 14.1.1  CAN是什么?
  • 14.1.2 CAN的起源
  • 14.1.3 CAN传输模型
  • 14.1.4 CAN网络拓扑
  • 14.1.5 CAN物理特性
  • 14.1.6 CAN报文帧
  • 14.1.6.1 CAN报文格式
  • 14.1.6.2 CAN报文帧类型
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档