【通信总线】CAN 总线简介及应用

2023-05-16

CAN总线简介及应用

  • 一、CAN总线简介
  • 二、CAN总线报文格式
    • 2.1 数据帧区分
    • 2.2 标准帧-11位
    • 2.3 扩展帧-29位
  • 三、CAN测试工具
  • 四、CAN总线报文处理
  • 五、CAN应用

一、CAN总线简介

简单来说,CAN最早是由德国Bosch公司推出,为解决现代汽车中众多控制单元、测试仪器之间的实时数据交换而开发的一种串行通信协议。随着CAN总线的大规模推广,目前被广泛应用于工业自动化、船舶、医疗设备、工业设备等行业领域。
差分信号
CAN总线物理层主要包括总线电压和物理介质及接口的规定,在ISO11898-2、ISO11898-3、J1939-11中均有相应的描述。其中CAN总线电压采用差分信号,具有“隐性”“显性”两种逻辑状态,显性覆盖隐性,差分电压表示𝑽_𝒅𝒊𝒇𝒇=𝑽_(𝑪𝑨𝑵_𝑯)-𝑽_(𝑪𝑨𝑵_𝑳)。隐性状态下,CAN_H和CAN_L电压固定在中值电压大小,差分电压(高速CAN)基本为(2.5V/2.5V),其数字信号用“1”表示。显性状态下,由大于最小门限值的差分电压(高速CAN)表示(3.5V/1.5V),一般为2V,其数字信号用“0”表示。

物理介质和接口主要为拓扑结构、CAN线选取、电路设计。
CAN总线系统的拓扑图一般采用总线型拓扑结构,总线与支线的长度根据实际情况选取。
通信线缆主要选择特征阻抗为120欧姆的双绞线。
电路设计

二、CAN总线报文格式

CAN报文帧格式有数据帧、远程帧、帧间空间、错误帧、超载帧,其中,错误帧、过载帧和帧间隔都是由硬件实现的,无法用软件控制,下面我们主要看一下常用的数据帧与远程帧。

2.1 数据帧区分

CAN
根据报文ID长度的不同,数据帧主要分为标准帧(11位ID)和扩展帧(29位ID),ID主要是确定报文的仲裁优先级,ID的数值越小,优先级越高。
SOF:帧起始位,显性位表示,标识一个数据帧的开始,用于同步。
ID:表明报文的含义,可以包括报文的源地址和目标地址。
RTR:用于区分数据帧和远程帧,数据帧RTR=0,远程帧=1。
IDE:用于区分标准帧和扩展帧,标准帧IDE=0,扩展帧IDE=1.
SRR:该位无实际意义,SRR永远置1,在扩展帧中表明在该位代替了标准帧中的RTR。
r0、r1:保留位,置0.
DLC:表明数据场中包含数据的字节数,DLC=0~8.
Data Field:数据场,包含CAN数据帧发送的内容。
CRC:用于CRC校验。
DEL:CRC界定符,固定1个隐性位,CRC界定符前进行位填充。
ACK:确定报文被至少一个节点正确接收。
DEL:固定格式,1个隐性位
EOF:表示数据帧结束,固定格式,7个连续的隐性位。
ITM:固定格式,3个连续的隐性位
DEL+EOF+ITM:11个连续的隐性位,节点检测到11个连续隐性位后,认为总线进入空闲阶段,此时节点可以发送报文。

2.2 标准帧-11位

标准帧
在标准帧ID中,前3位为报文优先级,后8位SA为源地址

2.3 扩展帧-29位

扩展帧
在扩展帧ID中,P为优先级,R为保留位,DP是数据页,PF是PDU格式,PS是特定PDU,SA是源地址,R、DP、PF、PS共同组成PGN。
P:优先级可以从最高0设置到最低7,所有控制/命令类报文的默认优先级为3,其他报文如信息、专用、请求和相应的默认优先级是6.
DP:当前报文的数据页,一般只使用00或01,10保留将来使用。
PF:用于区分PDU格式,PDU1格式的取值范围为0-239,PDU2格式的取值范围为240-255.
PS:若PF为PDU1格式,则PS表示目标地址,若PF为PDU2格式,则PS值表示群扩展。PDU1格式表示为点对点通讯,PDU2格式表示为全局广播,若PS=255,表示网络上的所有设备均可接收该条报文。
SA:表示报文发送设备对应的地址,即源地址。
PGN:参数群编号,若车辆协议满足J1939标准,则可通过PGN查找相应的报文数据场定义。

