月牙博客

月牙博客

月牙博客

Copyright Your WebSite.Some Rights Reserved.

Powered By Z-BlogPHP,Theme By 天兴工作室

当前位置:网站首页 > 工作日常 正文

CAN总线学习笔记(1)- CAN基础知识

月牙发布于3年前 (2023-09-18) 383 浏览 0 评论

本专辑是依照瑞萨公司《CAN 入门书》的组织思路来学习 CAN 通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记。希望对初学者有所帮助。

本专辑是依照瑞萨公司《CAN 入门书》的组织思路来学习 CAN 通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记。希望对初学者有所帮助。

01 CAN 的一些基本概念

1.1 什么是 CAN 总线

CAN 是 Controller Area Network 的缩写,是 ISO 国际标准化的串行通信协议。通俗来讲,CAN 总线就是一种传输数据的线,用于在不同的 ECU 之间传输数据。

CAN 总线有两个 ISO 国际标准:ISO11898 和 ISO11519。其中:

ISO11898 定义了通信速率为 125 kbps~1 Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达 1Mbps,总线长度 ≤ 40 米。

ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为 40kbps 时,总线长度可达 1000 米。

Tips: <总线的传输速率>:又称为总线的通信速率,指的是位速率。或称为比特率(和波特率不是一回事),表示的是:单位时间内,通信线路上传输的二进制位的数量,其基本单位是 bps 或者 b/s (bit per second)。

1.2 CAN 的拓扑结构

下图中,左边是高速 CAN 总线的拓扑结构,右边是低速 CAN 总线的拓扑结构。

如图中所示,CAN 总线包括 CAN_H 和 CAN_L 两根线。节点通过 CAN 控制器和 CAN 收发器连接到 CAN 总线上。

Tips :通常来讲,ECU 内部集成了 CAN 控制器和 CAN 收发器,但是也有没集成的,需要自己外加。

1.3 CAN 信号表示

在 CAN 总线上,利用 CAN_H 和 CAN_L 两根线上的电位差来表示 CAN 信号。CAN 总线上的电位差分为显性电平和隐性电平。其中显性电平为逻辑 0,隐性电平为逻辑 1。

ISO11898 标准(125kbps ~ 1Mbps)和 ISO11519 标准(10kbps ~ 125kbps)中 CAN 信号的表示分别如下所示:

1.4 CAN 信号传输

发送过程:

CAN 控制器将 CPU 传来的信号转换为逻辑电平(即逻辑 0 - 显性电平或者逻辑 1 - 隐性电平)。CAN 发射器接收逻辑电平之后,再将其转换为差分电平输出到 CAN 总线上。

接收过程:

CAN 接收器将 CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到 CAN 控制器,CAN 控制器再把该逻辑电平转化为相应的信号发送到 CPU 上。

概括的讲:
  • 发送方通过使总线电平发生变化,将其信息传递到 CAN 总线上。
  • 接收方通过监听总线电平,将总线上的消息读入自己的接收器。

02 CAN 通信的特点

2.1 多主工作方式

所谓多主工作方式,指的是:总线上的所有节点没有主从之分,大家都处于平等的地位。反应在数据传输上,即是:在总线空闲状态,任意节点都可以向总线上发送消息。

Tips: <总线空闲状态>:当总线上的上出现连续的 11 位隐性电平,那么总线就处于空闲状态。也就是说对于任意一个节点而言,只要它监听到总线上连续出现了 11 位隐性电平,那么该节点就会认为总线当前处于空闲状态,它就会立即向总线上发送自己的报文。

至于为什么连续出现 11 位隐性电平,就可以判定 + 总线处于空闲状态,这个问题可以结合 CAN 协议的帧结构来进行理解。

在多主工作方式下:

  • 最先向总线发送消息的节点获得总线的发送权;
  • 当多个节点同时向总线发送消息时,所发送消息的优先权高的那个节点获得总线的发送权。

例如:Node_A 和 Node_B 同时向总线发送各自的消息 Msg_1 和 Msg_2,如果 Msg_1 的优先级比 Msg_2 高,那么 Node_A 就获得了总线的发送权。

