查看: 1457|回复: 2

[原创] LPC55S16之 CANFD 测试

[复制链接]
  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2929

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7812
    最后登录
    2024-4-28
    发表于 2021-7-22 17:06:55 | 显示全部楼层 |阅读模式
    本帖最后由 jundao721 于 2021-12-3 16:25 编辑

    继上次测试完CAN以后,总觉得移植测试CANFD稍复杂点。没想到比我想的要简单的多,所以说测试新功能还是要有信心的。
    测试目标还是2S发送数据,中断接收。由于CANFD的测试盒比较贵,暂时只能使用Loopback模式,连接方式如图1所示:

    两种mode,external loopback和internal oopback。这里选external loopback,和CAN硬件有关系。
    移植过程中需要增加systick的2S延时,上一篇已经说过了。需要有几个地方注意,第一个如下代码:
    1. if (MCAN_FDCalculateImprovedTimingValues(mcanConfig.baudRateA, mcanConfig.baudRateD, MCAN_CLK_FREQ, &timing_config))
    2.     {
    3.         /* Update the improved timing configuration*/
    4.         memcpy(&(mcanConfig.timingConfig), &timing_config, sizeof(mcan_timing_config_t));
    5.     }
    复制代码
    CANFD有两个波特率,一个是仲裁波特率,就是Arbitration,也有翻译成控制波特率,这个最大到1Mbps,这里设置成500kbps。另一个是数据波特率,根据datasheet说明,受外部收发器的影响。这里设置成1Mbps。
    第二个是发送的数据,CANFD一次可发送64个字节的数据,这个在测试中会展示。

    第三个就是要使能外部loopback模式,如代码所示:
    1. mcanConfig.enableLoopBackExt = true;//使能loopbackext模式
    复制代码
    发送配置如下:
    1. for (cnt = 0; cnt < CAN_DATASIZE; cnt++)
    2.     {
    3.         tx_data[cnt] = cnt;
    4.     }
    5.     txFrame.xtd  = kMCAN_FrameIDStandard;
    6.     txFrame.rtr  = kMCAN_FrameTypeData;
    7.     txFrame.fdf  = 0;
    8.     txFrame.brs  = 0;
    9.     txFrame.dlc  = 8U;
    10.     txFrame.id   = 0x123U << STDID_OFFSET;
    11.     txFrame.data = tx_data;
    12.     txFrame.size = CAN_DATASIZE;
    13. #if (defined(USE_CANFD) && USE_CANFD)
    14.     txFrame.fdf = 1;
    15.     txFrame.brs = 1;
    16.     txFrame.dlc = DLC;
    17. #endif
    18.     MCAN_TransferSendBlocking(EXAMPLE_MCAN, 0, &txFrame);
    19.                 SysTick_DelayTicks(2000U);
    复制代码

    接收处理如下:
    1. memset(rx_data, 0, sizeof(uint8_t) * CAN_DATASIZE); //rx_data 清零
    2. //SysTick_DelayTicks(500U);
    3.                
    4.                  while (!rxComplete)
    5.     {
    6.     }
    7.                  rxFrame.size = CAN_DATASIZE;
    8.                 memcpy(rx_data, rxFrame.data, rxFrame.size);
    9.                
    10.     }
    复制代码

    测试结果如图2所示。


    图1

    图1

    图2

    图2
    加油哦
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2021-7-23 09:14:00 | 显示全部楼层
    只有几行代码?
    看样子CAN-FD这个新协议,复杂的东西都被封装好了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-5 08:47
  • 签到天数: 1 天

    [LV.1]初来乍到

    91

    主题

    2929

    帖子

    2

    金牌会员

    Rank: 6Rank: 6

    积分
    7812
    最后登录
    2024-4-28
     楼主| 发表于 2021-7-23 10:39:02 | 显示全部楼层
    jobszheng5 发表于 2021-7-23 09:14
    只有几行代码?
    看样子CAN-FD这个新协议,复杂的东西都被封装好了

    嗯,其实把CAN搞明白了,CANFD改几行代码就行了。
    加油哦
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-4-28 12:51 , Processed in 0.117970 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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