在CAN总线网络里,还有一个经常被大家提起的概念-总线负载率,负载率,顾名思义,就是指这段时间内总线上实际传输的信息量/理论上可传输的最大信息量。
不知道大家平时怎么理解一个“概念”或“定义”,洒家的小窍门是“咬文爵字”和“抠字眼”。
具体要抠哪些字眼,可以参考老罗的锤子手机原创、最近被微信抄了去的big bang大爆炸。这个概念里,有两个需要重点理解的点:“这段时间”、“理论最大信息量”。
“这段时间”可长可短,也意味着负载率是可变的。需要特别关注的有两个:平均负载率和峰值负载率。根据洒家多年的小经验,平均负载率大多低于40-50%,峰值负载率也不超过70-80%。
因此我们需要关注负载率超了具体产生的影响:
针对某个具体的CAN网络,从技术上来说,把原本30%的平均负载率提高到50%也没啥,但是还是建议30%,或许30%最保险吧。
另外,“理论上可以传输的最大信息量”取决于总线速率。具体来说,低速CAN为125kbps,高速CAN为500kbps,CAN-FD为2Mbps,再往上,Flexray站出来说了“此吾家事,汝不得预也!”。
在制定负载率时,会牵涉到一个概念-报文时长。洒家不少同事说起报文时长来,经常不清不楚,模模糊糊。其实,真正找到关键,问题就很简单了。
报文时长的计算公式:报文时长=位时长x报文位数。
在这个公式里,位时长当然等于速率的倒数,比如125kbps的通信速率,位时长=8us。而报文位数,则取决于CAN报文的结构。报文结构如下图所示:
一个完整的CAN报文由七个不同的Field(场/域/段)组成:帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾。
SOF为帧起始,标志着数据帧和远程帧的起始,由一个单独的“显性”位组成。
仲裁场包括识别符和远程发送请求位(RTR)。识别符的长度为11位。
控制场由6个位组成,包括数据长度代码和两个将来作为扩展用的保留位。
数据场由数据帧中的发送数据组成。它可以为0~8 个字节。
CRC场包括CRC序列(CRC SEQUENCE),其后是CRC界定符(CRC DELIMITER)。CRC序列为15位,CRC界定符包含一个单独的“隐性”位 。
应答场长度为2个位,包含应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。
帧结尾由一标志序列界定。这个标志序列由7 个“隐性”位组成。
所以一个8字节的数据帧的位数为1(帧起始)+ 12(仲裁场)+ 6(控制场)+ 64(数据场)+ 16(CRC场)+ 2(应答场)+ 7(帧结尾)= 108位。
报文之间存在帧间空间INTERFRAME SPACE。帧间包括间歇场、总线空闲的位场。间歇场包括3 个“隐性”的位。总线空闲的(时间)长度是任意的。所以,一个8字节的数据帧至少需要(108+3+1)* bitrate的时长,对于125kbps,需要0.896ms。
审核编辑:汤梓红
-
CAN
+关注
关注
57文章
2747浏览量
463671 -
总线
+关注
关注
10文章
2881浏览量
88075 -
负载率
+关注
关注
1文章
4浏览量
2903
发布评论请先 登录
相关推荐
评论