CAN为什么会发送失败

2023-05-16

CAN总线调试过程中出现报文发送失败,很多工程师都对此只知其一不知其二,这里就CAN报文发送失败的问题我们来做一次探讨。


在了解CAN报文为什么会发送失败之前我们先看看一条正确的CAN报文到底应该是怎么样的,表1是一个正常标准数据帧的报文组成。

表 1 标准数据帧报文格式组成

图 1 标准数据帧格式

CAN总线是一种基于广播的通讯方式,为了保证总线上的每一个正常节点都能正确的接收到报文,报文的发送者要求每一个接收节点在报文发送结束前要作出应答,这也是报文里ACK存在的原因。


一帧CAN报文中ACK段长度为2个位,包含应答间隙(ACK Slot)和应答界定符(ACK Delimter)。在应答场里,发送站发送两个隐性位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK Slot)期间(发送ACK信号)向发送器发送一“显性”的位以示应答。


应答间隙:所有接收到匹配CRC序列(CRC SEQUENCE)的站会在应答间隙(ACK Slot)期间用一显性的位写入发送器的隐性位来作出回答。


应答界定符:ACK界定符是ACK场的第二个位,并且是一个必须为隐性的位。因此,应答间隙(ACK Slot)被两个隐性的位所包围,也就是CRC界定符(CRC Delimter)和ACK界定符(ACK Delimter)。

图 2 正常ACK段报文

而如果总线上没有ACK应答(即应答间隙为隐性),发送器就会发送一个错误标志,并且发送错误计数器值加8,节点就会对报文进行自动重发,若自动重发依然收不到ACK,则在发送错误计数器计数满128后(即出现16帧错误帧),由错误主动转为错误被动状态,如图3所示。

那导致ACK段出错的原因有哪些呢?

· 总线上只有一个有效节点:发送报文的节点在发送出一帧报文后会检测总线上应答间隙的状态,如果检测到应答间隙为隐性位,则表示该帧报文没有得到ACK,发送失败,需要重发,而由于发送错误计数器会在发送失败后累加,直到该节点关闭。所以,当总线上只有一个有效节点时,这个节点是发不出去数据的,因为它所发出的数据帧中的ACK Slot没有另外一个节点来填充,将永远是隐性位,这个节点会一直重发数据直到发送成功或发送被取消。


· 波特率不匹配或者节点没有初始化,导致没有ACK;

· 总线线缆短路,断路,接反;

· 高速CAN总线上接的节点不是高速CAN,而是容错低速CAN,导致不匹配。

图 3 应答界定符错误帧

图 4 没有ACK的报文

当你在调试CAN总线时出现节点发送报文失败的情况时,一定要检查是不是以上几点疏漏导致你的总线上ACK异常。而借助恰当的仪器,可以在查找CAN总线错误时事半功倍。图4即采用致远电子的CANScope来对错误帧进行标记,同时找到错误帧对应的波形来查找出错误情况。CANScope还可以对CAN总线物理层、数据链路层、应用层做一系列的测试,为CAN工程师解决测试难题。


图 5 CANScope测试项目


转载自:http://www.eeworld.com.cn/qrs/article_2017072036072.html

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

