0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一帧CANFD报文由多少个位组成?

星星科技指导员 来源:焉知汽车 2024-04-27 06:08 次阅读

我们知道CANFD比CAN拥有更长的数据长度(最长64字节),更高的波特率(8Mbps甚至更高)。那么波特率更高,数据更长的CANFD,一秒钟最高可以发送多少帧CANFD报文呢?

要想知道问题的答案,那么我们就要知道一帧CANFD报文由多少个位组成,再由具体波特率算出报文时间,最后就可以得出每秒能发送的帧数了。接下来,我们就一步步来算出答案。

要想知道CANFD报文由多少个位组成,那么我们就要了解CANFD帧结构,知道每个段占用位数从而得出CANFD报文位数。

帧结构

865178e4-fed6-11ee-a297-92fbcf53809c.png

如上图所示,分别为CANFD标准帧和扩展帧,其组成如下:

1. 帧起始:起始信号,由1个显性位组成。

2. 仲裁段:

标准帧仲裁段由11位ID和r1位(显性)、IDE(显性)组成,总共13位;

扩展帧仲裁段由29位ID和SRR(隐性)、IDE(隐性)、r1位(显性)组成,总共32位。

○ SRR:替代CAN标准帧中的RTR位;

○ IDE:扩展帧标志位;

○ r1:保留位,为显性;

3. 控制段:由EDL、r0、BRS、ESI、DLC总共8个位组成。

EDL:CANFD帧标识,为隐性;

r0:保留位,为显性;

BRS:位速率切换,该位显性则仍采用仲裁域波特率;该位为隐性,则该位发送到采样点后,采用数据域波特率;

ESI:错误状态指示位,指示发送节点为主动错误状态(显性),还是被动错误状态(隐性);

DLC:数据段长度指示,4个位组成。

4. 数据段:0~64字节,也就是0~512个位。

5. CRC段:由固定填充位FSB(6/7位)、填充位计数(4位)、CRC(17/21位)CRC界定符(1位)组成,总共28或33位组成。

86553650-fed6-11ee-a297-92fbcf53809c.png

6. 固定填充位(FSB):CRC段中每4个位固定填充一个与上位相反的位。

采用CRC17时,FSB为6个位;

采用CRC21时,FSB为7个位;

7. 填充位计数:由填充位计数(3位)和奇偶校验位(1位)组成。

8. CRC:

报文长度小于16时,采用CRC17,17位组成;

报文长度大于16时,采用CRC21,21位组成。

9. CRC界定符:固定为隐性位;从该位采样后,切换为仲裁域波特率。

10. ACK段:由ACK位和ACK界定符位组成,总共2位。

ACK:接收节点应答位,接收节点应应答显性位;

ACK界定符,固定为隐性;

11. 帧结束:固定为7个隐性位。

12. 帧间隔:每次发送一帧报文后,需留3位时间作为帧间隔。

一帧CANFD报文位数

知道CANFD帧结构组成后,我们可以算出:

CANFD报文位数=帧起始(1位)+仲裁段(13/32位)+控制段(8位)+数据段(0~512位)+CRC段(28/33位)+ACK段(2位)+帧结束(7位)

从上述公式中可以看出,影响报文位数主要为仲裁段(帧ID长度)和数据段(CRC段受数据段长度影响)。那么我们通过帧类型、帧长度组合出不同情况报文位数:

标准帧,数据0字节:

帧起始(1位)+仲裁段(13位)+控制段(8位)+数据段(0位)+CRC段(28位)+ACK段(2位)+帧结束(7位)=59位

标准帧,数据64字节:

帧起始(1位)+仲裁段(13位)+控制段(8位)+数据段(512位)+CRC段(33位)+ACK段(2位)+帧结束(7位)=576位

扩展帧,数据0字节:

帧起始(1位)+仲裁段(32位)+控制段(8位)+数据段(0位)+CRC段(28位)+ACK段(2位)+帧结束(7位)=78位

扩展帧,数据64字节:

帧起始(1位)+仲裁段(13位)+控制段(8位)+数据段(512位)+CRC段(33位)+ACK段(2位)+帧结束(7位)=590位

仲裁域和数据域所占报文位数

由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。

仲裁域波特率所占位数:

帧起始(1位)+仲裁段(13位)+控制段的EDL、r0、BRS(3位)+ACK段(2位)+帧结束(7位)

数据域波特率所占位数:

控制段的ESI、DLC(5位)+数据段(0~512位)+CRC段(28/33位)

主要说明的是,BRS位和CRC界定符位均同时使用了两个波特率:

BRS位:由**仲裁域波特率*仲裁域采样点+数据域波特率*(1 -仲裁域采样点)**组成;

CRC界定符:由**数据域波特率*数据域采样点+仲裁域波特率*(1 -数据域采样点)**组成;

我们此处将BRS认定采用仲裁域波特率、CRC界定符采用数据域波特率以方便计算。

位填充

当然,上述报文位数中,还未包含填充位个数。在CAN/CANFD协议中规定:每5个相同的位就必须填充一个相反位,该位即为填充位。

我们知道字节0x55或0xAA,其二进制分别为0101 0101或1010 1010,也就是每个位与上一位均相反,若此时ID和数据均为0x55或0xAA,则可以使填充位个数最少。

同理,字节0xFF或0x00,其二进制位1111 1111或00000000,也就是所有位均一致,若此时ID和数据均为0x00或0xFF,此时报文的填充位个数最多。

不同类型报文所占位数

基于以上报文位数的计算,我们可以得出算出不同类型报文所占位数,如下表所示。

86716492-fed6-11ee-a297-92fbcf53809c.png

从上表可知:

当报文为CANFD标准帧ID为0x555,数据长度为0时,报文位数最少,为59位。

当报文为CANFD扩展帧ID为0x0,数据长度为64字节,数据全为0xFF时,报文位数最多,为703位。

CANFD报文时间计算

最后,我们就可以根据波特率算出不同类型报文时间了,计算公式如下:

报文时间=仲裁域位时间*仲裁域位数+数据域位时间*数据域位数

我们以位数最少的CANFD报文为例,在仲裁域波特率为1Mbps(位时间1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间= 1us * 26 + 33 * 200ns = 32.6us。

那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3个位)后才能发送下一帧报文,也就说仲裁段要在原来基础上加3个位,就可以算出每秒发送多少帧了。那么上述位数最少报文的发送时间耗时= 1us *(26 + 3)+ 33 * 200ns = 35.6us,也就是1秒钟最多可以发送1000000us / 35.6us = 28089帧报文。也就是说,1M/5M波特率下,发送CANFD标准加速帧,最多可以发送28089帧。

下面我们给出一些常用波特率下,不同类型报文每秒最多可以发送的CANFD报文帧数(下表中报文BRS位为1,ESI位为0),供大家参考。

500K/2M波特率

86849b02-fed6-11ee-a297-92fbcf53809c.png

1M/5M波特率

868b29ea-fed6-11ee-a297-92fbcf53809c.png

1M/8M波特率

86986f60-fed6-11ee-a297-92fbcf53809c.png

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2551

    浏览量

    461057
  • 波特率
    +关注

    关注

    2

    文章

    284

    浏览量

    33849
  • 帧结构
    +关注

    关注

    0

    文章

    13

    浏览量

    10624
  • CANFD
    +关注

    关注

    0

    文章

    48

    浏览量

    4834

原文标题:CANFD每秒最多可发多少帧报文是算出来的~

