硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1265|回复: 10
收起左侧

[CAN/FDCAN] 求助帖:关于CANFD的数据域和仲裁域直接的联系

[复制链接]

4

主题

8

回帖

20

积分

新手上路

积分
20
QQ
发表于 2021-12-22 17:06:37 | 显示全部楼层 |阅读模式
本帖最后由 woshi520laox 于 2021-12-22 17:17 编辑

求助帖:关于CANFD的数据域和仲裁域直接的联系
使用开发环境:STM32H7
硬件: CANFD
我一开始的想法是这样的,CANFD的报文总线有一个仲裁的过程,根据ID,谁有优先级高,那么就优先发送谁的报文。
那么当总线中数据比较多的时候就会产生总线仲裁,把优先级高的数据优先发送,那么仲裁域的速度理论上只有在总线中同时出现多个数据的时候会发生
所以当总线中的数据不多的时候,仲裁域并没有多大的影响。

所以接下来使用过程中问题就出现了。

CAN-FD 可以以更高的速率传输数据,仲裁段(ID 和 ACK)的速率和 CAN 一样最高 1Mbps,
保持不变,这样可以保证总线健壮可靠。但是 CAN-FD 帧数据段可以 5Mbps 甚至更高!这个技
术叫做数据段波特率可变, CAN-FD 中 FD 的全称就是 Flexible Data-Rate

那么我不关心仲裁的速度,因为很快可以忽略。
所以继续往下,根据安富莱的例子描述

        /*                    位时间特性配置
                Bit time parameter         | Nominal      |  Data
                ---------------------------|--------------|----------------
                fdcan_ker_ck               | 20 MHz       | 20 MHz
                Time_quantum (tq)          | 50 ns        | 50 ns
                Synchronization_segment    | 1 tq         | 1 tq
                Propagation_segment        | 23 tq        | 1 tq
                Phase_segment_1            | 8 tq         | 4 tq
                Phase_segment_2            | 8 tq         | 4 tq
                Synchronization_Jump_width | 8 tq         | 4 tq
                Bit_length                 | 40 tq = 2us  | 10 tq = 0.5us
                Bit_rate                   | 0.5 MBit/s   | 2 MBit/s
        */

      根据描述和文档中的介绍,
      1、配置仲裁阶段波特率
      CAN时钟20MHz时,仲裁阶段的波特率就是
      CAN FD Freq / (Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2) = 20MHz / (1+0x1F + 8) = 0.5Mbps        
      其中Sync_Seg是固定值 = 1 , Pro_Seg + Phase_Seg1 = NominalTimeSeg1, Phase_Seg2 = NominalTimeSeg2


      2、配置数据阶段波特率
        CAN时钟20MHz时,数据阶段的波特率就是
        CAN FD Freq / (Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2) = 20MHz / (1+5+ 4) = 2Mbps        
        其中Sync_Seg是固定值 = 1 , Pro_Seg + Phase_Seg1 = DataTimeSeg1, Phase_Seg2 = DataTimeSeg2

那么我是认为,这个时候CANFD的数据就是2M的速度发送,1M就是1us,2M应该是0.5us,0.5M是2us
所以我按照安富莱的进行配置,使用示波器查看数据如下。
稍微做了一些修改,修改方式是:  FDCAN_FRAME_FD_NO_BRS
g_hfdcan[ch].Init.FrameFormat = FDCAN_FRAME_FD_NO_BRS;

如果我不按照这个配置发现CAN分析仪接收不到。
那么实际和我的理解有出入了,因为我认为主要的配置在数据域上,仲裁默认配置为1M即可。
还有正点原子配置的是只有1M的仲裁阶段,没有配置数据阶段。实际波特率就是仲裁域的速度
实际上整个CANFD的数据的速度都在仲裁域上,貌似和数据域关系不大。因为我使用周立功的CANFD工具抓取数据包的时候有一个配置是这样的。
不开启CANFD加速:有仲裁,没有数据,开启了CANFD加速,才有数据域的作用。那么这个数据域就不是我理解的数据域了,仲裁域的波特率才表示CAN报文的波特率
那么CAN还是1M啊,除了64个字节以外,没什么特别的感觉,我总觉得哪里不对。

但是我实际测试的效果也是这样的。
我完全可以不配置数据域,只配置仲裁域。配置的仲裁域就是对应的CAN的波特率。
周立功.png

我想问问大家,到底是实际的数据速度是数据域,还是说就是测试的这样,实际的速度是仲裁域,其实数据域没啥用。

我认为CANFD肯定是能到达5M的波特率的,所以我认为还是哪里不对,有朋友知道的。
是不是和我的配置有关系,因为我使用的是 FDCAN_FRAME_FD_BRS
会不会因为FDCAN_FRAME_FD_NO_BRS 这个配置导致使用最低的波特率,因为不能改变,但是我使用 FD_BRS周立功的CAN分析仪就接收不到数据了。因为我开启了重发机制,导致整个数据报文就特别的多,一直在进行数据的重发
还是这个FD_BRS的配置有什么要求的。否则无法启用

