CAN总线原理简介_can总线工作原理-程序员宅基地

技术标签: CAN  

一.CAN总线简介:

  • 是一种串行通信协议,能有效的支持具有很高安全等级的分布实时控制
  • 应用范围十分广泛,从高速网络到低价位的多路接线都可以使用CAN
  • 主要运用于汽车电子航天等行业,使用CAN连接发动机的控制单元等汽车部件
  • 具有可靠,实时以及灵活的特性.

二.CAN工作原理:

  1. 以广播的形式发送报文.当CAN总线上的某个节点需要给其他节点发送消息时,会以广播的形式发送给总线上所有的节点,因为总线上的节点不适用地址来进行配置CAN系统,而是根据报文的开头的11位标识符决定是否要接受其他节点发来的报文.(面向内容的编制方案)
  2. 每个节点都有自己的处理器和CAN总线接口控制器;
  3. 当一个节点需要发送数据到另一个节点时,自身节点的处理器需要将要发送的数据和自己的标识符传给自身的总线控制接口,处于准备状态;当获取到总线的使用权后,将数据和标识符组装成报文,将报文以一定格式发出,此时其他的节点处于接收状态.至于其他节点是否接收,由其他节点决定,是都会对某些报文进行过滤.
  4. 当新增的节点仅仅是纯粹的数据接收设备时,只需要该设备直接从总线上接收数据即可.

三.总线工作的特点:

  • 特权阶级.不论计算机还是真是社会中,都有特权阶级的存在,CAN总线上的节点会被划分为不同优先级,为满足的是不同的实时要求,采用的是非破坏性位仲裁总线结构机制,当两个节点同时向网络上传送信息时,优先级低的节点会主动的停止数据发送,优先级高的就可以不受影响继续传输数据.仲裁(Arbitration) 只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符的逐位仲裁可以解决这个碰撞。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送,如果发送的是“隐性”电平而监视到的是“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态
  • 报文(Message)总线上的数据以不同报文格式发送,但长度受到限制。当总线空闲时,任何一个网络上的节点都可以发送报文
  • 信息路由(Information Routing)在CAN中,节点不使用任何关于系统配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在CAN中增加节点
  • 标识符(Identifier) 要传送的报文有特征标识符(是数据帧和远程帧的一个域),它给出的不是目标节点地址,而是这个报文本身的特征。信息以广播方式在网络上发送,所有节点都可以接收到。节点通过标识符判定是否接收这帧信息
  • 数据一致性应确保报文在CAN里同时被所有节点接收或同时不接收,这是配合错误处理和再同步功能实现的
  • 位传输速率不同的CAN系统速度不同,但在一个给定的系统里,位传输速率是唯一的,并且是固定的
  • 优先权 由发送数据的报文中的标识符决定报文占用总线的优先权。标识符越小,优先权越高
  • 远程数据请求(Remote Data Request) 通过发送远程帧,需要数据的节点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名
  • 总线状态 总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。CAN总线采用二进制不归零(NRZ)编码方式,所以总线上不是“0”,就是“1”。但是CAN协议并没有具体定义这两种状态的具体实现方式
  • 故障界定(Confinement) CAN节点能区分瞬时扰动引起的故障和永久性故障。故障节点会被关闭
  • 应答接收节点对正确接收的报文给出应答,对不一致报文进行标记
  • CAN通讯距离最大是10公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40米)
  • CAN总线上的节点数可达110个。通信介质可在双绞线,同轴电缆,光纤中选择
  • 报文是短帧结构,短的传送时间使其受干扰概率低,CAN有很好的校验机制,这些都保证了

CAN通信的可靠性:

(1)具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;
(2)采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;
(3)具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网络;
(4)可根据报文的ID决定接收或屏蔽该报文;
(5)可靠的错误处理和检错机制;
(6)发送的信息遭到破坏后,可自动重发;
(7)节点在错误严重的情况下具有自动退出总线的功能;
(8)报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。

