https://my.oschina.net/u/2252538/blog/3191024
CAN-FD:英文为 CAN with Flexible Data-Rate,翻译为【可变速率的 CAN】
BRS (Bit Rate Switch) 位速率转换开关,当 BRS 为显性位时数据段的位速率与仲裁段的位速率一致,当 BRS 为隐性位时数据段的位速率高于仲裁段的位速率;
CAN-FD 采用了两种位速率:从控制场中的 BRS 位到 ACK 场之前(含 CRC 分界符)为可变速率,其余部分为原 CAN 总线用的速率。两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位 TQ 外,位时间各段的分配比例也可不同。
因此,对于 CAN-FD,是在 CAN 的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原 CAN 总线用的速率。说白了 CANFD 支持两种传输速率,两种速率可以保持一致,也可以不保持一致。
上图上 CubeMX 截图,下面讲解一下如何进行位速率设置:
CAN-FD 有两种模式:
- FDCAN_FRAME_FD_NO_BRS 不使用位速率转换开关
- 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 |
意思就是一个 bit 的长度,主要目的是为了准确采集到该 bit 属于高电平或者低电平,由于电信号的上升沿或者下降沿都有损耗,不是标准的高电平或者低电平,因此在该电平 80% 左右位置对该 bit 位电平进行采样最为合适,采到的信号最为稳定。
采样点是在 seg1 后面;同步段一般占用 1td;
采样率计算公式:
sample = (1+proseg+seg1)/(1+proseg+seg1+seg2);
/* 波特率计算公式 */
Baudrate = 1/bit time
Bit time = Syncseg+Phaseseg1+Phaseseg2
其中 Phaseseg1 包含了 progseg 段,用来吸收网络上的物理延迟。
对于常用的 CAN 速率:
由于 hal 库里对应的四个值都进行了加 1 操作,如:
Nominal Prescaler = NBRP [8:0]+1, 因此公式简化如下:
举例:
HSE 25M,主频 400M,fdcanclk 为 200M,baudrate = 500k,则
可以设置 tsyncseg = 10,tsge1=31,tseg2=8,tsjw=8;
其中 tsjw 是包含在 tseg1 中的,在 tseg1 前面那一段。
标签:分析,FRAME,BRS,CANFD,传输速率,FD,速率,bit From: https://www.cnblogs.com/better-day/p/17100673.html