ssyniuej 发表于 2009-10-4 14:53:52

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

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

yyccaa 发表于 2009-10-4 16:53:30

这个问题不应该在物理层方面讨论,你只要按照bosch的要求,使得设计的通信负载不要超过50%就行了(这是为了给尖峰负载留下余量)。

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

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

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

hyl175 发表于 2009-10-4 17:10:02

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

coody 发表于 2009-10-4 17:11:38

正在发送帧时不会被中断,但是开始发送时会

ssyniuej 发表于 2009-10-5 17:01:36

谢谢楼上各位。这个主要是我考虑一种情况,因为我总线上有几个设备是各自独立工作的。总线负荷并不高,但由于相互都相当用广播方式向总线上发送自己的状态。我是希望能够让各个设备能够一次将自己的多个字节的数据包发送完成。现在这样就有可能在发送的中间会被ID优先级高的设备中断。那看样我只能在上层开缓冲区了,呵呵。这样就需要为各个设备都开缓冲了。例如共有四个设备,每一个都会利用到其他三个设备的数据,原来我是想只使用一个缓冲区,现在看就要为每个设备准备一个缓冲,根据过滤出来的ID填充相应的缓冲了。
页: [1]
查看完整版本: 请问高手CAN数据帧能否连续发送而不被优先级高的帧中断?