四.总线协议层次结构: 分为3层,物理层,传输层以及对象层

  1. 物理层
    在物理层中定义实际信号的传输方法,包括位的编码和解码、位的定时和同步等内容,作用是定义不同节点之间根据电气属性如何进行位的实际传输;
    在物理连接上, CAN 总线结构提供两个引脚 --CANH 和 CANL ,总线通过 CANH 和 CANL 之间的差分电压完成信号的位传输;
    在不同系统中, CAN 总线的位速率不同;在系统中, CAN 总线的位速率是唯一的,并且是固定的,这需要对总线中的每个节点配置统一的参数。

  2. 传输层
    传输层是 CAN 总线协议的核心。传输层负责把接收到的报文提供给对象层,以及接收来自对象层的报文。传输层负责位的定时及同步、报文分帧、仲裁、应答、错误检测和标定、故障界定。

  3. 对象层
    在对象层中可以为远程数据请求以及数据传输提供服务,确定由实际要使用的传输层接收哪一个报文,并且为恢复管理和过载通知提供手段.

五.CAN总线报文结构:

  1. 数据帧:大多数情况下使用的报文结构
    从标识符长度上,又可以把数据帧分为标准帧 (11 位标识符 ) 和扩展帧 (29 位标识符 ) 。
    数据帧由 7 个不同的位场组成:帧起始、仲裁场、控制场、数据场、 CRC 场、应答场、帧结束。其中,数据场的长度为 0~8 个字节。标识符位于仲裁场中,报文接收节点通过标识符进行报文滤波
    在这里插入图片描述
    2.远程帧:用来向某一个节点请求数据
    由总线上的节点发出,用于请求其他节点发送具有同一标识符的数据帧。当某个节点需要数据时,
    可以发送远程帧请求另一节点发送相应数据帧。与数据帧相比,远程帧没有数据场,结构如图所示。
    在这里插入图片描述

3.错误帧:任何单元,一旦检测到总线错误就发出错误帧
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.过载帧:用于先行和后续的数据帧或者远程帧之间提供附加延时,保证接收端能够来得及处理前面收到的数据,包括过载标志和过载界定符.
在这里插入图片描述
在这里插入图片描述

参考链接:https://blog.csdn.net/huan447882949/article/details/80042417

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/KingOfMyHeart/article/details/101212450

智能推荐

Wormhole资产跨链项目代码解析_wormhole源码-程序员宅基地

文章浏览阅读3.8k次。1. 引言Wormhole支持基于Solana与多个链进行资产转移,开源代码为:https://github.com/certusone/wormhole/tree/main当前已上线V1,已支持:未来V2将支持:2. 关键代码解析支持的chain_id命名及支持的action类型有: ActionGuardianSetUpdate Action = 0x01 ActionContractUpgrade Action = 0x02 ActionTransfer _wormhole源码

GEE 提取长系列NDVI像元值_纯净像元提取-程序员宅基地

文章浏览阅读3.1k次。GEE 提取长系列NDVI像元值跟gee的python本地环境战斗很久,发现自己的网上的不太科学,所以只能用gee的线上Colab版本,对gee 的配置不熟悉的伙伴可以跳转大神的网站看看https://blog.csdn.net/shi_weihappy/article/details/93849370,相关介绍啥的比较详细了,向大神致敬。今天主要介绍利用GEE进行长系列NDVI像元值的提取。工作环境gee线上Colab版本即可。初始化GEE环境import ee# Trigger the au_纯净像元提取

Git安装教程_acode怎么安装gits-程序员宅基地

文章浏览阅读7.1k次。Git介绍分布式:Git版本控制系统是一个分布式的系统,是用来保存工程源代码历史状态的命令行工具。 保存点:Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目的状态;可以在该保存点将多人提交的源码合并, 也可以回退到某一个保存点上。 Git离线操作性:Git可以离线进行代码提交,因此它称得上是完全的分布式处理,Git所有的操作不需要在线进行;这意味着Git的速度要比SVN等..._acode怎么安装gits

Opencv学习——霍夫圆变换_vector<vec3f> circles; int min_dis = 120; int para-程序员宅基地

