1.1 负载概念
CAN总线的负载率, 就是指总线上所有节点在单位时间内发送的所有数据占整个总线理论带宽的比值,也就是总线实际数据传输速率与理论上能达到的数据传输速率的比值。
提示:比如在一个波特率为500Kbps的总线上,理论上每秒钟能够传输500000个BIT,而如实际上只传输了100000个BIT,那么就可以得到此刻的总线负载率为100000/500000=20%。
CAN BUS的总线负载率是CAN总线架构协议设计时的一个重要的指标。一般建议负载率峰值不要高于80%,平均负载率不要超过50%。当然这只是一般建议,具体根据使用场景和系统设计而定。
负载率的计算公式:
总线负载率=总线每秒上传输的实际bit数量/总线波特率*100%;
总线每秒上传输的实际bit数量 =[该秒内所发送的所有ID1报文的所有BIT总数A1] +…… +[An];
该秒内所发送的所有ID1报文的所有BIT总数A1 = ID1的每一个报文的BIT总数 * ID1的发送次数;
,
提示:在计算负载前,要理解波特率的概念。假设总线波特率为500kbps,理论上每秒钟能够传输500000个BIT。一般在汽车行业,CAN总线的波特率设置为500kps。
1.2 CAN总线的帧格式
对于CAN标准帧:
假设数据帧长度恒定为8个字节,可以得到每一个数据帧最大长度共计108bit,分别为:帧起始(1bit)、仲裁域(12bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、1bit分隔符、应答域(2bit)和帧结尾(7bit);
对于 CAN 标准帧计算该秒内所发送的所有报文的所有BIT总数:
例如CAN的一路TX message 是循环发送,是标准帧,循环时间是100 ms,那么他一秒内送的所有报文的所有BIT总数 = 1(sec)/100(ms)*108 = 1080(bit)
对于CAN扩展帧:
假设数据帧长度恒定为8个字节,可以得到每一个数据帧最大长度共计128bit,分别为:帧起始(1bit)、仲裁域(32bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、1bit分隔符、应答域(2bit)和帧结尾(7bit);
1.3 举例如何根据DBC计算公CAN 的负载率
首先查看关于某一路的 TX 与 RX message,下面的DBC文件的波特率为 500kps【可以通过软件davinci config查看,一般都是500kps】,并且是标准帧 CAN。
TX:
RX:
Mothod是NoMsgSendType的不用管,主要计算方式为 Cyclic 的。计算方式就是通过 1(sec)/time(ms)*108;
计算TX + RX :如上图,Tx+Rx = 29916+14904=44820 bit per second;
计算busload = (TX + RX)/500000=8.964%
CANFD 总线负载率
1.1 CANFD计算帧
对于CANFD其实是类似于CAN的,但是CAN的传输是稳定的,速度一定的,CANFD的传输速率是可变的,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps,CAN-FD的传输格式如下图所示。
所以此时如何根据DBC计算他的负载率呢?
首先不能用原本的bit来计算,而要用帧来计算,因为数据传输速率不一定,所以你也不能确定到底传输了多少bit,而根据DBC我们可以知道他的循环周期,知道循环周期,就知道他每个周期传输的数据是一帧,所以如果 cyclic = 40 ms,那么他一秒内传25帧数据。
1.2 举例如何根据DBC计算公CANFD 的负载率
首先查看关于某一路的 TX 与 RX message,下面的DBC文件的 CMD 波特率为 500kps,而数据字段的传输速率为2000kps,并且是标准帧 CAN。
TX:
RX:
Mothod是NoMsgSendType的不用管,主要计算方式为 Cyclic 的。1(sec)/time(ms)=循环次数=发布多少数据帧
计算TX + RX :如上图,Tx+Rx = 25 + 17*35 + 10 +20 =650;
计算波特率为500kps能够发送多少标准数据帧,即 500000 / 108 = 4630
提示:波特率,在信息传输通道中,携带数据信息的信号单元叫码元,单位时间内通过信道传输的码元数称为码元传输速率,简称波特率,比特率指单位时间内通过信道传输的信息量(也称为位传输速率),即单位时间内传送的二进制位数,用来表示有效数据的传输速率,用b/s 、bit/s、比特/秒,读作:比特每秒,比特率在数值上和波特率有这样的关系:
其中I为传信率,S为波特率,N为每个符号承载的信息量,而以比特为单位。计算下来,比特率约等于波特率:
所以负载率是用实际传输的帧(650) / 500波特率下总传输帧(4630) = 14.0389%。