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测试项目
关键字:CAN
引用地址:
CAN为什么会发送失败
推荐阅读最新更新时间:2024-05-03 01:21
STVD+COSMIC编译工程时can't open file crtsi0.sm8
用STVD+COSMIC编译工程时出现以下错误(加载的别人的工程): #error clnk Debugdemo.lkf:47 can't openfile crtsi0.sm8 #error clnk Debugdemo.lkf:60 can't openfile libis0.sm8 #error clnk Debugdemo.lkf:61 can't openfile libm0.sm8 解决方法: 打开STVD软件,选择Tools- Options - Directories - Show Directories for选择:Libraryfiles 将D:program filesCOSMIC
[单片机]
采棉机智能监控系统CAN应用层协议设计
引言
随着我国大型农业机械装备现代化进程的不断推进,农业机械作业信息滞后、时效性差,机收的组织者和参与者对信息快捷、准确、详细的要求难以满足等问题日益突显,同时目前大型农业机械本身缺少有效的工作状态关键信息采集与故障诊断报警手段,致使无法及时掌握其工作状态与寿命状况,降低了农业机械工作效率和作业质量,影响了农业机械装备的发展。
CAN(controller area network)总线凭其可靠的数据通信和良好的错误检测能力,在控制和检测领域备受重视,被广泛应用在环境温度恶劣、电磁辐射强和振动大的工业环境。CAN为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
目前,C
[嵌入式]
找到CAN总线(故障)节点的三种办法
CAN总线的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持,在带来便利的同时,也为工程师们故障排查增加了难度,所以本文主要给大家介绍了找到CAN总线(故障)节点的三种办法。 1、 将所有节点都拔掉,依次往上接。 当CAN总线出现故障后将所有节点都拔掉,之后一个一个节点往上接,接到系统出错时,即找到最后一个插入节点为故障节点。如下这种情况,图1为新能源车控制总线,车辆启动后仪表显示滞后,显示错误。导致司机判断延迟与错误,影响交通安全。将所有节点拔掉之后,采用此方法挨个节点往上接,直到电机控制器接到总线上出现了通信故障,初步判断为电动机运行产生的强干扰,串扰到CAN总线上,导致帧错误增加,重发频繁,正
[嵌入式]
Canalys:2020年Q1全球智能手表出货1430万,苹果居首位
市调机构Canalys的最新报告显示,尽管2020年第一季度新冠肺炎肆虐,但全球智能手表出货量同比增长12%,达1430万块。 图源:Canalys 从厂商排名上看,苹果以36.3%的市场份额居首,出货520万块;排名第二的是华为,出货210万块,市占为14.9%;三星则以出货110万块的成绩排名第三,市场份额为12.4%。 对于苹果的表现,Canalys表示,尽管苹果的出货量同比下降了13%,但其智能手表平台仍是世界上最大的平台,并且正在稳定增长。WatchOS在本季度获得了400万新的活跃用户,使安装的总人数估计达到7,000万。在接下来的三个月中,Apple Watch的累计出货量将达到1亿部。 图源:Canalys
[手机便携]
CAN总线信号传输的位定时与位同步理论
CAN协议与其它现场总线协议的区别中有一个是:它使用同步数据传输而不是异步传输(面向字符)。这意味着传输性能得到更有效的发挥,但是另一方面,这需要更加复杂的位同步方法。
在面向字符的协议中的位同步实现起来很简单,在接受每个字符的起始位时进行同步。但在同步传输协议中,只有一帧的开始才有一个起始位。这通常不足以使接收器的位采样和发送器保持同步。为了使接收器在帧结束时也能正确采样到接收的位流,就需要接收器不断进行重新同步。重新同步表示在位流中每个有效的信号边沿都可对接收信号的时钟周期进行检测。在信号边沿间的最大时间周期内,发送和接受振荡器之间最大可能的时间差必须在一个位间隔内的标称采样点之前和之后通过足够的空闲时间(“相位缓冲段”
[嵌入式]
汽车CAN-FD总线通信应用研究
传统的车载CAN总线最高支持500 kbit/s的传输速率,每帧只能承载8 bytes的数据,由于传输速率和数据长度的限制,在自动驾驶和智能网联对网络通信的高要求背景下,使用传统 CAN 通信势必会导致总线负载率过高从而导致网络拥堵,传统CAN总线通信的瓶颈逐渐凸显。 2011年,为满足带宽和可靠性的需求,Bosch首次发布了 CAN-FD(CAN With Flexible Data-Rate)方案,CAN-FD继承了传统CAN总线的主要特性,使用改动较小的物理层,双线串行通信协议,依然基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制,在此基础上对带宽和数据长度进行优化,将逐步取代传统CAN成为下一代主流汽车总
[嵌入式]
CAN总线数据采集系统
引 言 在工业控制中,为了保证系统的可靠运行,需要检测周围的环境变量(如温度、气压、湿度等)。通常的做法是将分布在各处的传感器采集到的信号通过各自的线路连接到监控中心,这种方式在有效地完成检测任务的同时也造成了线路资源的极大浪费。因此,提出了简化线路布局的要求。CAN(控制器局域网)是串行通信协议,能有效支持高安全等级的分布实时控制,同时在理论上,CAN总线网络内的节点近乎没有限制。基于此,本设计将一种基于数字信号控制器的CAN总线数据采集系统作为一个CAN节点,每一个需要监控的区域放置一个CAN节点,各个节点通过CAN总线与监控中心实施通信。系统总体框图如图1所示。
1 硬件构成 该数据采集系统由两部分构
[嵌入式]
STM32单片机的can总线的配置
STM32的can总线的配置如下: CAN_InitStructure.CAN_TTCM=DISABLE;//禁止时间触发通信模式 CAN_InitStructure.CAN_ABOM=DISABLE; CAN_InitStructure.CAN_AWUM=DISABLE; CAN_InitStructure.CAN_NART=DISABLE;//CAN报文只被发送1次,不管发送的结果如何(成功、出错或仲裁丢失) CAN_InitStructure.CAN_RFLM=DISABLE; CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_
[单片机]