文章浏览阅读275次。HoughCircles()函数:void HoughCircles( InputArray image, OutputArray circles, int method, double dp, double minDist, double param1 = 100, ..._vector circles; int min_dis = 120; int param1 = 45

破解锐捷3.35-0618的密码_锐捷网关登录解密-程序员宅基地

文章浏览阅读1.8w次。我们上校园网时多半都让锐捷记住了密码,有可能时间久了会把密码忘掉,这样充值时就会有点麻烦。解决办法:1、凭证到网络中心去问;2、运行锐捷,先不要认证,用WinHex打开进程8021x.exe的整个内存,搜索用户名,在其后附近即可看到密码;3、打开注册表项[HKEY_LOCAL_MACHINE\SOFTWARE\锐捷网络\Ruijie Supplicant],将Password和Passwordle_锐捷网关登录解密

【go/vscode】远程环境搭建(离线版/传统插件版)_go vscode 离线安装插件-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏6次。文章目录说在前面VS Code离线安装VS Code Extensions离线安装下载Go插件插件地址插件下载(Windows)错误处理1远程主机安装测试补全跳转说在前面vscode 版本:golang 版本测试环境:wsl(ubuntu)VS Code离线安装VS Code Extensions离线安装下载Go插件插件地址网上很多教程有离线下载的地址,但是有的博文年代久远,链接未维护,所以这里使用的是vscode github地址插件gocodegopkgsgo-_go vscode 离线安装插件

随便推点

jdk1.8 filter用法_java1.8 filter-程序员宅基地

文章浏览阅读823次。List<User> list = new ArrayList<>(); list.add(new User(10,"zhangshan ")); list.add(new User(11,"zhangshan ")); list.add(new User(12,"zhangshan ")); list.add(new User(13,"zhangshan ")); List<User> .._java1.8 filter

gtk编辑-程序员宅基地

文章浏览阅读444次。收藏 636265gtk编辑本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!GTK+(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK+也有Windows版

e3mall Day04_e3mall虚拟机密码-程序员宅基地

文章浏览阅读364次。topic1:FastDFS文件系统 分布式文件系统 FastDFS Client Tracker Storage 路径:group1 (服务器)/ M00 (硬盘)/02/ff/ (两级目录) /文件名Step0:虚拟机 Step1: fastdfs客户端 jar包 安装到本地仓库或私服 !!!【注意】看看怎么建私服 或导入eclipse工程,run as installStep02_e3mall虚拟机密码

python之时间序列算法(ARMA)_python arma-程序员宅基地

文章浏览阅读2.1w次,点赞41次,收藏342次。关于时间序列的算法,我想把它们分成两类:基于统计学的方法。基于人工智能的方法。传统的统计学的方法:从最初的随机游走模型(RW)、历史均值(HA)、马尔科夫模型、时间序列模型和卡尔曼滤波模型。RW和HA依赖与理论假设,并未考虑交通流的波动性,以致预测结果与现实存在很大差异;而马尔科夫模型、时间序列模型和卡尔曼滤波模型则根据现有道路的历史交通流数据假定交通流符合某种概率分布,从而进行训练,估计出模型参数。今天我们介绍最经典的统计学算法——自回归滑动平均模型(ARMA)。1.介绍ARMA大家都知道,_python arma

Oracle中Decode()函数使用技巧_rayleigh函数-程序员宅基地

文章浏览阅读413次。导读:Oracle中Decode()函数使用技巧decode()函數使用技巧·软件环境: 1、Windows NT4.0+ORACLE 8.0.42、ORACLE安装路径为:C:/ORANT·含义解释: decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)该函数的含义如下:IF 条件=值1 THEN    RETURN(翻译值1)ELSIF 条件=值2 _rayleigh函数

Mybatis使用详解_mybatis调用语句-程序员宅基地

文章浏览阅读1.2k次。MyBatis是一种开源的Java持久化框架,它提供了一个简单而强大的方式来将Java对象与数据库之间进行映射。MyBatis在数据库访问层中起到了ORM(对象关系映射)的作用,使开发人员可以通过Java编程而不是SQL来进行数据库的操作。_mybatis调用语句

推荐文章

热门文章

相关标签