0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CAN报文为什么会发送失败?

ZLG致远电子 2024-04-12 08:25 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

在了解CAN报文为什么会发送失败之前我们先看看一帧标准的CAN报文到底应该是怎么样的。表1是一帧正常标准数据帧的报文组成。
表1 标准数据帧报文格式组成24143244-f863-11ee-9118-92fbcf53809c.png

24197de4-f863-11ee-9118-92fbcf53809c.jpg

图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)。

241d1c2e-f863-11ee-9118-92fbcf53809c.png

图2 正常ACK段报文

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

  • 总线上只有一个有效节点:发送报文的节点在发送出一帧报文后会检测总线上应答间隙的状态,如果检测到应答间隙为隐性位,则表示该帧报文没有得到ACK,发送失败,需要重发,而由于发送错误计数器会在发送失败后累加,直到该节点关闭。所以,当总线上只有一个有效节点时,这个节点是发不出去数据的,因为它所发出的数据帧中的ACK Slot没有另外一个节点来填充,将永远是隐性位,这个节点会一直重发数据直到发送成功或发送被取消。
  • 波特率不匹配或者节点没有初始化,导致没有ACK;
  • 总线线缆短路,断路,接反;
  • 高速CAN总线上接的节点不是高速CAN,而是容错低速CAN,导致不匹配。

24205d76-f863-11ee-9118-92fbcf53809c.jpg

图3 应答界定符错误帧242459c6-f863-11ee-9118-92fbcf53809c.png

图4 没有ACK的报文

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

243449d0-f863-11ee-9118-92fbcf53809c.jpg

图5 CANScope测试项目

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN总线
    +关注

    关注

    145

    文章

    2020

    浏览量

    134662
  • 数据帧
    +关注

    关注

    0

    文章

    49

    浏览量

    7073
  • can报文
    +关注

    关注

    0

    文章

    4

    浏览量

    2418
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AT32F系列 CAN通讯模式使用

    ;MCU发送出来的数据以及会实时体现在上图PCAN-tool的Receive窗内;除了PCAN-tool工具的监控外,MCU端还通过LED2的翻转来指示收到帧ID为0x400的报文,通过 LED4的翻转来指示MCU有在周期性的发送报文
    发表于 10-20 16:29

    如何同时指定can硬件滤波器的只接收id为0 和id为3的报文呢?

    如何同时指定can硬件滤波器的 只接收id为0 和id为3的报文呢 我目前只会用 RT_CAN_FILTER_STD_INIT(3, RT_NULL, RT_NULL)去指定id为3的报文
    发表于 09-28 07:46

    CAN发送只能使用中断或者DMA,为什么?

    今天看了CAN发送的底层配置发现,rtt的CAN设备发送好像只能选择DMA或者中断的方式进行发送,这种设定是为什么呢? rt_device
    发表于 09-25 07:19

    移植CANfestival,发现can无法接收数据,为什么?

    通过can的上位机来发送报文,发现如下的情况 无论发送任何数据,发现rt_device_read返回值是0,查了一下函数返回值发现读取失败 然后我在下面一行打印接收到的数据 发现接
    发表于 09-11 07:46

    【中科昊芯Core_DSC280025C开发板试用体验】+4. CAN外设调试(含源码)

    报文 调试与验证 我使用周立功的CAN盒进行数据数据收发通讯: 可以看到发报文发送时正常的,间隔时间也是200Ms 接线来打入断点,通过上位机发送
    发表于 08-05 20:46

    车载 CAN-Bus 数据记录仪

    “黑盒子 ”,会记录所有的CAN 数据,以便于事后进行故障分析。 SG-CAN-200R 是一款便携的 2 通道 CAN 总线记录仪,可脱离 PC 单独工作,内置存储卡, 可以长时间记录 CA
    的头像 发表于 07-15 14:13 510次阅读
    车载 <b class='flag-5'>CAN</b>-Bus 数据记录仪

    如何解决CAN通讯故障?原因分析与解决方法全攻略

    在日常工作中,我们经常收到客户的反馈,他们表示CAN卡无法正常通讯,这给工作带来了诸多不便。今天,就让我们深入探讨一下导致CAN卡通讯失败的常见原因,以及相应的解决方法。单个CAN设备
    的头像 发表于 06-16 11:39 1498次阅读
    如何解决<b class='flag-5'>CAN</b>通讯故障?原因分析与解决方法全攻略

    ATS失效请求报文问题的故障排除步骤

    本篇文章提供了解决 ATS 失效请求报文问题的故障排除步骤,主要聚焦在 CQ 接口上未显示主机发送报文的情况。
    的头像 发表于 06-09 15:17 1175次阅读
    ATS失效请求<b class='flag-5'>报文</b>问题的故障排除步骤

    使用S32G3板进行CAN消息测试遇到的问题求解

    我正在使用 S32G3板进行 CAN 消息测试。 配置完成后,我可以使用 cansend 命令发送 CAN 消息。 我想从 PC 接收 CAN 消息。 BSP是否收到了
    发表于 04-10 07:06

    CAN报文流程解析

    CAN报文流程解析,直流充电桩上的CAN通讯解析过程
    发表于 03-24 14:03 10次下载

    使用CAN以及CANIF配置了S32K310的CAN驱动模块,如何进行报文的接收呢?

    我使用CAN以及CANIF配置了S32K310的CAN驱动模块。我知道调用CAN_Write()函数进行报文发送,但我存有以下的一些问题:
    发表于 03-21 07:24

    STM32G473 CAN发送数据出现丢帧怎么解决?

    配置CAN以FIFO模式发送,单片机周期发送不同ID的CAN报文,同时使用软件ZCANPRO周期发送
    发表于 03-11 08:30

    CAN loopback模式测试

    ); HAL_NVIC_EnableIRQ(CAN_RX0_IRQn);。 发送和接收测试 发送报文:创建一个 CAN 报文结构体,填写标准
    发表于 01-18 16:29

    rk3588 canfd发送部分数据失败的问题

    在使用rk3588的板子进行canfd通信时,有些数据发送必然失败: 1,cansend can0 200##065.68.00.00.96.00.00.01 必然成功 2,cansend c
    发表于 12-18 10:53

    百问MQTT协议分析 - 报文分析①

    16.3 报文分析 16.3.1 CONNECT-连接服务端 ​客户端到服务端的网络连接建立(完成三次握手)后,客户端发送给服务端的第一个报文必须是 CONNECT 报文。 ​在一个
    发表于 12-13 09:41