三、CAN测试工具

从使用的Windows下的CAN测试工具来看,用的最多的还是CAN Test,CAN Test是周立功can卡的官方测试调试工具,也是SBCAN-I/II 智能CAN接口卡配套驱动程序,能够用来接收、发送、查看、分析和记录CAN报文,可实现CAN数据的收发,监测CAN总线上的数据。如需使用请自行下载。

1、CAN Test一般常用USBCAN1或USBCAN2(根据通道选择)
CAN Test2、进入CAN Test操作界面,常用功能包括滤波设置,隐藏/显示发送帧,DBC文件加载以及选择接收时间标识。
界面

四、CAN总线报文处理

CAN编码
CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式。
当一个信号的数据长度不超过1个字节(8位)并且信号在一个字节内实现(即,该信号没有跨字节实现)时,Intel格式与Motorola格式基本没有区别,信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位。
当一个信号的数据长度超过1个字节(8位)或者数据长度不超过一个字节但是采用跨字节方式实现时,Intel格式将该信号的高位(S_msb)将被放在高字节(MSB)的高位,信号的低位(S_lsb)将被放在低字节(LSB)的低位。例:信号长度为两字节,Byte0为低位,Byte1为高位。
Motorola格式该信号的高位(S_msb)将被放在低字节(MSB)的高位,信号的低位(S_lsb)将被放在高字节(LSB)的低位。例:信号长度为两字节,Byte0为高位,Byte1为低位。

五、CAN应用

目前常用的CAN总线主要有周期型CAN消息及事件型CAN消息。周期型主要是按照厂家规定的发送周期及数据内容以一定的周期发送相应的CAN报文;事件型通常为一发一收模式,由控制主机发送相应的CAN报文查询指令(远程帧或特定数据帧),从机自动回复相应的查询内容。

在开发过程中,对于一些常用的参数,建议由节点厂家发送周期型CAN消息,对于一些诊断类型或其他不常用的消息,建议采用事件型消息,当然在实际使用中可灵活多变,总之,最终目的是将你所需要的CAN消息获取到,不管用什么方法,这才是重中之重。