文章出处:【微信号:嵌入式情报局,微信公众号:嵌入式情报局】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ESP32C6作为UDP Server,使用recvfrom无法及时收到第一帧报文的原因?如何解决?

    后调用recvfrom()阻塞等待接收报文。 在测试时发现,AP在接收来自STA的第一帧UDP报文时recvfrom()无法及时返回结果,通常在STA发送第一帧
    发表于 06-06 07:34

    怎么把视一帧一帧的播放并且可以用鼠标获得某点的...

    labview 怎么把视一帧一帧的播放并且可以用鼠标获得某点的坐标并保存坐标值?
    发表于 12-01 13:48

    如何确保平铺顺序结构上一帧数据都处理完才进入下一帧

    在进行数据处理时,下一帧会用到上一帧计算出的数据,但是上一帧有好多输出的时候,有些数据并没有处理出来,就进入了下一帧,导致最后结果错误。该怎么办么?加了等待时间什么的,也不管用…
    发表于 02-27 10:39

    有关串行通信里面一帧一帧发送数据的问题!!!!

    我想实现一帧一帧的发送数据,一帧发送数据的长度可以自己定义,请问要怎么修改一帧发送数据的长度啊?怎么实现啊?
    发表于 07-26 10:29

    RS-485通信时一帧数据中包含多少个字节的有效数据合适呢?

    大家好,想问下有没有用单片机做过RS-485通信的呢?我现在通过自定义的RS-485协议进行多机通信,这个时候的协议中的有效数据为多少个字节比较合适呢?我看有的人说一帧数据中包含的有效字节数过多,会发生滑位,想请有经验的指点
    发表于 04-06 09:38

    请问STM32F4的OTG模块一帧内32最大可以传输多少字节给PC?

    我使用的是OTG_FS的bulk方式传输,PC为主机,单片机为设备。1:一帧内32最大可以传输多少字节给PC?一帧内可以传输多少次事务,次事务传输可以传输多少个数据包,
    发表于 11-14 09:03

    can总线报文的数据结构原理

    组成起始标志数据的开始(远程同样具有起始),它仅
    发表于 12-17 10:59

    为什么以太网发送时2变为了一帧

    在调试网口的过程中发现应该是2的数据接收过程中变为了一帧硬件平台 为stm32f407+DM9161 在定时器内 1秒钟 调用次tcp_write函数发送个固定好的字符窜 求大神
    发表于 10-30 23:33

    CAN报文定义

    协议中CAN报文种类报文传输过程中有:数据、远程、错误、过载
    发表于 09-14 09:23

    CANFD的发送模式解析

    + TXFIFO。三者的区别如下:1. TXBUFF 发送模式TXBUFF 的发送方式为专用发送发送缓存区,每个换缓存区仅能保存一帧报文,根据对 Message RAM 的配置可以选择将报文放入指定编号的发送
    发表于 03-21 14:35

    CANFD的接收模式简析

    定要明白滤波器只在接收报文时生效,发送模式与滤波器无关。通过对 Message RAM 的配置可知,CANFD 的滤波器配置可以分为两套,分别是:标准标识符。(ID范围:0x00
    发表于 04-14 15:43

    串口一帧数据到底什么意思,比如接收串汉字个汉字算一帧吗?

    关于串口接收发送问题,一帧数据到底什么意思,比如接收串汉字,个汉字算一帧吗?还是不固定。搞不懂
    发表于 09-26 08:03

    【Z站推荐】CANFD每秒最多可以发送多少帧报文

    我们知道CANFD比CAN拥有更长的数据长度(最长64字节),更高的波特率(8Mbps甚至更高)。那么波特率更高,数据更长的CANFD,一秒钟最高可以发送多少帧CANFD报文呢?我们知
    的头像 发表于 07-29 09:34 1526次阅读
    【Z站推荐】<b class='flag-5'>CANFD</b>每秒最多可以发送多少帧<b class='flag-5'>报文</b>?

    一帧CAN报文多少字节

    一帧CAN FD报文位数 根据CAN FD帧结构组成,可以算出一帧CAN FD报文位数: CAN FD
    的头像 发表于 07-18 10:48 6423次阅读

    CAN FD报文时间计算

    1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间 = 1us * 26 + 33 * 200ns = 32.6us。 那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3
    的头像 发表于 07-18 10:49 1996次阅读
    CAN FD<b class='flag-5'>报文</b>时间计算