查看: 5545|回复: 7

[原创] 【经验分享】RT1060 CANFD高波特率配置与测试

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20003
最后登录
2024-4-24
发表于 2021-5-8 15:47:11 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2021-5-8 15:50 编辑

【经验分享】RT1060 CANFD高波特率配置与测试
一 文档简介

最近总是遇到一些客户在配置RT1060 CAN3也就是CANFD,当CANFD 数据段波特率配置比较高,比如高于2M的时候,比如配置为5Mbps,总是出现波特率配不好的情况,无法正确通信,所以本篇经验分享主要讲关于RT1060 CANFD高数据波特率配置的情况以及测试结果,测试平台MIMXRT1060-EVK开发板,测试代码基于SDK_2.9.2_EVK-MIMXRT1060.
二  CANFD波特率知识

    对于CANFD的波特率,分为两部分:仲裁波特率和数据波特率。仲裁波特率频率和CAN波特率一致,频率不是很高,可达1 Mbps, 但是数据段可以是高速波特率,最高可达8Mbps。
    下面给出和RT1060波特率相关的一些参数。

2.1 CAN时钟情况
1.jpg
图1
时钟来源两个:外设时钟和晶振时钟,然后通过分频得到Tq,也就是位时钟。

2.2 位时钟相关参数
位时钟相关参数有:PRESDIV, PROPSEG, PSEG1, PSEG2, RJW
仲裁波特率相关参数:SYNC_SEG,EPROPSEG,EPSEG1, EPSEG2,EPRESDIV
数据波特率相关参数:SYNC_SEG,FPROPSEG,FPSEG1,FPSEG2,FPRESDIV
时钟位情况:

2.jpg
图2
相关公式如下:

3.jpg
图3
所以,这里以CAN模块时钟30Mhz外设时钟为例,配置500Kbps仲裁波特率,5Mbp数据波特率,计算相关参数。
500Kbps仲裁波特率
[1+(EPSEG1+1)+(EPSEG2+1)+(EPROPSEG+1)]*(EPRESDIV+1)=30M/500K=60
EPRESDIV=5,则:
1+(EPSEG1+1)+(EPSEG2+1)+(EPROPSEG+1)=10

4.jpg
图4
Time Segment1= EPROPSEG+EPSEG1+2
Time Segment2= EPSEG2+1
选择:
EPROPSEG =1
EPSEG1 = 3
EPSEG2 = 2
EPRESDIV=5
5Mbps数据波特率
   [1+(FPSEG1+1)+(FPSEG2+1)+FPROPSEG]*(FPRESDIV+1)=30M/5M=6
FPRESDIV=0
Time Segment1= FPROPSEG+FPSEG1+1
Time Segment2= FPSEG2+1
选择:
FPROPSEG= 1
FPSEG1 =1
FPSEG2 =1
FPRESDIV=0

三 代码配置与测试结果
本文测试代码基于:SDK_2.9.2_EVK-MIMXRT1060\boards\evkmimxrt1060\driver_examples\canfd\interrupt_transfer
上述条件:30Mhz输入时钟,500kbps仲裁波特率,5Mbps数据波特率
相关代码如下:

  1. #define FLEXCAN_CLOCK_SOURCE_SELECT (0U)
  2. #define FLEXCAN_CLOCK_SOURCE_DIVIDER (1U)
  3. #define EXAMPLE_CAN_CLK_FREQ ((CLOCK_GetFreq(kCLOCK_Usb1PllClk) / 8) / (FLEXCAN_CLOCK_SOURCE_DIVIDER + 1U))
复制代码
Usb1PllClk=480Mhz,则CAN模块时钟为:
480Mhz/8/(1+1)=30Mhz


  1. #define SET_CAN_QUANTUM 1

  2. //the arbitration baudrate is 500Kbit/s, and data baudrate is 5Mbit/s
  3. #define PSEG1 3
  4. #define PSEG2 2
  5. #define PROPSEG 1
  6. //data baudrate is 5Mbps
  7. #define FPSEG1 1
  8. #define FPSEG2 1
  9. #define FPROPSEG 1
