搜索
bottom↓
回复: 4

请问高手CAN数据帧能否连续发送而不被优先级高的帧中断?

[复制链接]

出0入0汤圆

发表于 2009-10-4 14:53:52 | 显示全部楼层 |阅读模式
最近准备用用CAN通讯,看了手册。考虑到实际用处,想问点具体的问题。
  例如我有一个数据包,长度64字节,这样按数据帧来分,这一个数据包,会被分成8个数据帧发送出去,但根据协议来看,如果在发送的中间有更高优先级的数据帧就会中断一下我这8个数据帧,是不是没有办法避免这种情况?
    另外请问,是不是每个数据帧发送完成后(包括帧结束的7个隐性位),都要经过三个隐性位的间隔才会一同竞争发送下一个数据帧?

出0入0汤圆

发表于 2009-10-4 16:53:30 | 显示全部楼层
这个问题不应该在物理层方面讨论,你只要按照bosch的要求,使得设计的通信负载不要超过50%就行了(这是为了给尖峰负载留下余量)。

竞争发生时,高优先级肯定会获得优先权(这是CAN协议的基本功能,如果连这个都做不到,没人会去用CAN了,因为这直接关系到实时性)。

优先级问题是由控制器来仲裁的(除非你设计的应用层协议确保不会出现竞争),高优先级的帧是否被接收存储是取决于你编程时设置的ID过滤方式及应用层协议。在负载不大的情况下,低优先级的帧只不过是被稍微推迟了下发送。

如果你的应用的实时性要求真的需要在意低优先级帧的延迟和隐性位的间隔的时间,那么你应该选择更高速率的通信方式,而不是试图去轧干CAN的最后一滴性能。

出0入0汤圆

发表于 2009-10-4 17:10:02 | 显示全部楼层
can数据的优先级是由id来确定的  
如果某个id需要发大于8字节的数据包 你必须对它进行拆分  之后可以分为以下两种情况:
1,在你这个包数据还没有发完之前 你这个节点(id)需要发送更紧要的数据 你可以定义一种协议 要求之前的数据作废 在发送新的数据  这个你可以参考J1939
2,如果不是这个节点(id)发送 接受端完全可以根据id将数据区分出来 将接受的数据重新组合

出0入0汤圆

发表于 2009-10-4 17:11:38 | 显示全部楼层
正在发送帧时不会被中断,但是开始发送时会

出0入0汤圆

 楼主| 发表于 2009-10-5 17:01:36 | 显示全部楼层
谢谢楼上各位。这个主要是我考虑一种情况,因为我总线上有几个设备是各自独立工作的。总线负荷并不高,但由于相互都相当用广播方式向总线上发送自己的状态。我是希望能够让各个设备能够一次将自己的多个字节的数据包发送完成。现在这样就有可能在发送的中间会被ID优先级高的设备中断。那看样我只能在上层开缓冲区了,呵呵。这样就需要为各个设备都开缓冲了。例如共有四个设备,每一个都会利用到其他三个设备的数据,原来我是想只使用一个缓冲区,现在看就要为每个设备准备一个缓冲,根据过滤出来的ID填充相应的缓冲了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 07:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表