CAN为什么会发送失败 的相关文章

  • 自动驾驶之——CAN总线简介

    自动驾驶技术之 无人驾驶中的CAN总线 CAN 是Controller AreaNetwork 的缩写 xff0c 中文名为控制器局域网络 xff0c 是ISO国际标准化的串行通信协议 xff0c 是一种用于实时应用的串行通讯协议总线 xf
  • can't run '/etc/init.d/rcS': No such file or directory 最终解决方法

    drivers rtc hctosys c unable to open rtc device rtc0 end request I O error dev mtdblock2 sector 256 isofs fill super bre
  • CAN通信详解

    本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯 xff0c 并将结果显示在TFTLCD模块上 本章分为如下几个部分 xff1a 30 1 CAN简介 30 2 硬件设计 30 3 软件设计 30 4
  • G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake

    目录 CMakeLists设置FindG2O cmake文件内容FindEigen3 cmake 文件内容 CMakeLists设置 在CMakeLists里加入如下这句话 xff0c 并在项目文件夹中新建cmake文件夹 LIST APP
  • Linux下CAN总线速率设置,socketCAN。

    背景 xff1a 飞思卡尔Freescale的ARM9处理器i MX25系列 socketCAN对于在Linux下操作CAN总线非常的快捷方便 xff0c 其配置方法和在Linux下对网卡的配置相似 xff0c 方法如下 xff1a 1 i
  • 【车载开发系列】CAN总线帧种类介绍篇

    车载开发系列 CAN总线帧种类介绍篇 CAN总线帧种类介绍篇 车载开发系列 CAN总线帧种类介绍篇一 CAN总线当中帧的种类二 五种类型帧用途说明三 数据帧的组成1 xff09 帧起始2 xff09 仲裁段3 xff09 控制段4 xff0
  • CAN总线协议:标准CAN和扩展CAN

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

    xff11 xff0e 源码安装canopen 从官网下载canopen至Ubuntu xff0c 下载地址 xff1a https github com ros industrial ros canopen tree kinetic de
  • c#通过串口及CAN模块实现上位及下位机通讯

    目录 前言 一 串口 CAN总线 二 使用步骤 1 RS232串口通讯 xff08 指令下发与接收 xff09 2 CAN总线通讯 总结 前言 学习及工作中我们经常会遇到上位机与下位机通讯等工作 xff0c 结合场景使用不同的通讯方式实时通
  • 大疆M3508、M2006必备CAN总线知识与配置方法

    大疆M3508 M2006必备CAN总线知识与配置方法 文章目录 大疆M3508 M2006必备CAN总线知识与配置方法前言 xff1a 0x00 需要 额外的 CAN收发器 xff01 xff01 xff01 0x01 硬件层面分析为什么
  • IMX6ULL与STM32F103的CAN通信实现

    IMX6ULL与STM32F103的CAN通信实现 硬件连接驱动层实现IMX6ULLSTM32F103ZET6 应用层实现IMX6ULLSTM32F103ZET6 结果 在上一篇博文中 xff0c 我们利用USBCAN设备及其上位机软件 x
  • linux-can编程(一)

    建立can的socket int can create socket char name int fd struct sockaddr can addr struct ifreq ifr socklen t len 61 sizeof ad
  • CAN 与 CANFD数据报文格式解读

    ISO 11898 1 2015 协议详细定义了CAN网络报文的格式 xff0c 包含了传统CAN与CANFD帧格式 CAN网络的帧类型共有4种 xff0c 分别为数据帧 远程帧 错误帧 过载帧 本章将主要介绍CAN网络数据帧报文的格式 x
  • 一文读懂CAN总线及通信协议

    CAN总线的汽车 CAN概念 CAN是控制器域网 Controller Area Network CAN 的简称 是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的 并最终成为国际标准 ISO11898 是ISO国际标准化的串行通信
  • CAN资料整理(三):CAN的位时间、同步、位定时

    目录 一 位时间 二 同步 1 硬同步 2 重新同步 三 位定时 1 传播段延迟时间的确定 2 位定时参数确定 由于CAN属于异步通讯 没有时钟信号线 连接在同一个总线网络中的各个节点会像串口异步通讯那样 节点间会使用约定好的波特率进行通讯
  • 各种通信接口的简单对比

    对比表 同步方式与异步方式的主要区别在于 是否传输时钟信号 只要是通訊前雙方需要設定相同波特率的 都是異步傳輸方式 异步传输 Asynchronous Transmission 每次异步传输的信息都以一个起始位开头 它通知接收方数据已经到达
  • CAN 帧ID 与J1939 PGN 转换例子

    在saeJ1939中文版中找的三张图如下 例如 0x18 FE DF 00 110 0 0 11111110 11011111 00000000 P R DP PF PS SA 具体参数即为数据段 0 64 优先级为 P 110 2 或6
  • CAN/CANFD 总线负载率及计算(源码和工具)

    CAN BUS的总线负载率是CAN总线架构协议设计时的一个重要的指标 一般建议负载率峰值不要高于80 平均负载率不要超过50 当然这只是一般建议 具体根据使用场景和系统设计而定 负载率定义 关于CAN负载率的定义和计算 很多文章写得不求甚解
  • CAN总线的报文分析(三)

    系列文章目录 文章目录 系列文章目录 前言 一 数据帧 最常用 1 帧起始 2 仲裁段 3 控制段 4 数据段 5 CRC段 6 ACK段 7 帧结束 二 远程帧 三 错误帧 四 过载帧 五 帧间隔 总结 前言 CAN总线上的节点发送数据都
  • 功放诊断测试

    1 切换trace显示时间模式 Toggle time mode 2 测seedkey 需要加载seednkey dll 3 功能寻址和物理寻址切换

