本帖最后由 小恩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 时钟来源两个:外设时钟和晶振时钟,然后通过分频得到Tq,也就是位时钟。
2.2 位时钟相关参数 位时钟相关参数有:PRESDIV, PROPSEG, PSEG1, PSEG2, RJW 仲裁波特率相关参数:SYNC_SEG,EPROPSEG,EPSEG1, EPSEG2,EPRESDIV 数据波特率相关参数:SYNC_SEG,FPROPSEG,FPSEG1,FPSEG2,FPRESDIV 时钟位情况:
图2 相关公式如下:
图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 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数据波特率 相关代码如下:
- #define FLEXCAN_CLOCK_SOURCE_SELECT (0U)
- #define FLEXCAN_CLOCK_SOURCE_DIVIDER (1U)
- #define EXAMPLE_CAN_CLK_FREQ ((CLOCK_GetFreq(kCLOCK_Usb1PllClk) / 8) / (FLEXCAN_CLOCK_SOURCE_DIVIDER + 1U))
复制代码 Usb1PllClk=480Mhz,则CAN模块时钟为:480Mhz/8/(1+1)=30Mhz
- #define SET_CAN_QUANTUM 1
- //the arbitration baudrate is 500Kbit/s, and data baudrate is 5Mbit/s
- #define PSEG1 3
- #define PSEG2 2
- #define PROPSEG 1
- //data baudrate is 5Mbps
- #define FPSEG1 1
- #define FPSEG2 1
- #define FPROPSEG 1
复制代码Main 函数在调用初始化之前,配置如下代码:
- flexcanConfig.baudRate = 500000U;
- flexcanConfig.baudRateFD = 5000000U;/* change*/
复制代码FLEXCAN_FDInit函数中添加:
- fdctrl |= CAN_FDCTRL_TDCEN_MASK;
复制代码当BSR使能,并且波特率高于2.5Mbps的时候,使能FDCTRL[TDCEN],而且提到的高波特率配置有问题,很多时候也是因为这个位没有使能。 测试使用一块MIMXRT1060-EVK开发板作为CAN node A, CAN总线和CAN调试工具PEAKPCAN-USB Pro连接,使用PC端接收发送CANFD数据。 测试结果如下:
图5
图6 PEAKCANFD 配置情况:
图7
图8
图9
图10
图11
可以看到,可以实现CANFD数据的发送与接收,能够正常通信。 给出部分CAN_TX数据线逻辑分析仪波形,用来测试具体的对于波特率情况:
图12 可以看到前面的仲裁波特率是500khz,后面的数据波特率是5Mhz,波特率很准确。 |