回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2021-12-22 17:14:38 | 显示全部楼层
我突然想起来-数据段波特率可变-是不是就表示我应该使用可变的配置,是不是类似于周立功上面写的CANFD加速这个配置了。只有加速了,那么数据域才起作用,否则就固定了仲裁域的速度
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107438
QQ
发表于 2021-12-22 17:21:08 | 显示全部楼层
1、我们做的FDCAN助手功能,经典CAN,FDCAN with 波特率可变,FDCAN with 波特率不可变,均没问题

QQ截图20211222172058.png

2、仲裁阶段和数据阶段速度,要看波形要示波器看,分析仪看不出什么东西。


3、标准的CANFD就是2Mbps的速度,这个是博世给的,可以去他们官网看,FDCAN最早就是博世和其他公司一起倒腾的。
其它都是变种,或者厂家自己做的骚操作。

经典CAN是1Mbps,CAN FD最高2Mbps,CAN FD-SiC是5-8Mbps,CAN XL是10Mbps。



回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2021-12-22 17:23:39 | 显示全部楼层
哦,已经解决,没问题的,的确需要把周立功的也配置对才行,都是0.5M仲裁+2M数据,我用示波器查看是对的。500ns的时间间隔,关键就在于FD_BRS是否可变。
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2021-12-22 17:35:19 | 显示全部楼层
eric2013 发表于 2021-12-22 17:21
1、我们做的FDCAN助手功能,经典CAN,FDCAN with 波特率可变,FDCAN with 波特率不可变,均没问题

好的,我刚才使用了配置,的确上到了2M,然后我想使用4M试试,但是实际上没有上去,配置1M仲裁+4M数据,使用示波器查看,变成了1M,没有上到4M,是不是因为用的是CAN FD,最高只能到2M,而不是上面写的CAN FD-SiC是5-8Mbps的缘故呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107438
QQ
发表于 2021-12-23 09:45:07 | 显示全部楼层
woshi520laox 发表于 2021-12-22 17:35
好的,我刚才使用了配置,的确上到了2M,然后我想使用4M试试,但是实际上没有上去,配置1M仲裁+4M数据, ...

购买CAN FD-SiC收发器试试
回复

使用道具 举报

4

主题

8

回帖

20

积分

新手上路

积分
20
QQ
 楼主| 发表于 2021-12-23 15:20:42 | 显示全部楼层
eric2013 发表于 2021-12-23 09:45
购买CAN FD-SiC收发器试试

我用的CAN收发器是 ISO1044 最大支持5M,我测试了2M是可以的,不过配置4M的时候,用示波器只看到了仲裁帧,配置的是0.5M,数据帧就没有了。这个收发器可以到4M的,我的波特率的配置是:
240M主频,2分频= 120M
120/(1+8+21) = 120/30 = 4M
2,8,21,8
DataPrescaler = presc;
DataSyncJumpWidth = ntsjw;
DataTimeSeg1 = ntsg1;     
DataTimeSeg2 = ntsg2;   
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107438
QQ
发表于 2021-12-24 01:06:09 | 显示全部楼层
woshi520laox 发表于 2021-12-23 15:20
我用的CAN收发器是 ISO1044 最大支持5M,我测试了2M是可以的,不过配置4M的时候,用示波器只看到了仲裁帧 ...

帮你用我们H7-TOOL测试了下,5Mbps没问题

数据段设置的5Mbps,仲裁段1Mbps:


回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-3-18 00:35:43 | 显示全部楼层
woshi520laox 发表于 2021-12-23 15:20
我用的CAN收发器是 ISO1044 最大支持5M,我测试了2M是可以的,不过配置4M的时候,用示波器只看到了仲裁帧 ...

采样点不匹配吧
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-3-18 16:36:12 | 显示全部楼层
您好,我这边正好遇到这个问题:数据段2Mbps仲裁段500Kbps发送是正常的,周立功CANFD卡配置同样波特率可以接收到。但是设置成数据段5Mbps仲裁段500Kbps,周立功那边配置同样波特率,就接收不到了,并且记录了很多错误帧。。。ic使用的ISO1042,可以交流讨论一下吗 我qq  734806050
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107438
QQ
发表于 2022-3-18 18:41:03 | 显示全部楼层
这件事有空再说 发表于 2022-3-18 16:36
您好,我这边正好遇到这个问题:数据段2Mbps仲裁段500Kbps发送是正常的,周立功CANFD卡配置同样波特率可以 ...

试试我们TOOL原理图上提供的那款PHY,那个是确定没问题的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-31 16:39 , Processed in 0.226748 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表