复制代码
Main函数在调用初始化之前,配置如下代码:

  1.         flexcanConfig.baudRate = 500000U;
  2. flexcanConfig.baudRateFD = 5000000U;/* change*/
复制代码
FLEXCAN_FDInit函数中添加:

  1. fdctrl |= CAN_FDCTRL_TDCEN_MASK;
复制代码
当BSR使能,并且波特率高于2.5Mbps的时候,使能FDCTRL[TDCEN],而且提到的高波特率配置有问题,很多时候也是因为这个位没有使能。
测试使用一块MIMXRT1060-EVK开发板作为CAN node A, CAN总线和CAN调试工具PEAKPCAN-USB Pro连接,使用PC端接收发送CANFD数据。
测试结果如下:

5.jpg
图5

6.jpg
图6
PEAKCANFD 配置情况:

7.jpg
图7

8.jpg
图8

9.jpg
图9


10.jpg
图10

11.jpg
图11

可以看到,可以实现CANFD数据的发送与接收,能够正常通信。
给出部分CAN_TX数据线逻辑分析仪波形,用来测试具体的对于波特率情况:

12.jpg
图12
可以看到前面的仲裁波特率是500khz,后面的数据波特率是5Mhz,波特率很准确。
evkmimxrt1060_canfd_interrupt_transfer.zip (648.08 KB, 下载次数: 50)
回复

使用道具 举报

  • TA的每日心情
    奋斗
    2021-5-28 05:36
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    36

    帖子

    0

    注册会员

    Rank: 2

    积分
    132
    最后登录
    2024-2-23
    发表于 2021-5-8 22:20:10 | 显示全部楼层
    你告诉我RT1021CA的400M怎么配置么,或者是确定它也支持500M,或者是代码只能通过工具自动生成也行。
    干不完的事
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    12 小时前
  • 签到天数: 1938 天

    [LV.Master]伴坛终老

    61

    主题

    1万

    帖子

    3

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    17281
    最后登录
    2024-4-24
    发表于 2021-5-9 18:46:14 | 显示全部楼层
    学习学习
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    656

    主题

    6312

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    20003
    最后登录
    2024-4-24
     楼主| 发表于 2021-6-1 09:49:41 | 显示全部楼层
    fengyun2018 发表于 2021-5-8 22:20
    你告诉我RT1021CA的400M怎么配置么,或者是确定它也支持500M,或者是代码只能通过工具自动生成也行。 ...

    楼主你好,有问题还请直接发一个问题贴出来,我们会在你的问题贴里面具体回复。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 1294 天

    [LV.10]以坛为家III

    7

    主题

    6279

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10490
    最后登录
    2024-4-24
    发表于 2021-6-8 18:18:18 | 显示全部楼层
    感谢分享!!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-8-30 17:43
  • 签到天数: 306 天

    [LV.8]以坛为家I

    14

    主题

    1746

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    2528
    最后登录
    2023-8-30
    发表于 2021-6-8 18:33:43 | 显示全部楼层
    感谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    78
    最后登录
    2023-1-28
    发表于 2022-11-6 21:57:55 | 显示全部楼层
    本帖最后由 kwcha333 于 2023-1-2 13:48 编辑

    感谢分享














    印刷易的設計服務更能作無限次修改,而在交貨後的餐盤紙六個月內更能免費進行修改一次,務求能做到精益求精、一絲不苟

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2022-5-8 00:22
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    5

    帖子

    0

    注册会员

    Rank: 2

    积分
    56
    最后登录
    2023-3-28
    发表于 2023-3-11 22:50:00 | 显示全部楼层
    您好呀,请教一个问题,在RT1060参考手册中提到
    If the length of the time quantum in the nominal bit timing and the length of the time quantum in the data bit timing are not identical, a quantization error of up to one time quantum of the arbitration phase may be present as a phase error. This situation can occur after the switch from arbitration to data phase and will last until the next synchronization event. Thus, the length of the time quantum should be the same in nominal and data bit timing in order to minimize the chance of error frames on the CAN bus, and to optimize the clock tolerance in networks that use FD frames.
    请问下如果CANFDD中仲裁段和数据段的Tq不同(也就是EPRESDIV和FPRESDIV)是不是一般不会有问题?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 22:43 , Processed in 0.148838 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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