125 kbit / s的最大CAN总线帧(消息)速率是多少?


18

我的CAN总线以125 kbit / s的速度运行,并且仅使用扩展帧格式。我想知道我可以发送的CAN帧的最大速率是多少。假设数据长度始终为八个字节。

根据此Wikipedia页面,每个帧的最大帧长度为(1+11+1+1+18+1+2+4+64+15+1+1+1+7) = 128位:

在此处输入图片说明

考虑到最少三位帧间间隔,125 kbit / s以下的最大包速率应为: 125000 / ( 128 + 3) = 954每秒帧数。

但是在我的测试中,我无法做到那么高。我可以达到的最大帧速率(使用所有八个字节的数据)约为每秒850帧。

这是什么问题-我的计算或测试方法?


用示波器观察它,看看您实际上得到了什么。发送完新帧后,您的硬件可能尚未准备好发送新帧。另外,您是否考虑了ACK时间?您未标记的位数无助于告诉我们您到底在计算什么。
Olin Lathrop 2014年

实际上,由于需要ACK时间和帧间间隔,因此很难通过CAN总线在任何延长的时间内获得100%的总线利用率。您的CAN控制器可能无法在任何延长的时间内支持100%的总线利用率。
Tristan Seifert 2014年

2
根据发送的确切数据,位填充可以使帧大小最多增加10%。
WhatRoughBeast

1
@xiaobai-不,数据字段的长度会更改。至于链接,您已经提供了。阅读整个页面。如果您的测试发送的是全零或全零,那会解释很多。
WhatRoughBeast

1
如果您不考虑ACK,ACK可能会影响传输时间。同样,您未加标签的数字总和并不能告诉我们您真正加起来的东西,因此也可能会告诉我们什么。
Olin Lathrop 2014年

Answers:


18

根据Olin Lathrop的建议,我将详细介绍位填充。

CAN使用NRZ编码,因此对长时间的1或0感到不满意(它无法跟踪时钟沿应在的位置)。它通过位填充解决了这个潜在的问题。发送时,如果遇到5个连续的1或零,则插入另一个极性的位;接收时,如果遇到5个连续的1或0,则忽略后续位(除非该位与前一个相同)。位,则发出错误标志)。

如果要为测试数据发送全零或全零,则一串64个相同的位将导致插入12个填充位。这将使总帧长增加到140位,最佳情况下的帧速率为874帧/秒。如果数据位与CRC的MSB相同,则将在该位置获得另一个填充位,并且帧速率降至868帧/秒。如果CRC长期运行1或0,则将进一步降低帧速率。同样的考虑也适用于您的标识符。

总共16个填充位将产生850.3帧/秒的理想帧速率,因此您应该考虑一下。一种快速的测试是使用带有交替位的测试数据,并查看帧速率发生了什么。


3
是的,在我最初的测试中,有效负载和ID确实有很多零。确定数据或ID中没有5个连续的零之后,现在我可以得到940帧/秒,非常接近计算的极限。非常感谢您的出色回答。
Penghe Geng 2014年

1

奥林(Olin)正确地描述了位填充及其对理论CAN吞吐量的不利影响。延迟可能会使理论上的实际吞吐量进一步下降。即使您的CAN控制器能够实现100%的总线利用率,主机处理器也可能无法以该速率处理Tx和/或Rx。这可能是处理器速度慢和/或实现CAN堆栈的固件效率低下的结果。


1

您可以构建的最小2.0a(标准)帧为47位...您可以构建的最小2.0b(扩展)帧为67位...这包括3位的帧间间隔,并且不包括位填充... 理论上我们可以建立一个永远不会塞满的框架;实际上,会发生很多填充现象!

CANBus 2.0a / b的最大波特率为1Mbit。
在1Mb​​ / S时,单个(显性/隐性)位的长度为1uS,即。0.000'001 S
因此,在传输另一个(67位)帧之前,一个67位帧(最小的理论 2.0b帧)将花费67uS的传输时间。
1'000'000 / 67给出14,925个完整帧(下一帧的+ 25位)

当您以该速度的1/8运行时,您最多可以获得1/8的数据包
14'925 / 8 = 1'865帧/秒@ 125Kb

到您使用所有64位(8字节)数据并进行设置时,您尚未通过具有连续的1或0的字符串
1'000'000 /(67 + 64)= 7'633
7'来触发位填充“错误” 633/8 = 954

这也假设您的接线是完美的。您的can总线是否由120ohm UTP电缆制成并且两端电容性去耦?还是两端带有120欧姆电阻的随机导线?

总体而言,我会说您做得很好,可以达到理论最大吞吐量的90%。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.