硬汉嵌入式论坛

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

[CAN/FDCAN] 关于CAN-FD传输速率设定的分析

[复制链接]

10

主题

19

回帖

49

积分

初级会员

积分
49
发表于 2020-3-10 15:19:19 | 显示全部楼层 |阅读模式
CAN-FD:英文为CAN with Flexible Data-Rate,翻译为【可变速率的CAN】

图片1.png
BRS(Bit Rate Switch)位速率转换开关,当BRS为显性位时数据段的位速率与仲裁段的位速率一致,当BRS为隐性位时数据段的位速率高于仲裁段的位速率;
CAN-FD采用了两种位速率:从控制场中的BRS位到ACK场之前(含CRC分界符)为可变速率,其余部分为原CAN总线用的速率。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位TQ外,位时间各段的分配比例也可不同。
因此,对于CAN-FD,是在CAN的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原CAN总线用的速率。说白了CANFD支持两种传输速率,两种速率可以保持一致,也可以不保持一致。
图片2.png
上图上CubeMX截图,下面讲解一下如何进行位速率设置:
CAN-FD有两种模式:
1.FDCAN_FRAME_FD_NO_BRS 不使用位速率转换开关
2.FDCAN_FRAME_FD_BRS     使用位速率转换开关
这两种模式怎么设置niminal速率和data速率呢?如下:
Mode = FDCAN_FRAME_FD_NO_BRS 的时候,两种速率保持一致,只需要设置常规的CAN速率即可,即nominal速率。
Mode = FDCAN_FRAME_FD_BRS 的时候,需要两个速率都要设置,并且data速率要大于等于nominal速率。
接下来说一下怎么设置位速率:
位速率组成:
Syncseg
Propseg
Phaseseg1
Phaseseg2
同步段
传播时间段
相位缓冲段1
相位缓冲段2
Baudrate = 1/bit time
Bit time = Syncseg+Phaseseg1+Phaseseg2
其中 Phaseseg1包含了 progseg段,用来吸收网络上的物理延迟。
图片3.png
对于常用的CAN速率:
图片4.png
由于hal库里对应的四个值都进行了加1操作,如:
Nominal Prescaler = NBRP[8:0]+1,因此公式简化如下:
图片5.png
举例:
HSE 25M,主频400Mfdcanclk 200M,baudrate = 500k,则
可以设置tsyncseg = 10,tsge1=31,tseg2=8,tsjw=8
其中tsjw是包含在tseg1中的,在tseg1前面那一段。

图片5.png

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2020-3-10 15:34:42 | 显示全部楼层
非常感谢楼主分享
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2020-4-25 11:09:48 | 显示全部楼层
本帖最后由 lpc140326 于 2020-4-25 11:12 编辑

大佬,
你好,
           我看了你上面发的帖子,感谢你的分享,我收获很大,但我有个两个小疑问,疑问①、帖子里面最后总结了一个公式,请问公式分母里的Tsyncseg对应的是哪个结构体成员呢?
疑问②、HAL库里面的FDCAN配置结构体里有一个成员NominalPrescaler,见图1-2第48行,请问这个成员怎么配置呢?


图1-1:楼主总结的公式


图1-2:FDCAN_HandleTypeDef hfdcan结构体赋值图

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 22:45 , Processed in 0.160101 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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