CAN为什么会发送失败
来源:互联网 发布:英国海淘鞋子 知乎 编辑:程序博客网 时间:2024/04/25 20:12
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
- CAN为什么会发送失败
- 项目为什么会失败
- 为什么会失败
- 创业为什么会失败?
- 为什么shelve会失败?
- 优秀公司为什么会失败
- 为什么创业公司会失败?
- 网游创业为什么会失败?
- 国家为什么会失败-读书笔记
- 你创业为什么会失败?
- 网游创业为什么会失败?
- 为什么敏捷实践会遭遇失败?
- 我们为什么会失败(转)
- 项目感想: 为什么巴比伦塔会失败?
- 为什么有时读取XML文件会失败
- Android平板电脑为什么会失败
- C++为什么new(malloc)操作会失败
- 为什么大多数创业公司会失败?
- 苹果欲以 15 亿美元收购超跑制造商迈凯伦
- 三星Galaxy Note7爆炸,苹果成最大赢家
- 聚焦4G、双沃突破——vivo与中国联通聚焦139城市专项工作启动
- python应用系列教程——python使用smtp上传邮件,使用pop3下载邮件
- iOS瘦身之路(上)
- CAN为什么会发送失败
- Uicc card
- cenos7.0 LNMP搭建
- 苹果赚了多少,iPhone 7的硬件成本不到售价的40%
- 苹果发布 OS X 继任者 macOS Sierra,到底更新了什么?
- 坚果投影仪亮相广州办公行业年会 获创新之星大奖
- 土豪公司一口气买下24000台HoloLens,微软黑科技成为效率工具了?
- 福建省和腾讯达成战略合作 全面拥抱互联网+ | 2016 TGPC
- 排序查询