黎明就在眼前

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【通信总线】CAN 总线简介及应用 的相关文章

  • 四、数据转换、ros-CAN通讯

    1 CAN通讯 1 1驱动安装 1 1 1在我的gitee上下载test功能包 xff0c 将libusbcan so文件复制到 lib 其他位置 计算机 lib 目录下 1 2参考 我另一篇博客一 2 1 3 下载功能包 1 3 1 在我
  • 通信接口五种主要的类型是什么?RS-232、485、CAN、USB

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0
  • 学习CANopen --- [9] CAN总线的状态检查

    本文讲述如何判断CAN总线是否存在以及是否bus off xff0c 以vcan0进行讲解 xff0c vcan0是虚拟的CAN接口 xff0c 可以把它看做一个软件CAN适配器 xff08 区别于硬件CAN适配器 xff0c 如PeakC
  • 关于STM32 CAN 滤波器设置的记录

    滤波模式有以下两种 xff1a 屏蔽位模式 标识符列表模式 过滤器的位宽 xff1a 16位过滤器 32位过滤器 下面记录一下我做过测试的代码 代码说明 xff1a 这是CAN2的滤波器 xff0c stm32f107的两组CAN滤波器是共
  • CAN总线的标准帧和扩展帧

    CAN总线的标准帧和扩展帧主要决定帧ID的长度 xff0c 标准帧的帧ID长度是11位 xff0c 帧ID的范围是000 7FF 扩展帧的帧ID长度是29位 xff0c 帧ID的范围是0000 0000 1FFF FFFF CANopen帧
  • Python 使用can模块(记录稿)

    直接安装 xff1a pip install python can 如果报这个错 更新一下pip pip3 install upgrade pip 或者是 pip install upgrade pip 再安装wrapt pip insta
  • CAN通信详解

    本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯 xff0c 并将结果显示在TFTLCD模块上 本章分为如下几个部分 xff1a 30 1 CAN简介 30 2 硬件设计 30 3 软件设计 30 4
  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • CAN总线协议:标准CAN和扩展CAN

    CAN通讯协议是一个载波侦听 基于报文优先级碰撞检测和仲裁 xff08 CSMA CD 43 AMP xff09 的多路访问协议 CSMA的意思是总线上的每一个节点在企图发送报文前 xff0c 必须要监听总线 xff0c 当总线处于空闲时
  • 【总线】一文看懂RS232和RS485通信总线

    目录 RS232概述 RS232特性 RS485 概述 RS485 特性 RS232 和 RS485 的区别 区别总结 RS232概述 RS 232接口符合电子工业联盟 xff08 EIA xff09 建立的串行数据通信接口标准 原始编号是
  • CAN总线多帧即连续帧数据发送 拆包与重装

    1939协议支持多帧数据发送即数据超过8个的帧发送 用户可以通过ID来识别当前帧是否为多帧发送 xff08 连续帧 xff09 xff0c 如果是多帧发送ID xff0c 举例 xff1a 1C EC F4 56 其中 F4和56为目标地址
  • c#通过串口及CAN模块实现上位及下位机通讯

    目录 前言 一 串口 CAN总线 二 使用步骤 1 RS232串口通讯 xff08 指令下发与接收 xff09 2 CAN总线通讯 总结 前言 学习及工作中我们经常会遇到上位机与下位机通讯等工作 xff0c 结合场景使用不同的通讯方式实时通
  • Linux Socket CAN——驱动开发(转)

    Linux Socket CAN驱动开发 一 CAN总线协议 CAN是Controller Area Network 控制器局域网 的缩写 CAN通信协议在1986年由德国电气商博世公司所开发 xff0c 主要面向汽车的通信系统 现已是IS
  • Rt-thread的CAN应用2

    1 rtt中使能CAN1 2 CubeMX生成部分代码 xff0c 完成下面操作然后生成MDK ARM项目文件 3 将CubeMX生成的 HAL CAN MspInit 函数 粘贴到drv can c中 并在rt hw can init 函
  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工
  • 一文读懂CAN总线及通信协议

    CAN总线的汽车 CAN概念 CAN是控制器域网 Controller Area Network CAN 的简称 是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的 并最终成为国际标准 ISO11898 是ISO国际标准化的串行通信
  • 【汽车电子】浅谈汽车四大总线:LIN、CAN、FlexRay、MOST

    目录 1 前言 2 汽车四大总线 2 1 LIN总线 2 1 1 LIN总线概述 2 1 2 LIN总线工作原理 2 2 CAN总线 2 2 1 CAN总线概述 2 2 2 CAN总线工作原理 2 2 3 CAN总线的优点 2 3 Flex
  • 电池充放电自动测试系统介绍

    电池是国民经济的基础产品 广泛运用在交通运输 通讯 电力 铁路 国防 计算机 应急设备等各个领域 传统电池检测生产方式已经很难满足电池产品的市场需求 那么如何高效快速的进行电池产品的性能检测呢 今天就给大家介绍一款全能型电池测试系统 电池充
  • STM32学习心得三十二:CAN通信基础知识、原理、配置及实验

    记录一下 方便以后翻阅 主要内容 1 CAN通信基础知识 2 STM32 CAN控制器简介 3 相关实验代码解读 参考资料 STM32中文参考手册 V10 第22章 控制器局域网 bxCAN 实验功能 CAN实验需要两个开发板 系统启动后

随机推荐

  • const和#define的区别,详细!

    区别 xff1a xff08 1 xff09 就起作用的阶段而言 xff1a define是在编译的预处理阶段 起作用 xff0c 而const是在 编译 运行 的时候起作用 xff08 2 xff09 就起作用的方式而言 xff1a de
  • ubuntu16.04使用USB转TTL(ch340)串口转usb调试过程

    输入命令 xff1a lsmod grep usbserial 输入 xff1a lsusb 发现了ch341的一些相关信息 输入命令 xff08 查看USB转串口接入状态 xff09 xff1a dmesg usb 6 1 ch341 u
  • LinuxCNC学习-Machinekit手册介绍

    原文链接 http www machinekit io docs common user intro 1 Machinekit用户手册 1 1 关于手册 本手册的重点是如何 使用 Machinekit 安装并配置了Machinekit后 x
  • LinuxCNC学习-HAL库介绍

    原文链接 xff1a http www machinekit io docs hal intro 1 HAL库介绍 HAL代表硬件抽象层 在最高级别上 xff0c 它只是一种允许加载和互连多个 构建块 以组装复杂系统的方式 硬件 部分是因为
  • double float 类型在内存中的存储形式

    一 基础知识 浮点数分为 单精度和双精度 xff0c 在内存中都分为三部分 xff1b 符号位 xff1b 指数位 xff1b 尾数位 xff1b Float类型内存形式 xff1a 图1 float类型在内存中的形式 double类型内存
  • php array_walk break跳出循环的方法

    场景分析解决 场景 array walk使用的地方不要太多 xff0c 在某种情况眷下需要它跳出循环 分析 break 不是array walk的关键字return 不能达到break的效果 相当于foreach的 continue 歪个楼
  • gazebo黑屏打不开world的解决方法

    打开gazebo的时候会发现一直处于黑屏这种状态 xff0c 这是因为model库加载不正确导致的 cd gazebo mkdir p models cd gazebo models wget http file ncnynl com ro
  • JAVA Http的Post请求传参添加Authorization Basic Auth验证

    PostMan添加Authorization验证 pom xml添加依赖包 lt dependency gt lt groupId gt org apache commons lt groupId gt lt artifactId gt c
  • 一个字符串吧大写字母转换为小写字母

    709 转换成小写字母 难度简单140收藏分享切换为英文接收动态反馈 实现函数 ToLowerCase xff0c 该函数接收一个字符串参数 str xff0c 并将该字符串中的大写字母转换成小写字母 xff0c 之后返回新的字符串 示例
  • TX2/Linux下can总线的接收与发送命令和C程序实例

    本文博客深度参考了前辈的作品 xff1a TX2 Linux下can总线的接收与发送详解 xff01 https blog csdn net hhlenergystory article details 81976069 Linux CAN
  • ubuntu18.04 安装Qt交叉编译环境目标机为rk3288

    本文在虚拟机条件下安装成功 xff0c 采用Ubuntu18 04 64位镜像作为编译环境 需要准备材料 交叉编译器 xff1a 目标机器为64位的使用 gcc linaro 6 3 1 2017 05 x86 64 aarch64 lin
  • 使用matlab实现指定三维区域随机生成N个不相交球的函数

    自从写了这篇博客之后 xff0c 更多的人来问我这个问题了 简单写一个随机在一个三维区域生成球的matlab函数 风一样的航哥的博客 CSDN博客 comsol随机生成球体 上次简单写的功能 xff0c 可以实现一些比较稀疏的分布 xff0
  • 在嵌入式里面实现printf()类似的功能

    学习C语言大多数都是从printf 34 hello world 34 开始的 xff0c 对于printf的熟悉程度最高 xff0c 在嵌入式编程中 xff0c 实现printf函数有一种很标准的办法就是实现putch xff0c 绑定对
  • 我的第一个rust程序,感受一下

    周末了 xff0c 要学习一点让自己开心的东西 听说rust语言很年轻 xff0c 性能超过了C 43 43 xff0c 还能支持嵌入式编程 xff0c 作为一名未来要出名的代码工程师 xff0c 岂能错过 xff1f 于是上周开始学习这个
  • 走进他人内心的七项修炼

    本文是一篇读书笔记 xff0c 书名叫 我就是你啊 之所以看这本书 xff0c 是因为在结婚之后 xff0c 发现很多时候会吵架 xff0c 会发现自己情绪不好 xff0c 然后无能为力去解决 让我们来回顾一下 xff0c 化解一场纷争需要
  • 使用优先队列解决自己构造的数据类型

    在C 43 43 中优先队列有两种 xff0c 最大堆和最小堆 当数据类型为int的时候 xff0c 大家都会使用 xff0c 但是如果数据不是单一的 xff0c 比如数据是一个hashmap怎么办 xff1f 例子如下 xff1a You
  • curl header设置Authorization

    文章目录 场景解决 场景 接口设置了tymondesigns jwt auth 认证 xff0c 所以需要在请求的头部放置authorization 信息 解决 参考curl 官网 code class prism language php
  • python subprocess.Popen read阻塞问题解决

    python subprocess Popen read阻塞问题解决 背景 使用subprocess Popen打开一个子进程 xff0c 指定子进程的标准输入 xff0c 标准输出为subprocess PIPE xff0c 使用stdo
  • stm32 串口发送一帧数据(字符串版本和结构体版本)

    使用stm32串口发送一帧数据 具体程序如下 xff0c 相关知识点请自行脑补 1 串口发送字符串 发送一个字节 myUSARTx xff1a 具体串口 ch 一个8位的字节 void Debug SendByte USART TypeDe
  • 【通信总线】CAN 总线简介及应用

    CAN总线简介及应用 一 CAN总线简介二 CAN总线报文格式2 1 数据帧区分2 2 标准帧 11位2 3 扩展帧 29位 三 CAN测试工具四 CAN总线报文处理五 CAN应用 一 CAN总线简介 简单来说 xff0c CAN最早是由德