随机推荐

  • Git-命令行-使用 Tag 标记你的代码

    前言 正文开始之前 xff0c 我想我们需要弄明白几个问题 xff1a tag 是什么 xff1f 使用tag 的好处 xff1f tag 和 branch 的区别以及使用场景 xff1f tag 是什么 xff1f tag 翻译过来是标签
  • 光流Zoom In and Out开发记录

    简介 2018年7月 xff0c 合作伙伴提出了一个想法 使用光流算法估计相机前后移动 经典的光流算法 xff08 Lukas Kanade算法 xff09 适用于相机左右和上下移动 xff0c 但是在相机前后移动时 xff0c 虽然各个像
  • 关于电子设计大赛无人机题的学习笔记(2)飞控代码分析和高精度IMU传感器的使用

    飞控代码分析和高精度IMU传感器的使用 最近着急备赛很多文档只是处于零零散散状态没办法细节的整理出来专门放一份 xff0c 等比赛结束会统一整理 xff0c 现在只能先放一些研发过程中的技术文档上来了 目前我们的调试进度是 xff0c 稳定
  • 关于电子设计大赛无人机题的学习笔记(3)常用设备总线的使用方法(IIC)

    关于电子设计大赛无人机题的学习笔记 3 常用设备设备总线的使用方法 IIC xff09 1 吐槽及日志 首先 电赛因为疫情原因推迟了 xff0c emmm在我看来跟取消了差不了太多 xff0c 这一波小系列的学习记录暂时只能在第三篇就停止更
  • undefined reference to `pthread_create‘问题的解决 cmake新方法解决

    最近在写相机SDK xff0c 测试中出现了一个小问题undefined reference to 96 pthread create 39 其实是缺少库文件 网上大部分介绍使用 lpthread xff0c 但是这个是老版本了 xff0c
  • POST请求返回:401 Unauthorized

    Postman 做接口测试 xff0c 提交请求后 xff0c 模拟获取数据 xff0c 输入入参正确时 xff0c 却返回status 401 Unauthorized 原因 xff1a 是我的token有误 xff0c token是一串
  • Django从header请求头中的Authorization获取token验证数据

    前言 之前使用django开发api接口时 xff0c 约定是要每次请求都要带token这个参数 xff0c 这样很不方便 xff0c 最近学了vue xff0c 也使用了axios xff0c 发现在axios拦截器中可以设置每次请求头中
  • char类型的数字转int

    char的本质 xff1a char The char data type is a single 16 bit Unicode character It has a minimum value of 39 u0000 39 or 0 an
  • Android串口通信

    编前记 今天在刷博客 郭老师 的时候评论区看见有人在聊单片机的串口通信 xff0c 刚好之前做过一个项目通过NFC读取IC门禁卡片的项目所以拿出来分享 复习 一下 xff0c 先讲了解一下什么是串口通信 xff1a 串口通信 xff08 S
  • Studio One 5机架设置一键切换效果通道

    Studio One是当前主流的直播机架软件 xff0c 操作非常方便 xff0c 但是呢默认情况下 xff0c 要切换效果时 xff0c 只能手动关闭一个效果的后 xff0c 再开另一个效果 xff0c 切换效果有点不方便 现在孤狼分享S
  • VScode设置C/C++编译环境详解

    一 xff1a 下载安装C C 43 43 编译器 在windows下有很多集成的编译器 xff0c 我们只是需要使用gcc exe 编译而已 xff0c 所以我们可以随便下 xff0c 这里推荐使用 xff1a MinGW xff1a x
  • 2021校招_大华

    大华面试 xff1a 一面和二面 一面 xff1a 首先自我介绍 1 序列化的使用方式以及情景 2 Springboot的启动过程 3 Mysq中lB 43 树和B树索引区别 xff0c 聚簇索引和非聚簇索引区别 4 Spring中bean
  • 2021校招_海康威视

    2021届海康威视面试 一面 xff1a 1 https与http协议的区别 2 Spring的启动过程 3 Springboot相比较Spring的优点 4 Linux修改文件权限命令 5 项目中所用到的技术 6 Restful风格 7
  • 2021校招_满帮(运满满)

    一面 xff08 电话面 xff09 xff1a 25min 1 询问HashMap相关结构以及原理 2 红黑树的基本结构 xff0c 以及什么时候会LL xff08 左转 xff09 3 Spring如何解决循环依赖的 4 Redis缓存
  • 2021校招_思科

    思科给我发的太晚了 xff0c 十一月份才给我消息 思科一面凉凉 主要是针对你的简历 问到我的主要内容包括 xff1a 数据库设计 xff0c 是否使用到设计模式 xff0c 以及遇到问题如何解决 包括ngnix xff0c redis h
  • 音视频开发之音频基础知识

    音视频开发之音频基础知识 转自https blog jianchihu net av develop audio basis html 什么是声音 介质振动在听觉系统中产生的反应 是一种波 因为是一种波 xff0c 所以我们可以用频率 振幅
  • 机器学习中神经网络,支持向量机以及贝叶斯分类器总结

    第五章神经网络 5 1神经元模型 神经网络中最基本的成分是神经元模型 xff0c 即 简单单元 在 M P神经元模型 中 xff0c 神经元接受收到来自n个其他神经元传递过来的输入信号 xff0c 这些输入信号经过带权重的连接进行传递 xf
  • 机器学习中的降维与度量学习(reduce dimension and metric learning)

    降维与度量学习 k近邻学习 k近邻 k Nearest Neighbor 简称kNN 学习是一种监督学习方法 其工作机制为 xff1a 在样本中 xff0c 根据距离度量找出训练集中临近的k个样本 xff0c 基于这k个样本进行预测 一般
  • Warning: Invalid argument “/map“ passed to canTransform argument target_frame in tf2 frame_ids···

    Warning Invalid argument map passed to canTransform argument target frame in tf2 frame ids cannot start with a like at l
  • CAN为什么会发送失败

    CAN总线调试过程中出现报文发送失败 xff0c 很多工程师都对此只知其一不知其二 xff0c 这里就CAN报文发送失败的问题我们来做一次探讨 在了解CAN报文为什么会发送失败之前我们先看看一条正确的CAN报文到底应该是怎么样的 xff0c