首页 > 其他分享 >CAN基础知识笔记

CAN基础知识笔记

时间:2024-01-23 11:15:38浏览次数:30  
标签:总线 笔记 ID 发送 CRC 基础知识 数据 节点

CAN总线协议(Controller Area Network),控制器局域网总线,是德国BOSCH(博世)公司研发的一种串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。

CAN通讯是异步通讯,没有时钟信号线来保持信号接收同步,是半双工通信,无法同时发送与接收,在同一时刻,只能有一个节点发送数据,其余节点都只能接收数据。它有CAN_HIGH与CAN_LOW两条信号线组成。

闭环总线网络

ISO11898标准,闭环、短距离、高速、最高速度可达1Mbps,最长距离40m。

开环总线网络

ISO11519-2标准,开环、传输距离远、最高速度125Kbps,最远距离1km。

CAN总线信号----差分信号

CAN总线上信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号。

显性电平比隐形电平优先级要高(逻辑0比逻辑1优先级高)

ISO11898(高速)CAN的差分信号            

 不同标准的CAN信号差

CAN协议的波特率与位同步

由于CAN通讯协议并没有时钟信号线,所以各个节点之间要约定好特定的波特率进行通讯,特别的时候我们还需要使用位同步。

位时序:

位时序就是一个数据位的时序,位时序的大小=1/波特率

位时序分解图

波特率的计算:

CAN协议帧

CAN有5中协议帧类型,分别是数据帧、遥控帧、错误帧、过载帧、间隔帧。

数据帧

发送单元想接收单元传输数据的帧

遥控帧

接收单元向具有相同ID的发送单元 请求数据的帧

错误帧

当检测到错误时,向其他单元通知错误的帧

过载帧

通知其他发送端元:本节点没没做好接受准备

间隔帧

将数据帧及遥控帧与前面的帧分开

 

数据帧分为标准帧和扩展帧,下图是数据帧的类型及结构:

帧起始:有单个显性位组成,总线空闲时,发送节点发送起始帧,其他接收节点同步于该帧起始位。

帧结束:由7个连续的隐性位组成。

仲裁段:

  CAN-bus没有规定节点的优先级,但通过仲裁段 ID规定了数据帧的优先级。根据CAN2.0标准版本不同,帧ID分为11位和29位两种。标准ID为11位,扩展ID为29位。

  标准ID的仲裁段由 11位ID + 1位RTR组成。RTR是远程帧发送标识位,RTR为显性表示此帧为数据帧,为隐性表示此帧为远程帧。

  扩展ID的冲裁段由 11位ID + 1位SRR + 1位IDE + 18位ID + 1位RTR 组成。SRR是远程帧请求位。IDE是标识符扩展位,IDE为显性表示该帧为标准数据帧,为隐性表示该帧为扩展数据帧。

  仲裁方式:

    假设节点A、B、C都发送都发送了标准数据帧,他们竞争总线的过程如下图所示:

 仲裁机制

    从该过程得出结论:帧ID值越小,优先级越高

控制段:

  控制段共6位。

  标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成。

  扩展帧控制段则由保留位r1、r0和DLC组成。保留位用隐性电平填充。

数据段:

  一个数据帧传输的数据量为0-8个字节。传输时MSB先传输。

CRC段:

  由CRC校验值+1位CRC界定符组成。CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。一般情况下,CRC校验由CAN控制器的硬件完成,不需要由mcu的软件代码实现。

ACK段:

  由ACK值+1位ACK界定符组成。当一个 接收节点 接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平。(所以数据帧里的ACK 是接收节点的)

 

标签:总线,笔记,ID,发送,CRC,基础知识,数据,节点
From: https://www.cnblogs.com/Kim-blog/p/17981712

相关文章

  • [SQLAlchemy] sqlAlchemy学习笔记(2): 在orm中使用select
    SELECT的作用select在sql中的作用是选中特定列并以表的形式返回,是必要的关键字;在sqlalchemy中,select()方法会返回一个Select对象,并根据这个对象引入其他方法,如where(),join(),order_by()等等fromsqlalchemyimportselectstmt=select(User).where(User.name==......
  • Kruskal 重构树学习笔记
    1.定义与构造对于一张无向图,新建\(n\)个树,原图每个点在一个树中,权值是\(0\)。按边权从小到大枚举边,如果这条边两个节点不在一棵树,合并两个节点所在的树。新建一个点,点权为加入边的边权,同时将两棵树的根节点分别设为新建点的左儿子和右儿子,将新建点设为根。实现与Kruskal最......
  • Docker 学习笔记 - 5
    DockerFile解析是什么Dockerfile是用来构建Docker镜像的构建文件,由一系列命令和参数构成的脚本构建三步骤编写Dockerfile文件dockerbuilddockerrun文件什么样???熟悉的Centos为例http://hub.docker.com/_/centosDockerFile构建过程解析Dockerfile内容基础知识1、每条......
  • C++学习笔记
    C++学习笔记(1)预编译、编译、链接预编译(Preprocessing)cppreference中:GPT这么说:C++预编译是指在编译阶段之前对代码进行的一系列预处理操作。预编译的目的是为了将代码中的预处理指令和宏展开,以及进行一些其他的预处理操作。预处理指令包括以井号(#)开头的指令,如#include、#......
  • Inplementation of Binary Search Tree【1月22日学习笔记】
    点击查看代码//InplementationofBinarySearchTree#include<iostream>usingnamespacestd;structbstnode{ intdata; bstnode*left; bstnode*right;};/*bstnode*root=NULL;*//*root=NULL;wrong*//*全局范围内的变量的初始化必须在声......
  • 学习笔记438—《赤兔之死》高考满分文章
    建安二十六年,公元221年,关羽走麦城,兵败遭擒,拒降,为孙权所害。其坐骑赤兔马为孙权赐予马忠。一日,马忠上表:赤兔马绝食数日,不久将亡。孙权大惊,急访江东名士伯喜。此人乃伯乐之后,人言其精通马语。马忠引伯喜回府,至槽间,但见赤兔马伏于地,哀嘶不止。众人不解,惟伯喜知之。伯喜遣散诸人,抚其......
  • 数据库学习笔记(四)—— MySQL 之 事务篇
    MySQL之事务篇事务事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。事务的四大特性(ACID):A原子性:原子性是指包含事务的操作要么全部执行......
  • 数据库学习笔记(三)—— MySQL 之 SELECT(查询)篇
    查询单表查询select分组函数,分组后的字段from表名[where条件][groupby分组的字段][having分组后的筛选][orderby排序列表];排序SELECT字段名FROM表名ORDERBY字段名[ASC|DESC];ASC表示升序,DESC表示降序,而ORDERBY默认值为ASC。多字段排......
  • openGauss学习笔记-204 openGauss 数据库运维-常见故障定位案例-重建索引失败
    openGauss学习笔记-204openGauss数据库运维-常见故障定位案例-重建索引失败204.1重建索引失败204.1.1问题现象当Desc表的索引出现损坏时,无法进行一系列操作,可能的报错信息如下。index\"%s\"containscorruptedpageatblock%u",RelationGetRelationName(rel),BufferG......
  • 0122今日笔记
    一java环境搭建jdk长期支持版本jdk8111721可以到oracle官网下载自己需要的jdk版本下载后安装到D盘(建议不要在c盘)在电脑系统中找到系统设置找到系统环境在系统变量中创建JAVAHOME路径就是直接的dk路径然后在pa然后一直点击确定就行测试是否成功按win+R+cmd进......