2.2 非破坏性位仲裁机制

在 CAN 协议中,所有的消息都以固定的帧格式发送。当多个节点同时向总线发送消息时,对各个消息的标识符(即 ID 号)进行逐位仲裁,如果某个节点发送的消息仲裁获胜,那么这个节点将获取总线的发送权,仲裁失败的节点则立即停止发送并转变为监听(接收)状态。

例如:Node_A 和 Node_B 同时向总线发送各自的消息 Msg_1 和 Msg_2,那么对 Msg_1 的 ID 号 ID_1 和 Msg_2 的 ID 号 ID_2 进行逐位仲裁,如果仲裁结果是:ID_1 的优先级比 ID_2 高,那么 Msg_1 在仲裁中获胜,于是发出 Msg_1 这条报文的节点 Node_A 就获得了总线的发送权。同时,Msg_2 在仲裁中失败,于是 Node_B 就转换到监听总线电平的状态。

这种仲裁机制既不会造成已发送数据的延迟,也不会破坏已经发送的数据,所以称为非破坏性仲裁机制。这种仲裁方式的实现机制参见本系列笔记的第二篇 CAN 协议数据帧与遥控帧中的介绍。

2.3 系统的柔性

CAN 总线上的节点没有 “地址” 的概念,因此在总线上增加节点时,不会对总线上已有节点的软硬件及应用层造成影响。

2.4 通信速度

在同一条 CAN 线上,所有节点的通信速度(位速率)必须相同,如果两条不同通信速度总线上的节点想要实现信息交互,必须通过网关。

例如:汽车上一般有两条 CAN 总线:500kbps 的驱动系统 CAN 总线和 125kbps 的舒适系统 CAN 总线,如果驱动系统 CAN 总线上的发动机节点要把自己的转速信息发送给舒适系统 CAN 总线上的转速表节点,那么这两条总线必须通过网关相连。

2.5 数据传输方式

CAN 总线可以实现一对一,一对多以及广播的数据传输方式,这依赖于验收滤波技术。验收滤波技术的实现机制参见本专辑的第二篇 CAN 协议帧结构中的介绍。

2.6 远程数据请求

某个节点 Node_A 可以通过发送 “遥控帧” 到总线上的方式,请求某个节点 Node_B 来发送由该遥控帧所指定的报文。具体实现方式参见本专辑的第二篇文章 CAN 协议的帧结构中的介绍。

2.7 错误检测、错误通知、错误恢复功能

  • 所有的节点都可以检测出错误(错误检测功能);
  • 检测出错误的节点会立即通知总线上其它所有的节点(错误通知功能);
  • 正在发送消息的节点,如果检测到错误,会立即停止当前的发送,并在同时不断地重复发送此消息,直到该消息发送成功为止(错误恢复功能)。

2.8 故障封闭

节点能够判断错误的类型,判断是暂时性的数据错误(如噪声干扰)还是持续性的数据错误(如节点内部故障),如果判断是严重的持续性错误,那么节点就会切断自己与总线的联系,从而避免影响总线上其他节点的正常工作。

CAN 通信的上述特点都是基于 CAN 协议所定义的多种帧结构来实现的,因此,在对 CAN 的帧结构(下一篇笔记)详细了解之后,再做进一步的详细解释。

03 CAN 通信网络结构

3.1 OSI 基本参照模型

实际上,CAN 总线网络底层只采用了 OSI 基本参照模型中的数据链路层、传输层。而在 CAN 网络高层仅采用了 OSI 基本参照模型的应用层

3.2 CAN 协议网络层次

在 CAN 协议中,ISO 标准只对数据链路层和物理层做了规定。对于数据链路层和物理层的一部分,ISO11898 和 ISO11519-2 的规定是相同,但是在物理层的 PMD 子层和 MDI 子层是不同的。

在 CAN 总线,每一层网络中定义的事项如下:

版权声明:本文为 CSDN 博主「weixin_40528417」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

推荐阅读:

本文暂时没有评论,来添加一个吧(●'◡'●)

取消回复欢迎 发表评论: